From 30feef64af1528f6c9b7b43eaa683734dabaf294 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Thu, 9 Nov 2023 17:25:36 +0100 Subject: [PATCH 01/37] update: updated poetry dependencies, testing unit tests --- poetry.lock | 2452 ++++++++++++++++++++++++++---------------------- pyproject.toml | 4 +- 2 files changed, 1308 insertions(+), 1148 deletions(-) diff --git a/poetry.lock b/poetry.lock index 279f6e2..421c9b0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "absl-py" @@ -13,98 +13,98 @@ files = [ [[package]] name = "aiohttp" -version = "3.8.5" +version = "3.8.6" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.6" files = [ - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a94159871304770da4dd371f4291b20cac04e8c94f11bdea1c3478e557fbe0d8"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:13bf85afc99ce6f9ee3567b04501f18f9f8dbbb2ea11ed1a2e079670403a7c84"}, - {file = "aiohttp-3.8.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ce2ac5708501afc4847221a521f7e4b245abf5178cf5ddae9d5b3856ddb2f3a"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96943e5dcc37a6529d18766597c491798b7eb7a61d48878611298afc1fca946c"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ad5c3c4590bb3cc28b4382f031f3783f25ec223557124c68754a2231d989e2b"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c413c633d0512df4dc7fd2373ec06cc6a815b7b6d6c2f208ada7e9e93a5061d"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df72ac063b97837a80d80dec8d54c241af059cc9bb42c4de68bd5b61ceb37caa"}, - {file = "aiohttp-3.8.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c48c5c0271149cfe467c0ff8eb941279fd6e3f65c9a388c984e0e6cf57538e14"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:368a42363c4d70ab52c2c6420a57f190ed3dfaca6a1b19afda8165ee16416a82"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7607ec3ce4993464368505888af5beb446845a014bc676d349efec0e05085905"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0d21c684808288a98914e5aaf2a7c6a3179d4df11d249799c32d1808e79503b5"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:312fcfbacc7880a8da0ae8b6abc6cc7d752e9caa0051a53d217a650b25e9a691"}, - {file = "aiohttp-3.8.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad093e823df03bb3fd37e7dec9d4670c34f9e24aeace76808fc20a507cace825"}, - {file = "aiohttp-3.8.5-cp310-cp310-win32.whl", hash = "sha256:33279701c04351a2914e1100b62b2a7fdb9a25995c4a104259f9a5ead7ed4802"}, - {file = "aiohttp-3.8.5-cp310-cp310-win_amd64.whl", hash = "sha256:6e4a280e4b975a2e7745573e3fc9c9ba0d1194a3738ce1cbaa80626cc9b4f4df"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ae871a964e1987a943d83d6709d20ec6103ca1eaf52f7e0d36ee1b5bebb8b9b9"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:461908b2578955045efde733719d62f2b649c404189a09a632d245b445c9c975"}, - {file = "aiohttp-3.8.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72a860c215e26192379f57cae5ab12b168b75db8271f111019509a1196dfc780"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc14be025665dba6202b6a71cfcdb53210cc498e50068bc088076624471f8bb9"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8af740fc2711ad85f1a5c034a435782fbd5b5f8314c9a3ef071424a8158d7f6b"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:841cd8233cbd2111a0ef0a522ce016357c5e3aff8a8ce92bcfa14cef890d698f"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ed1c46fb119f1b59304b5ec89f834f07124cd23ae5b74288e364477641060ff"}, - {file = "aiohttp-3.8.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84f8ae3e09a34f35c18fa57f015cc394bd1389bce02503fb30c394d04ee6b938"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:62360cb771707cb70a6fd114b9871d20d7dd2163a0feafe43fd115cfe4fe845e"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23fb25a9f0a1ca1f24c0a371523546366bb642397c94ab45ad3aedf2941cec6a"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0ba0d15164eae3d878260d4c4df859bbdc6466e9e6689c344a13334f988bb53"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5d20003b635fc6ae3f96d7260281dfaf1894fc3aa24d1888a9b2628e97c241e5"}, - {file = "aiohttp-3.8.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0175d745d9e85c40dcc51c8f88c74bfbaef9e7afeeeb9d03c37977270303064c"}, - {file = "aiohttp-3.8.5-cp311-cp311-win32.whl", hash = "sha256:2e1b1e51b0774408f091d268648e3d57f7260c1682e7d3a63cb00d22d71bb945"}, - {file = "aiohttp-3.8.5-cp311-cp311-win_amd64.whl", hash = "sha256:043d2299f6dfdc92f0ac5e995dfc56668e1587cea7f9aa9d8a78a1b6554e5755"}, - {file = "aiohttp-3.8.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cae533195e8122584ec87531d6df000ad07737eaa3c81209e85c928854d2195c"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f21e83f355643c345177a5d1d8079f9f28b5133bcd154193b799d380331d5d3"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a7a75ef35f2df54ad55dbf4b73fe1da96f370e51b10c91f08b19603c64004acc"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e2e9839e14dd5308ee773c97115f1e0a1cb1d75cbeeee9f33824fa5144c7634"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44e65da1de4403d0576473e2344828ef9c4c6244d65cf4b75549bb46d40b8dd"}, - {file = "aiohttp-3.8.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d847e4cde6ecc19125ccbc9bfac4a7ab37c234dd88fbb3c5c524e8e14da543"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:c7a815258e5895d8900aec4454f38dca9aed71085f227537208057853f9d13f2"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:8b929b9bd7cd7c3939f8bcfffa92fae7480bd1aa425279d51a89327d600c704d"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5db3a5b833764280ed7618393832e0853e40f3d3e9aa128ac0ba0f8278d08649"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:a0215ce6041d501f3155dc219712bc41252d0ab76474615b9700d63d4d9292af"}, - {file = "aiohttp-3.8.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:fd1ed388ea7fbed22c4968dd64bab0198de60750a25fe8c0c9d4bef5abe13824"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win32.whl", hash = "sha256:6e6783bcc45f397fdebc118d772103d751b54cddf5b60fbcc958382d7dd64f3e"}, - {file = "aiohttp-3.8.5-cp36-cp36m-win_amd64.whl", hash = "sha256:b5411d82cddd212644cf9360879eb5080f0d5f7d809d03262c50dad02f01421a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:01d4c0c874aa4ddfb8098e85d10b5e875a70adc63db91f1ae65a4b04d3344cda"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5980a746d547a6ba173fd5ee85ce9077e72d118758db05d229044b469d9029a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2a482e6da906d5e6e653be079b29bc173a48e381600161c9932d89dfae5942ef"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80bd372b8d0715c66c974cf57fe363621a02f359f1ec81cba97366948c7fc873"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1161b345c0a444ebcf46bf0a740ba5dcf50612fd3d0528883fdc0eff578006a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd56db019015b6acfaaf92e1ac40eb8434847d9bf88b4be4efe5bfd260aee692"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:153c2549f6c004d2754cc60603d4668899c9895b8a89397444a9c4efa282aaf4"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4a01951fabc4ce26ab791da5f3f24dca6d9a6f24121746eb19756416ff2d881b"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bfb9162dcf01f615462b995a516ba03e769de0789de1cadc0f916265c257e5d8"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7dde0009408969a43b04c16cbbe252c4f5ef4574ac226bc8815cd7342d2028b6"}, - {file = "aiohttp-3.8.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4149d34c32f9638f38f544b3977a4c24052042affa895352d3636fa8bffd030a"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win32.whl", hash = "sha256:68c5a82c8779bdfc6367c967a4a1b2aa52cd3595388bf5961a62158ee8a59e22"}, - {file = "aiohttp-3.8.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2cf57fb50be5f52bda004b8893e63b48530ed9f0d6c96c84620dc92fe3cd9b9d"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:eca4bf3734c541dc4f374ad6010a68ff6c6748f00451707f39857f429ca36ced"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1274477e4c71ce8cfe6c1ec2f806d57c015ebf84d83373676036e256bc55d690"}, - {file = "aiohttp-3.8.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c543e54710d6158fc6f439296c7865b29e0b616629767e685a7185fab4a6b9"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:910bec0c49637d213f5d9877105d26e0c4a4de2f8b1b29405ff37e9fc0ad52b8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5443910d662db951b2e58eb70b0fbe6b6e2ae613477129a5805d0b66c54b6cb7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e460be6978fc24e3df83193dc0cc4de46c9909ed92dd47d349a452ef49325b7"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb1558def481d84f03b45888473fc5a1f35747b5f334ef4e7a571bc0dfcb11f8"}, - {file = "aiohttp-3.8.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:34dd0c107799dcbbf7d48b53be761a013c0adf5571bf50c4ecad5643fe9cfcd0"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aa1990247f02a54185dc0dff92a6904521172a22664c863a03ff64c42f9b5410"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0e584a10f204a617d71d359fe383406305a4b595b333721fa50b867b4a0a1548"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a3cf433f127efa43fee6b90ea4c6edf6c4a17109d1d037d1a52abec84d8f2e42"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c11f5b099adafb18e65c2c997d57108b5bbeaa9eeee64a84302c0978b1ec948b"}, - {file = "aiohttp-3.8.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:84de26ddf621d7ac4c975dbea4c945860e08cccde492269db4e1538a6a6f3c35"}, - {file = "aiohttp-3.8.5-cp38-cp38-win32.whl", hash = "sha256:ab88bafedc57dd0aab55fa728ea10c1911f7e4d8b43e1d838a1739f33712921c"}, - {file = "aiohttp-3.8.5-cp38-cp38-win_amd64.whl", hash = "sha256:5798a9aad1879f626589f3df0f8b79b3608a92e9beab10e5fda02c8a2c60db2e"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a6ce61195c6a19c785df04e71a4537e29eaa2c50fe745b732aa937c0c77169f3"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:773dd01706d4db536335fcfae6ea2440a70ceb03dd3e7378f3e815b03c97ab51"}, - {file = "aiohttp-3.8.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f83a552443a526ea38d064588613aca983d0ee0038801bc93c0c916428310c28"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f7372f7341fcc16f57b2caded43e81ddd18df53320b6f9f042acad41f8e049a"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea353162f249c8097ea63c2169dd1aa55de1e8fecbe63412a9bc50816e87b761"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d47ae48db0b2dcf70bc8a3bc72b3de86e2a590fc299fdbbb15af320d2659de"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d827176898a2b0b09694fbd1088c7a31836d1a505c243811c87ae53a3f6273c1"}, - {file = "aiohttp-3.8.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3562b06567c06439d8b447037bb655ef69786c590b1de86c7ab81efe1c9c15d8"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4e874cbf8caf8959d2adf572a78bba17cb0e9d7e51bb83d86a3697b686a0ab4d"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6809a00deaf3810e38c628e9a33271892f815b853605a936e2e9e5129762356c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:33776e945d89b29251b33a7e7d006ce86447b2cfd66db5e5ded4e5cd0340585c"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:eaeed7abfb5d64c539e2db173f63631455f1196c37d9d8d873fc316470dfbacd"}, - {file = "aiohttp-3.8.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e91d635961bec2d8f19dfeb41a539eb94bd073f075ca6dae6c8dc0ee89ad6f91"}, - {file = "aiohttp-3.8.5-cp39-cp39-win32.whl", hash = "sha256:00ad4b6f185ec67f3e6562e8a1d2b69660be43070bd0ef6fcec5211154c7df67"}, - {file = "aiohttp-3.8.5-cp39-cp39-win_amd64.whl", hash = "sha256:c0a9034379a37ae42dea7ac1e048352d96286626251862e448933c0f59cbd79c"}, - {file = "aiohttp-3.8.5.tar.gz", hash = "sha256:b9552ec52cc147dbf1944ac7ac98af7602e51ea2dcd076ed194ca3c0d1c7d0bc"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:41d55fc043954cddbbd82503d9cc3f4814a40bcef30b3569bc7b5e34130718c1"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1d84166673694841d8953f0a8d0c90e1087739d24632fe86b1a08819168b4566"}, + {file = "aiohttp-3.8.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:253bf92b744b3170eb4c4ca2fa58f9c4b87aeb1df42f71d4e78815e6e8b73c9e"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fd194939b1f764d6bb05490987bfe104287bbf51b8d862261ccf66f48fb4096"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c5f938d199a6fdbdc10bbb9447496561c3a9a565b43be564648d81e1102ac22"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2817b2f66ca82ee699acd90e05c95e79bbf1dc986abb62b61ec8aaf851e81c93"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa375b3d34e71ccccf172cab401cd94a72de7a8cc01847a7b3386204093bb47"}, + {file = "aiohttp-3.8.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9de50a199b7710fa2904be5a4a9b51af587ab24c8e540a7243ab737b45844543"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1d8cb0b56b3587c5c01de3bf2f600f186da7e7b5f7353d1bf26a8ddca57f965"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8e31e9db1bee8b4f407b77fd2507337a0a80665ad7b6c749d08df595d88f1cf5"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc88fc494b1f0311d67f29fee6fd636606f4697e8cc793a2d912ac5b19aa38d"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ec00c3305788e04bf6d29d42e504560e159ccaf0be30c09203b468a6c1ccd3b2"}, + {file = "aiohttp-3.8.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ad1407db8f2f49329729564f71685557157bfa42b48f4b93e53721a16eb813ed"}, + {file = "aiohttp-3.8.6-cp310-cp310-win32.whl", hash = "sha256:ccc360e87341ad47c777f5723f68adbb52b37ab450c8bc3ca9ca1f3e849e5fe2"}, + {file = "aiohttp-3.8.6-cp310-cp310-win_amd64.whl", hash = "sha256:93c15c8e48e5e7b89d5cb4613479d144fda8344e2d886cf694fd36db4cc86865"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e2f9cc8e5328f829f6e1fb74a0a3a939b14e67e80832975e01929e320386b34"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e6a00ffcc173e765e200ceefb06399ba09c06db97f401f920513a10c803604ca"}, + {file = "aiohttp-3.8.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:41bdc2ba359032e36c0e9de5a3bd00d6fb7ea558a6ce6b70acedf0da86458321"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14cd52ccf40006c7a6cd34a0f8663734e5363fd981807173faf3a017e202fec9"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d5b785c792802e7b275c420d84f3397668e9d49ab1cb52bd916b3b3ffcf09ad"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1bed815f3dc3d915c5c1e556c397c8667826fbc1b935d95b0ad680787896a358"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96603a562b546632441926cd1293cfcb5b69f0b4159e6077f7c7dbdfb686af4d"}, + {file = "aiohttp-3.8.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d76e8b13161a202d14c9584590c4df4d068c9567c99506497bdd67eaedf36403"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e3f1e3f1a1751bb62b4a1b7f4e435afcdade6c17a4fd9b9d43607cebd242924a"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:76b36b3124f0223903609944a3c8bf28a599b2cc0ce0be60b45211c8e9be97f8"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a2ece4af1f3c967a4390c284797ab595a9f1bc1130ef8b01828915a05a6ae684"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:16d330b3b9db87c3883e565340d292638a878236418b23cc8b9b11a054aaa887"}, + {file = "aiohttp-3.8.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:42c89579f82e49db436b69c938ab3e1559e5a4409eb8639eb4143989bc390f2f"}, + {file = "aiohttp-3.8.6-cp311-cp311-win32.whl", hash = "sha256:efd2fcf7e7b9d7ab16e6b7d54205beded0a9c8566cb30f09c1abe42b4e22bdcb"}, + {file = "aiohttp-3.8.6-cp311-cp311-win_amd64.whl", hash = "sha256:3b2ab182fc28e7a81f6c70bfbd829045d9480063f5ab06f6e601a3eddbbd49a0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fdee8405931b0615220e5ddf8cd7edd8592c606a8e4ca2a00704883c396e4479"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d25036d161c4fe2225d1abff2bd52c34ed0b1099f02c208cd34d8c05729882f0"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d791245a894be071d5ab04bbb4850534261a7d4fd363b094a7b9963e8cdbd31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0cccd1de239afa866e4ce5c789b3032442f19c261c7d8a01183fd956b1935349"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f13f60d78224f0dace220d8ab4ef1dbc37115eeeab8c06804fec11bec2bbd07"}, + {file = "aiohttp-3.8.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8a9b5a0606faca4f6cc0d338359d6fa137104c337f489cd135bb7fbdbccb1e39"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:13da35c9ceb847732bf5c6c5781dcf4780e14392e5d3b3c689f6d22f8e15ae31"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:4d4cbe4ffa9d05f46a28252efc5941e0462792930caa370a6efaf491f412bc66"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:229852e147f44da0241954fc6cb910ba074e597f06789c867cb7fb0621e0ba7a"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:713103a8bdde61d13490adf47171a1039fd880113981e55401a0f7b42c37d071"}, + {file = "aiohttp-3.8.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:45ad816b2c8e3b60b510f30dbd37fe74fd4a772248a52bb021f6fd65dff809b6"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win32.whl", hash = "sha256:2b8d4e166e600dcfbff51919c7a3789ff6ca8b3ecce16e1d9c96d95dd569eb4c"}, + {file = "aiohttp-3.8.6-cp36-cp36m-win_amd64.whl", hash = "sha256:0912ed87fee967940aacc5306d3aa8ba3a459fcd12add0b407081fbefc931e53"}, + {file = "aiohttp-3.8.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2a988a0c673c2e12084f5e6ba3392d76c75ddb8ebc6c7e9ead68248101cd446"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebf3fd9f141700b510d4b190094db0ce37ac6361a6806c153c161dc6c041ccda"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3161ce82ab85acd267c8f4b14aa226047a6bee1e4e6adb74b798bd42c6ae1f80"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d95fc1bf33a9a81469aa760617b5971331cdd74370d1214f0b3109272c0e1e3c"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c43ecfef7deaf0617cee936836518e7424ee12cb709883f2c9a1adda63cc460"}, + {file = "aiohttp-3.8.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca80e1b90a05a4f476547f904992ae81eda5c2c85c66ee4195bb8f9c5fb47f28"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:90c72ebb7cb3a08a7f40061079817133f502a160561d0675b0a6adf231382c92"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bb54c54510e47a8c7c8e63454a6acc817519337b2b78606c4e840871a3e15349"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:de6a1c9f6803b90e20869e6b99c2c18cef5cc691363954c93cb9adeb26d9f3ae"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:a3628b6c7b880b181a3ae0a0683698513874df63783fd89de99b7b7539e3e8a8"}, + {file = "aiohttp-3.8.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fc37e9aef10a696a5a4474802930079ccfc14d9f9c10b4662169671ff034b7df"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win32.whl", hash = "sha256:f8ef51e459eb2ad8e7a66c1d6440c808485840ad55ecc3cafefadea47d1b1ba2"}, + {file = "aiohttp-3.8.6-cp37-cp37m-win_amd64.whl", hash = "sha256:b2fe42e523be344124c6c8ef32a011444e869dc5f883c591ed87f84339de5976"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9e2ee0ac5a1f5c7dd3197de309adfb99ac4617ff02b0603fd1e65b07dc772e4b"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01770d8c04bd8db568abb636c1fdd4f7140b284b8b3e0b4584f070180c1e5c62"}, + {file = "aiohttp-3.8.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c68330a59506254b556b99a91857428cab98b2f84061260a67865f7f52899f5"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89341b2c19fb5eac30c341133ae2cc3544d40d9b1892749cdd25892bbc6ac951"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71783b0b6455ac8f34b5ec99d83e686892c50498d5d00b8e56d47f41b38fbe04"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f628dbf3c91e12f4d6c8b3f092069567d8eb17814aebba3d7d60c149391aee3a"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04691bc6601ef47c88f0255043df6f570ada1a9ebef99c34bd0b72866c217ae"}, + {file = "aiohttp-3.8.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ee912f7e78287516df155f69da575a0ba33b02dd7c1d6614dbc9463f43066e3"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9c19b26acdd08dd239e0d3669a3dddafd600902e37881f13fbd8a53943079dbc"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:99c5ac4ad492b4a19fc132306cd57075c28446ec2ed970973bbf036bcda1bcc6"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:f0f03211fd14a6a0aed2997d4b1c013d49fb7b50eeb9ffdf5e51f23cfe2c77fa"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:8d399dade330c53b4106160f75f55407e9ae7505263ea86f2ccca6bfcbdb4921"}, + {file = "aiohttp-3.8.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ec4fd86658c6a8964d75426517dc01cbf840bbf32d055ce64a9e63a40fd7b771"}, + {file = "aiohttp-3.8.6-cp38-cp38-win32.whl", hash = "sha256:33164093be11fcef3ce2571a0dccd9041c9a93fa3bde86569d7b03120d276c6f"}, + {file = "aiohttp-3.8.6-cp38-cp38-win_amd64.whl", hash = "sha256:bdf70bfe5a1414ba9afb9d49f0c912dc524cf60141102f3a11143ba3d291870f"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d52d5dc7c6682b720280f9d9db41d36ebe4791622c842e258c9206232251ab2b"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ac39027011414dbd3d87f7edb31680e1f430834c8cef029f11c66dad0670aa5"}, + {file = "aiohttp-3.8.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3f5c7ce535a1d2429a634310e308fb7d718905487257060e5d4598e29dc17f0b"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b30e963f9e0d52c28f284d554a9469af073030030cef8693106d918b2ca92f54"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:918810ef188f84152af6b938254911055a72e0f935b5fbc4c1a4ed0b0584aed1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:002f23e6ea8d3dd8d149e569fd580c999232b5fbc601c48d55398fbc2e582e8c"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4fcf3eabd3fd1a5e6092d1242295fa37d0354b2eb2077e6eb670accad78e40e1"}, + {file = "aiohttp-3.8.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:255ba9d6d5ff1a382bb9a578cd563605aa69bec845680e21c44afc2670607a95"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d67f8baed00870aa390ea2590798766256f31dc5ed3ecc737debb6e97e2ede78"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:86f20cee0f0a317c76573b627b954c412ea766d6ada1a9fcf1b805763ae7feeb"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:39a312d0e991690ccc1a61f1e9e42daa519dcc34ad03eb6f826d94c1190190dd"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e827d48cf802de06d9c935088c2924e3c7e7533377d66b6f31ed175c1620e05e"}, + {file = "aiohttp-3.8.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bd111d7fc5591ddf377a408ed9067045259ff2770f37e2d94e6478d0f3fc0c17"}, + {file = "aiohttp-3.8.6-cp39-cp39-win32.whl", hash = "sha256:caf486ac1e689dda3502567eb89ffe02876546599bbf915ec94b1fa424eeffd4"}, + {file = "aiohttp-3.8.6-cp39-cp39-win_amd64.whl", hash = "sha256:3f0e27e5b733803333bb2371249f41cf42bae8884863e8e8965ec69bebe53132"}, + {file = "aiohttp-3.8.6.tar.gz", hash = "sha256:b0cf2a4501bff9330a8a5248b4ce951851e415bdcce9dc158e76cfd55e15085c"}, ] [package.dependencies] @@ -135,13 +135,13 @@ frozenlist = ">=1.1.0" [[package]] name = "alembic" -version = "1.11.2" +version = "1.12.1" description = "A database migration tool for SQLAlchemy." optional = true python-versions = ">=3.7" files = [ - {file = "alembic-1.11.2-py3-none-any.whl", hash = "sha256:7981ab0c4fad4fe1be0cf183aae17689fe394ff874fd2464adb774396faf0796"}, - {file = "alembic-1.11.2.tar.gz", hash = "sha256:678f662130dc540dac12de0ea73de9f89caea9dbea138f60ef6263149bf84657"}, + {file = "alembic-1.12.1-py3-none-any.whl", hash = "sha256:47d52e3dfb03666ed945becb723d6482e52190917fdb47071440cfdba05d92cb"}, + {file = "alembic-1.12.1.tar.gz", hash = "sha256:bca5877e9678b454706347bc10b97cb7d67f300320fa5c3a94423e8266e2823f"}, ] [package.dependencies] @@ -166,20 +166,19 @@ files = [ [[package]] name = "anyconfig" -version = "0.10.1" +version = "0.13.0" description = "Library provides common APIs to load and dump configuration files in various formats" optional = false python-versions = "*" files = [ - {file = "anyconfig-0.10.1-py2.py3-none-any.whl", hash = "sha256:60c795cc6ef3e6f0a74182c52dfa6e8825d852b2b9128404e1aef3b84ca077a4"}, - {file = "anyconfig-0.10.1.tar.gz", hash = "sha256:f04a5490da8563c97fad15810b0debc92351dbd4b8058dfd82d32a30a41e7e5c"}, + {file = "anyconfig-0.13.0-py2.py3-none-any.whl", hash = "sha256:17cb189938d6cda4d21a2dabcd63db86658d2556e767dfd4835b1011544a1f8e"}, + {file = "anyconfig-0.13.0.tar.gz", hash = "sha256:03ff2e1762af388fbbbed1c1ab7f9f1ec006a91da7db3a68b963da6e7795d2ac"}, ] [package.dependencies] setuptools = "*" [package.extras] -devel = ["coveralls", "flake8 (<3.5.0)", "mock", "nose", "pycodestyle (<2.4.0)", "pylint"] query = ["jmespath"] schema = ["jsonschema"] template = ["Jinja2"] @@ -188,17 +187,22 @@ yaml = ["pyyaml"] [[package]] name = "arrow" -version = "1.2.3" +version = "1.3.0" description = "Better dates & times for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, + {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 = "async-timeout" @@ -245,47 +249,48 @@ chardet = ">=3.0.2" [[package]] name = "blinker" -version = "1.6.2" +version = "1.7.0" description = "Fast, simple object-to-object and broadcast signaling" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "blinker-1.6.2-py3-none-any.whl", hash = "sha256:c3d739772abb7bc2860abf5f2ec284223d9ad5c76da018234f6f50d6f31ab1f0"}, - {file = "blinker-1.6.2.tar.gz", hash = "sha256:4afd3de66ef3a9f8067559fb7a1cbe555c17dcbe15971b05d1b625c3e7abe213"}, + {file = "blinker-1.7.0-py3-none-any.whl", hash = "sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9"}, + {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, ] [[package]] name = "build" -version = "0.10.0" +version = "1.0.3" description = "A simple, correct Python build frontend" optional = false python-versions = ">= 3.7" files = [ - {file = "build-0.10.0-py3-none-any.whl", hash = "sha256:af266720050a66c893a6096a2f410989eeac74ff9a68ba194b3f6473e8e26171"}, - {file = "build-0.10.0.tar.gz", hash = "sha256:d5b71264afdb5951d6704482aac78de887c80691c52b88a9ad195983ca2c9269"}, + {file = "build-1.0.3-py3-none-any.whl", hash = "sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f"}, + {file = "build-1.0.3.tar.gz", hash = "sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b"}, ] [package.dependencies] colorama = {version = "*", markers = "os_name == \"nt\""} +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} packaging = ">=19.0" pyproject_hooks = "*" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} [package.extras] -docs = ["furo (>=2021.08.31)", "sphinx (>=4.0,<5.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)"] -test = ["filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "toml (>=0.10.0)", "wheel (>=0.36.0)"] -typing = ["importlib-metadata (>=5.1)", "mypy (==0.991)", "tomli", "typing-extensions (>=3.7.4.3)"] +docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"] +test = ["filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "setuptools (>=56.0.0)", "setuptools (>=67.8.0)", "wheel (>=0.36.0)"] +typing = ["importlib-metadata (>=5.1)", "mypy (>=1.5.0,<1.6.0)", "tomli", "typing-extensions (>=3.7.4.3)"] virtualenv = ["virtualenv (>=20.0.35)"] [[package]] name = "cachetools" -version = "5.3.1" +version = "5.3.2" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.3.1-py3-none-any.whl", hash = "sha256:95ef631eeaea14ba2e36f06437f36463aac3a096799e876ee55e5cdccb102590"}, - {file = "cachetools-5.3.1.tar.gz", hash = "sha256:dce83f2d9b4e1f732a8cd44af8e8fab2dbe46201467fc98b3ef8f269092bf62b"}, + {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, + {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, ] [[package]] @@ -323,97 +328,112 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -443,71 +463,84 @@ files = [ [[package]] name = "contourpy" -version = "1.1.0" +version = "1.1.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = true python-versions = ">=3.8" files = [ - {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, - {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, - {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, - {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, - {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, - {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, - {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, - {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, - {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, - {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, - {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, - {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, - {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, - {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, - {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, - {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, - {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, - {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, - {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, - {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, -] - -[package.dependencies] -numpy = ">=1.16" + {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"}, + {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"}, + {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"}, + {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"}, + {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"}, + {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"}, + {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"}, + {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"}, + {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"}, + {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"}, + {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"}, + {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"}, + {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"}, + {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"}, + {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"}, + {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"}, + {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"}, + {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"}, +] + +[package.dependencies] +numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} [package.extras] bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "wurlitzer"] [[package]] name = "cookiecutter" -version = "2.3.0" +version = "2.4.0" description = "A command-line utility that creates projects from project templates, e.g. creating a Python package project from a Python package project template." optional = false python-versions = ">=3.7" files = [ - {file = "cookiecutter-2.3.0-py3-none-any.whl", hash = "sha256:7e87944757c6e9f8729cf89a4139b6a35ab4d6dcbc6ae3e7d6360d44ad3ad383"}, - {file = "cookiecutter-2.3.0.tar.gz", hash = "sha256:942a794981747f6d7f439d6e49d39dc91a9a641283614160c93c474c72c29621"}, + {file = "cookiecutter-2.4.0-py3-none-any.whl", hash = "sha256:8344663028abc08ec09b912e663636a97e1775bffe973425ec0107431acd390e"}, + {file = "cookiecutter-2.4.0.tar.gz", hash = "sha256:6d1494e66a784f23324df9d593f3e43af3db4f4b926b9e49e6ff060169fc042a"}, ] [package.dependencies] @@ -522,63 +555,63 @@ rich = "*" [[package]] name = "coverage" -version = "7.3.0" +version = "7.3.2" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.8" files = [ - {file = "coverage-7.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:db76a1bcb51f02b2007adacbed4c88b6dee75342c37b05d1822815eed19edee5"}, - {file = "coverage-7.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c02cfa6c36144ab334d556989406837336c1d05215a9bdf44c0bc1d1ac1cb637"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:477c9430ad5d1b80b07f3c12f7120eef40bfbf849e9e7859e53b9c93b922d2af"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce2ee86ca75f9f96072295c5ebb4ef2a43cecf2870b0ca5e7a1cbdd929cf67e1"}, - {file = "coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68d8a0426b49c053013e631c0cdc09b952d857efa8f68121746b339912d27a12"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b3eb0c93e2ea6445b2173da48cb548364f8f65bf68f3d090404080d338e3a689"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:90b6e2f0f66750c5a1178ffa9370dec6c508a8ca5265c42fbad3ccac210a7977"}, - {file = "coverage-7.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:96d7d761aea65b291a98c84e1250cd57b5b51726821a6f2f8df65db89363be51"}, - {file = "coverage-7.3.0-cp310-cp310-win32.whl", hash = "sha256:63c5b8ecbc3b3d5eb3a9d873dec60afc0cd5ff9d9f1c75981d8c31cfe4df8527"}, - {file = "coverage-7.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:97c44f4ee13bce914272589b6b41165bbb650e48fdb7bd5493a38bde8de730a1"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:74c160285f2dfe0acf0f72d425f3e970b21b6de04157fc65adc9fd07ee44177f"}, - {file = "coverage-7.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b543302a3707245d454fc49b8ecd2c2d5982b50eb63f3535244fd79a4be0c99d"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad0f87826c4ebd3ef484502e79b39614e9c03a5d1510cfb623f4a4a051edc6fd"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13c6cbbd5f31211d8fdb477f0f7b03438591bdd077054076eec362cf2207b4a7"}, - {file = "coverage-7.3.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fac440c43e9b479d1241fe9d768645e7ccec3fb65dc3a5f6e90675e75c3f3e3a"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3c9834d5e3df9d2aba0275c9f67989c590e05732439b3318fa37a725dff51e74"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4c8e31cf29b60859876474034a83f59a14381af50cbe8a9dbaadbf70adc4b214"}, - {file = "coverage-7.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7a9baf8e230f9621f8e1d00c580394a0aa328fdac0df2b3f8384387c44083c0f"}, - {file = "coverage-7.3.0-cp311-cp311-win32.whl", hash = "sha256:ccc51713b5581e12f93ccb9c5e39e8b5d4b16776d584c0f5e9e4e63381356482"}, - {file = "coverage-7.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:887665f00ea4e488501ba755a0e3c2cfd6278e846ada3185f42d391ef95e7e70"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d000a739f9feed900381605a12a61f7aaced6beae832719ae0d15058a1e81c1b"}, - {file = "coverage-7.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:59777652e245bb1e300e620ce2bef0d341945842e4eb888c23a7f1d9e143c446"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9737bc49a9255d78da085fa04f628a310c2332b187cd49b958b0e494c125071"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5247bab12f84a1d608213b96b8af0cbb30d090d705b6663ad794c2f2a5e5b9fe"}, - {file = "coverage-7.3.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2ac9a1de294773b9fa77447ab7e529cf4fe3910f6a0832816e5f3d538cfea9a"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:85b7335c22455ec12444cec0d600533a238d6439d8d709d545158c1208483873"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:36ce5d43a072a036f287029a55b5c6a0e9bd73db58961a273b6dc11a2c6eb9c2"}, - {file = "coverage-7.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:211a4576e984f96d9fce61766ffaed0115d5dab1419e4f63d6992b480c2bd60b"}, - {file = "coverage-7.3.0-cp312-cp312-win32.whl", hash = "sha256:56afbf41fa4a7b27f6635bc4289050ac3ab7951b8a821bca46f5b024500e6321"}, - {file = "coverage-7.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f297e0c1ae55300ff688568b04ff26b01c13dfbf4c9d2b7d0cb688ac60df479"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac0dec90e7de0087d3d95fa0533e1d2d722dcc008bc7b60e1143402a04c117c1"}, - {file = "coverage-7.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:438856d3f8f1e27f8e79b5410ae56650732a0dcfa94e756df88c7e2d24851fcd"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1084393c6bda8875c05e04fce5cfe1301a425f758eb012f010eab586f1f3905e"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49ab200acf891e3dde19e5aa4b0f35d12d8b4bd805dc0be8792270c71bd56c54"}, - {file = "coverage-7.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67e6bbe756ed458646e1ef2b0778591ed4d1fcd4b146fc3ba2feb1a7afd4254"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f39c49faf5344af36042b293ce05c0d9004270d811c7080610b3e713251c9b0"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7df91fb24c2edaabec4e0eee512ff3bc6ec20eb8dccac2e77001c1fe516c0c84"}, - {file = "coverage-7.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:34f9f0763d5fa3035a315b69b428fe9c34d4fc2f615262d6be3d3bf3882fb985"}, - {file = "coverage-7.3.0-cp38-cp38-win32.whl", hash = "sha256:bac329371d4c0d456e8d5f38a9b0816b446581b5f278474e416ea0c68c47dcd9"}, - {file = "coverage-7.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b859128a093f135b556b4765658d5d2e758e1fae3e7cc2f8c10f26fe7005e543"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc0ed8d310afe013db1eedd37176d0839dc66c96bcfcce8f6607a73ffea2d6ba"}, - {file = "coverage-7.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61260ec93f99f2c2d93d264b564ba912bec502f679793c56f678ba5251f0393"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97af9554a799bd7c58c0179cc8dbf14aa7ab50e1fd5fa73f90b9b7215874ba28"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3558e5b574d62f9c46b76120a5c7c16c4612dc2644c3d48a9f4064a705eaee95"}, - {file = "coverage-7.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37d5576d35fcb765fca05654f66aa71e2808d4237d026e64ac8b397ffa66a56a"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:07ea61bcb179f8f05ffd804d2732b09d23a1238642bf7e51dad62082b5019b34"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:80501d1b2270d7e8daf1b64b895745c3e234289e00d5f0e30923e706f110334e"}, - {file = "coverage-7.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4eddd3153d02204f22aef0825409091a91bf2a20bce06fe0f638f5c19a85de54"}, - {file = "coverage-7.3.0-cp39-cp39-win32.whl", hash = "sha256:2d22172f938455c156e9af2612650f26cceea47dc86ca048fa4e0b2d21646ad3"}, - {file = "coverage-7.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:60f64e2007c9144375dd0f480a54d6070f00bb1a28f65c408370544091c9bc9e"}, - {file = "coverage-7.3.0-pp38.pp39.pp310-none-any.whl", hash = "sha256:5492a6ce3bdb15c6ad66cb68a0244854d9917478877a25671d70378bdc8562d0"}, - {file = "coverage-7.3.0.tar.gz", hash = "sha256:49dbb19cdcafc130f597d9e04a29d0a032ceedf729e41b181f51cd170e6ee865"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d872145f3a3231a5f20fd48500274d7df222e291d90baa2026cc5152b7ce86bf"}, + {file = "coverage-7.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:310b3bb9c91ea66d59c53fa4989f57d2436e08f18fb2f421a1b0b6b8cc7fffda"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f47d39359e2c3779c5331fc740cf4bce6d9d680a7b4b4ead97056a0ae07cb49a"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa72dbaf2c2068404b9870d93436e6d23addd8bbe9295f49cbca83f6e278179c"}, + {file = "coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:beaa5c1b4777f03fc63dfd2a6bd820f73f036bfb10e925fce067b00a340d0f3f"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:dbc1b46b92186cc8074fee9d9fbb97a9dd06c6cbbef391c2f59d80eabdf0faa6"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:315a989e861031334d7bee1f9113c8770472db2ac484e5b8c3173428360a9148"}, + {file = "coverage-7.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d1bc430677773397f64a5c88cb522ea43175ff16f8bfcc89d467d974cb2274f9"}, + {file = "coverage-7.3.2-cp310-cp310-win32.whl", hash = "sha256:a889ae02f43aa45032afe364c8ae84ad3c54828c2faa44f3bfcafecb5c96b02f"}, + {file = "coverage-7.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:c0ba320de3fb8c6ec16e0be17ee1d3d69adcda99406c43c0409cb5c41788a611"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ac8c802fa29843a72d32ec56d0ca792ad15a302b28ca6203389afe21f8fa062c"}, + {file = "coverage-7.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89a937174104339e3a3ffcf9f446c00e3a806c28b1841c63edb2b369310fd074"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e267e9e2b574a176ddb983399dec325a80dbe161f1a32715c780b5d14b5f583a"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2443cbda35df0d35dcfb9bf8f3c02c57c1d6111169e3c85fc1fcc05e0c9f39a3"}, + {file = "coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5c913b556a116b8d5f6ef834038ba983834d887d82187c8f73dec21049abd65c"}, + {file = "coverage-7.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1981f785239e4e39e6444c63a98da3a1db8e971cb9ceb50a945ba6296b43f312"}, + {file = "coverage-7.3.2-cp311-cp311-win32.whl", hash = "sha256:43668cabd5ca8258f5954f27a3aaf78757e6acf13c17604d89648ecc0cc66640"}, + {file = "coverage-7.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10c39c0452bf6e694511c901426d6b5ac005acc0f78ff265dbe36bf81f808a2"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4cbae1051ab791debecc4a5dcc4a1ff45fc27b91b9aee165c8a27514dd160836"}, + {file = "coverage-7.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7bba973ebee5e56fe9251300c00f1579652587a9f4a5ed8404b15a0471f216"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4"}, + {file = "coverage-7.3.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6e9589bd04d0461a417562649522575d8752904d35c12907d8c9dfeba588faf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d51ac2a26f71da1b57f2dc81d0e108b6ab177e7d30e774db90675467c847bbdf"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:99b89d9f76070237975b315b3d5f4d6956ae354a4c92ac2388a5695516e47c84"}, + {file = "coverage-7.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a"}, + {file = "coverage-7.3.2-cp312-cp312-win32.whl", hash = "sha256:289fe43bf45a575e3ab10b26d7b6f2ddb9ee2dba447499f5401cfb5ecb8196bb"}, + {file = "coverage-7.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7dbc3ed60e8659bc59b6b304b43ff9c3ed858da2839c78b804973f613d3e92ed"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738"}, + {file = "coverage-7.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:af3d828d2c1cbae52d34bdbb22fcd94d1ce715d95f1a012354a75e5913f1bda2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630b13e3036e13c7adc480ca42fa7afc2a5d938081d28e20903cf7fd687872e2"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9eacf273e885b02a0273bb3a2170f30e2d53a6d53b72dbe02d6701b5296101c"}, + {file = "coverage-7.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f17966e861ff97305e0801134e69db33b143bbfb36436efb9cfff6ec7b2fd9"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b4275802d16882cf9c8b3d057a0839acb07ee9379fa2749eca54efbce1535b82"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:72c0cfa5250f483181e677ebc97133ea1ab3eb68645e494775deb6a7f6f83901"}, + {file = "coverage-7.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cb536f0dcd14149425996821a168f6e269d7dcd2c273a8bff8201e79f5104e76"}, + {file = "coverage-7.3.2-cp38-cp38-win32.whl", hash = "sha256:307adb8bd3abe389a471e649038a71b4eb13bfd6b7dd9a129fa856f5c695cf92"}, + {file = "coverage-7.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:88ed2c30a49ea81ea3b7f172e0269c182a44c236eb394718f976239892c0a27a"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b631c92dfe601adf8f5ebc7fc13ced6bb6e9609b19d9a8cd59fa47c4186ad1ce"}, + {file = "coverage-7.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d9df4051c4a7d13036524b66ecf7a7537d14c18a384043f30a303b146164e9"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7363d3b6a1119ef05015959ca24a9afc0ea8a02c687fe7e2d557705375c01f"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f11cc3c967a09d3695d2a6f03fb3e6236622b93be7a4b5dc09166a861be6d25"}, + {file = "coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3a4006916aa6fee7cd38db3bfc95aa9c54ebb4ffbfc47c677c8bba949ceba0a6"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9028a3871280110d6e1aa2df1afd5ef003bab5fb1ef421d6dc748ae1c8ef2ebc"}, + {file = "coverage-7.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9f805d62aec8eb92bab5b61c0f07329275b6f41c97d80e847b03eb894f38d083"}, + {file = "coverage-7.3.2-cp39-cp39-win32.whl", hash = "sha256:d1c88ec1a7ff4ebca0219f5b1ef863451d828cccf889c173e1253aa84b1e07ce"}, + {file = "coverage-7.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4767da59464bb593c07afceaddea61b154136300881844768037fd5e859353f"}, + {file = "coverage-7.3.2-pp38.pp39.pp310-none-any.whl", hash = "sha256:ae97af89f0fbf373400970c0a21eef5aa941ffeed90aee43650b81f7d7f47637"}, + {file = "coverage-7.3.2.tar.gz", hash = "sha256:be32ad29341b0170e795ca590e1c07e81fc061cb5b10c74ce7203491484404ef"}, ] [package.dependencies] @@ -589,24 +622,28 @@ toml = ["tomli"] [[package]] name = "cycler" -version = "0.11.0" +version = "0.12.1" description = "Composable style cycles" optional = true -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, - {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, ] +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "databricks-cli" -version = "0.17.7" +version = "0.18.0" description = "A command line interface for Databricks" optional = true -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "databricks-cli-0.17.7.tar.gz", hash = "sha256:5a545063449f3b9ad904644c0f251058485e29e564dedf8d4e4a7b45caf9549b"}, - {file = "databricks_cli-0.17.7-py2-none-any.whl", hash = "sha256:5b025943c70bbd374415264d38bfaddfb34ce070fadb083d851aec311e0f8901"}, + {file = "databricks-cli-0.18.0.tar.gz", hash = "sha256:87569709eda9af3e9db8047b691e420b5e980c62ef01675575c0d2b9b4211eb7"}, + {file = "databricks_cli-0.18.0-py2.py3-none-any.whl", hash = "sha256:1176a5f42d3e8af4abfc915446fb23abc44513e325c436725f5898cbb9e3384b"}, ] [package.dependencies] @@ -616,7 +653,7 @@ pyjwt = ">=1.7.0" requests = ">=2.17.3" six = ">=1.10.0" tabulate = ">=0.7.7" -urllib3 = ">=1.26.7,<2.0.0" +urllib3 = ">=1.26.7,<3" [[package]] name = "decorator" @@ -691,13 +728,13 @@ files = [ [[package]] name = "dynaconf" -version = "3.2.1" +version = "3.2.4" description = "The dynamic configurator for your Python Project" optional = false python-versions = ">=3.8" files = [ - {file = "dynaconf-3.2.1-py2.py3-none-any.whl", hash = "sha256:a4af12524f1fc527c6c0cdd4bb38cf83992d5155ad516baa98d9d01b7a731d09"}, - {file = "dynaconf-3.2.1.tar.gz", hash = "sha256:00dbd7541ca0f99bcb207cfc8aee0ac8f7d6b32bbb372e5b2865f0cb829b06c3"}, + {file = "dynaconf-3.2.4-py2.py3-none-any.whl", hash = "sha256:858f9806fab2409c4f5442614c2605d4c4071d5e5153b0e7f24a225f27465aed"}, + {file = "dynaconf-3.2.4.tar.gz", hash = "sha256:2e6adebaa587f4df9241a16a4bec3fda521154d26b15f3258fde753a592831b6"}, ] [package.extras] @@ -705,7 +742,7 @@ all = ["configobj", "hvac", "redis", "ruamel.yaml"] configobj = ["configobj"] ini = ["configobj"] redis = ["redis"] -test = ["configobj", "django", "flake8", "flake8-debugger", "flake8-print", "flake8-todo", "flask (>=0.12)", "hvac", "pep8-naming", "pytest", "pytest-cov", "pytest-mock", "pytest-xdist", "python-dotenv", "radon", "redis", "toml"] +test = ["configobj", "django", "flake8", "flake8-debugger", "flake8-print", "flake8-todo", "flask (>=0.12)", "hvac (>=1.1.0)", "pep8-naming", "pytest", "pytest-cov", "pytest-mock", "pytest-xdist", "python-dotenv", "radon", "redis", "toml"] toml = ["toml"] vault = ["hvac"] yaml = ["ruamel.yaml"] @@ -737,18 +774,19 @@ test = ["pytest (>=6)"] [[package]] name = "filelock" -version = "3.12.2" +version = "3.13.1" description = "A platform independent file lock." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, + {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, ] [package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] [[package]] name = "fire" @@ -766,13 +804,13 @@ termcolor = "*" [[package]] name = "flask" -version = "2.3.2" +version = "3.0.0" description = "A simple framework for building complex web applications." optional = true python-versions = ">=3.8" files = [ - {file = "Flask-2.3.2-py3-none-any.whl", hash = "sha256:77fd4e1249d8c9923de34907236b747ced06e5467ecac1a7bb7115ae0e9670b0"}, - {file = "Flask-2.3.2.tar.gz", hash = "sha256:8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef"}, + {file = "flask-3.0.0-py3-none-any.whl", hash = "sha256:21128f47e4e3b9d597a3e8521a329bf56909b690fcc3fa3e477725aa81367638"}, + {file = "flask-3.0.0.tar.gz", hash = "sha256:cfadcdb638b609361d29ec22360d6070a77d7463dcb3ab08d2c2f2f168845f58"}, ] [package.dependencies] @@ -781,7 +819,7 @@ click = ">=8.1.3" importlib-metadata = {version = ">=3.6.0", markers = "python_version < \"3.10\""} itsdangerous = ">=2.1.2" Jinja2 = ">=3.1.2" -Werkzeug = ">=2.3.3" +Werkzeug = ">=3.0.0" [package.extras] async = ["asgiref (>=3.2)"] @@ -789,49 +827,57 @@ dotenv = ["python-dotenv"] [[package]] name = "fonttools" -version = "4.42.0" +version = "4.44.0" description = "Tools to manipulate font files" optional = true python-versions = ">=3.8" files = [ - {file = "fonttools-4.42.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9c456d1f23deff64ffc8b5b098718e149279abdea4d8692dba69172fb6a0d597"}, - {file = "fonttools-4.42.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:150122ed93127a26bc3670ebab7e2add1e0983d30927733aec327ebf4255b072"}, - {file = "fonttools-4.42.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48e82d776d2e93f88ca56567509d102266e7ab2fb707a0326f032fe657335238"}, - {file = "fonttools-4.42.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58c1165f9b2662645de9b19a8c8bdd636b36294ccc07e1b0163856b74f10bafc"}, - {file = "fonttools-4.42.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:2d6dc3fa91414ff4daa195c05f946e6a575bd214821e26d17ca50f74b35b0fe4"}, - {file = "fonttools-4.42.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fae4e801b774cc62cecf4a57b1eae4097903fced00c608d9e2bc8f84cd87b54a"}, - {file = "fonttools-4.42.0-cp310-cp310-win32.whl", hash = "sha256:b8600ae7dce6ec3ddfb201abb98c9d53abbf8064d7ac0c8a0d8925e722ccf2a0"}, - {file = "fonttools-4.42.0-cp310-cp310-win_amd64.whl", hash = "sha256:57b68eab183fafac7cd7d464a7bfa0fcd4edf6c67837d14fb09c1c20516cf20b"}, - {file = "fonttools-4.42.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0a1466713e54bdbf5521f2f73eebfe727a528905ff5ec63cda40961b4b1eea95"}, - {file = "fonttools-4.42.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3fb2a69870bfe143ec20b039a1c8009e149dd7780dd89554cc8a11f79e5de86b"}, - {file = "fonttools-4.42.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae881e484702efdb6cf756462622de81d4414c454edfd950b137e9a7352b3cb9"}, - {file = "fonttools-4.42.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27ec3246a088555629f9f0902f7412220c67340553ca91eb540cf247aacb1983"}, - {file = "fonttools-4.42.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ece1886d12bb36c48c00b2031518877f41abae317e3a55620d38e307d799b7e"}, - {file = "fonttools-4.42.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:10dac980f2b975ef74532e2a94bb00e97a95b4595fb7f98db493c474d5f54d0e"}, - {file = "fonttools-4.42.0-cp311-cp311-win32.whl", hash = "sha256:83b98be5d291e08501bd4fc0c4e0f8e6e05b99f3924068b17c5c9972af6fff84"}, - {file = "fonttools-4.42.0-cp311-cp311-win_amd64.whl", hash = "sha256:e35bed436726194c5e6e094fdfb423fb7afaa0211199f9d245e59e11118c576c"}, - {file = "fonttools-4.42.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c36c904ce0322df01e590ba814d5d69e084e985d7e4c2869378671d79662a7d4"}, - {file = "fonttools-4.42.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d54e600a2bcfa5cdaa860237765c01804a03b08404d6affcd92942fa7315ffba"}, - {file = "fonttools-4.42.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01cfe02416b6d416c5c8d15e30315cbcd3e97d1b50d3b34b0ce59f742ef55258"}, - {file = "fonttools-4.42.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f81ed9065b4bd3f4f3ce8e4873cd6a6b3f4e92b1eddefde35d332c6f414acc3"}, - {file = "fonttools-4.42.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:685a4dd6cf31593b50d6d441feb7781a4a7ef61e19551463e14ed7c527b86f9f"}, - {file = "fonttools-4.42.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:329341ba3d86a36e482610db56b30705384cb23bd595eac8cbb045f627778e9d"}, - {file = "fonttools-4.42.0-cp38-cp38-win32.whl", hash = "sha256:4655c480a1a4d706152ff54f20e20cf7609084016f1df3851cce67cef768f40a"}, - {file = "fonttools-4.42.0-cp38-cp38-win_amd64.whl", hash = "sha256:6bd7e4777bff1dcb7c4eff4786998422770f3bfbef8be401c5332895517ba3fa"}, - {file = "fonttools-4.42.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9b55d2a3b360e0c7fc5bd8badf1503ca1c11dd3a1cd20f2c26787ffa145a9c7"}, - {file = "fonttools-4.42.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0df8ef75ba5791e873c9eac2262196497525e3f07699a2576d3ab9ddf41cb619"}, - {file = "fonttools-4.42.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd2363ea7728496827658682d049ffb2e98525e2247ca64554864a8cc945568"}, - {file = "fonttools-4.42.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40673b2e927f7cd0819c6f04489dfbeb337b4a7b10fc633c89bf4f34ecb9620"}, - {file = "fonttools-4.42.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c8bf88f9e3ce347c716921804ef3a8330cb128284eb6c0b6c4b3574f3c580023"}, - {file = "fonttools-4.42.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:703101eb0490fae32baf385385d47787b73d9ea55253df43b487c89ec767e0d7"}, - {file = "fonttools-4.42.0-cp39-cp39-win32.whl", hash = "sha256:f0290ea7f9945174bd4dfd66e96149037441eb2008f3649094f056201d99e293"}, - {file = "fonttools-4.42.0-cp39-cp39-win_amd64.whl", hash = "sha256:ae7df0ae9ee2f3f7676b0ff6f4ebe48ad0acaeeeaa0b6839d15dbf0709f2c5ef"}, - {file = "fonttools-4.42.0-py3-none-any.whl", hash = "sha256:dfe7fa7e607f7e8b58d0c32501a3a7cac148538300626d1b930082c90ae7f6bd"}, - {file = "fonttools-4.42.0.tar.gz", hash = "sha256:614b1283dca88effd20ee48160518e6de275ce9b5456a3134d5f235523fc5065"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] + {file = "fonttools-4.44.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1cd1c6bb097e774d68402499ff66185190baaa2629ae2f18515a2c50b93db0c"}, + {file = "fonttools-4.44.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b9eab7f9837fdaa2a10a524fbcc2ec24bf60637c044b6e4a59c3f835b90f0fae"}, + {file = "fonttools-4.44.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f412954275e594f7a51c16f3b3edd850acb0d842fefc33856b63a17e18499a5"}, + {file = "fonttools-4.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50d25893885e80a5955186791eed5579f1e75921751539cc1dc3ffd1160b48cf"}, + {file = "fonttools-4.44.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:22ea8aa7b3712450b42b044702bd3a64fd118006bad09a6f94bd1b227088492e"}, + {file = "fonttools-4.44.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df40daa6c03b98652ffe8110ae014fe695437f6e1cb5a07e16ea37f40e73ac86"}, + {file = "fonttools-4.44.0-cp310-cp310-win32.whl", hash = "sha256:bca49da868e8bde569ef36f0cc1b6de21d56bf9c3be185c503b629c19a185287"}, + {file = "fonttools-4.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:dbac86d83d96099890e731cc2af97976ff2c98f4ba432fccde657c5653a32f1c"}, + {file = "fonttools-4.44.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e8ff7d19a6804bfd561cfcec9b4200dd1788e28f7de4be70189801530c47c1b3"}, + {file = "fonttools-4.44.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8a1fa9a718de0bc026979c93e1e9b55c5efde60d76f91561fd713387573817d"}, + {file = "fonttools-4.44.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05064f95aacdfc06f21e55096c964b2228d942b8675fa26995a2551f6329d2d"}, + {file = "fonttools-4.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31b38528f25bc662401e6ffae14b3eb7f1e820892fd80369a37155e3b636a2f4"}, + {file = "fonttools-4.44.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:05d7c4d2c95b9490e669f3cb83918799bf1c838619ac6d3bad9ea017cfc63f2e"}, + {file = "fonttools-4.44.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6999e80a125b0cd8e068d0210b63323f17338038c2ecd2e11b9209ec430fe7f2"}, + {file = "fonttools-4.44.0-cp311-cp311-win32.whl", hash = "sha256:a7aec7f5d14dfcd71fb3ebc299b3f000c21fdc4043079101777ed2042ba5b7c5"}, + {file = "fonttools-4.44.0-cp311-cp311-win_amd64.whl", hash = "sha256:518a945dbfe337744bfff31423c1430303b8813c5275dffb0f2577f0734a1189"}, + {file = "fonttools-4.44.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:59b6ad83cce067d10f4790c037a5904424f45bebb5e7be2eb2db90402f288267"}, + {file = "fonttools-4.44.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c2de1fb18198acd400c45ffe2aef5420c8d55fde903e91cba705596099550f3b"}, + {file = "fonttools-4.44.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f308b7a8d28208d54315d11d35f9888d6d607673dd4d42d60b463682ee0400"}, + {file = "fonttools-4.44.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66bc6efd829382f7a7e6cf33c2fb32b13edc8a239eb15f32acbf197dce7a0165"}, + {file = "fonttools-4.44.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a8b99713d3a0d0e876b6aecfaada5e7dc9fe979fcd90ef9fa0ba1d9b9aed03f2"}, + {file = "fonttools-4.44.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b63da598d9cbc52e2381f922da0e94d60c0429f92207bd3fb04d112fc82ea7cb"}, + {file = "fonttools-4.44.0-cp312-cp312-win32.whl", hash = "sha256:f611c97678604e302b725f71626edea113a5745a7fb557c958b39edb6add87d5"}, + {file = "fonttools-4.44.0-cp312-cp312-win_amd64.whl", hash = "sha256:58af428746fa73a2edcbf26aff33ac4ef3c11c8d75bb200eaea2f7e888d2de4e"}, + {file = "fonttools-4.44.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9ee8692e23028564c13d924004495f284df8ac016a19f17a87251210e1f1f928"}, + {file = "fonttools-4.44.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dab3d00d27b1a79ae4d4a240e8ceea8af0ff049fd45f05adb4f860d93744110d"}, + {file = "fonttools-4.44.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f53526668beccdb3409c6055a4ffe50987a7f05af6436fa55d61f5e7bd450219"}, + {file = "fonttools-4.44.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3da036b016c975c2d8c69005bdc4d5d16266f948a7fab950244e0f58301996a"}, + {file = "fonttools-4.44.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b99fe8ef4093f672d00841569d2d05691e50334d79f4d9c15c1265d76d5580d2"}, + {file = "fonttools-4.44.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d16d9634ff1e5cea2cf4a8cbda9026f766e4b5f30b48f8180f0e99133d3abfc"}, + {file = "fonttools-4.44.0-cp38-cp38-win32.whl", hash = "sha256:3d29509f6e05e8d725db59c2d8c076223d793e4e35773040be6632a0349f2f97"}, + {file = "fonttools-4.44.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4fa4f4bc8fd86579b8cdbe5e948f35d82c0eda0091c399d009b2a5a6b61c040"}, + {file = "fonttools-4.44.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c794de4086f06ae609b71ac944ec7deb09f34ecf73316fddc041087dd24bba39"}, + {file = "fonttools-4.44.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2db63941fee3122e31a21dd0f5b2138ce9906b661a85b63622421d3654a74ae2"}, + {file = "fonttools-4.44.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb01c49c8aa035d5346f46630209923d4927ed15c2493db38d31da9f811eb70d"}, + {file = "fonttools-4.44.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46c79af80a835410874683b5779b6c1ec1d5a285e11c45b5193e79dd691eb111"}, + {file = "fonttools-4.44.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6e6aa2d066f8dafd06d8d0799b4944b5d5a1f015dd52ac01bdf2895ebe169a0"}, + {file = "fonttools-4.44.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:63a3112f753baef8c6ac2f5f574bb9ac8001b86c8c0c0380039db47a7f512d20"}, + {file = "fonttools-4.44.0-cp39-cp39-win32.whl", hash = "sha256:54efed22b2799a85475e6840e907c402ba49892c614565dc770aa97a53621b2b"}, + {file = "fonttools-4.44.0-cp39-cp39-win_amd64.whl", hash = "sha256:2e91e19b583961979e2e5a701269d3cfc07418963bee717f8160b0a24332826b"}, + {file = "fonttools-4.44.0-py3-none-any.whl", hash = "sha256:b9beb0fa6ff3ea808ad4a6962d68ac0f140ddab080957b20d9e268e4d67fb335"}, + {file = "fonttools-4.44.0.tar.gz", hash = "sha256:4e90dd81b6e0d97ebfe52c0d12a17a9ef7f305d6bfbb93081265057d6092f252"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "scipy"] lxml = ["lxml (>=4.0,<5)"] @@ -841,7 +887,7 @@ repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] type1 = ["xattr"] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.0.0)"] +unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] [[package]] @@ -916,13 +962,13 @@ files = [ [[package]] name = "fsspec" -version = "2023.6.0" +version = "2023.10.0" description = "File-system specification" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2023.6.0-py3-none-any.whl", hash = "sha256:1cbad1faef3e391fba6dc005ae9b5bdcbf43005c9167ce78c915549c352c869a"}, - {file = "fsspec-2023.6.0.tar.gz", hash = "sha256:d0b2f935446169753e7a5c5c55681c54ea91996cc67be93c39a154fb3a2742af"}, + {file = "fsspec-2023.10.0-py3-none-any.whl", hash = "sha256:346a8f024efeb749d2a5fca7ba8854474b1ff9af7c3faaf636a4548781136529"}, + {file = "fsspec-2023.10.0.tar.gz", hash = "sha256:330c66757591df346ad3091a53bd907e15348c2ba17d63fd54f5c39c4457d2a5"}, ] [package.extras] @@ -951,19 +997,19 @@ tqdm = ["tqdm"] [[package]] name = "gcsfs" -version = "2023.6.0" +version = "2023.10.0" description = "Convenient Filesystem interface over GCS" optional = false python-versions = ">=3.8" files = [ - {file = "gcsfs-2023.6.0-py2.py3-none-any.whl", hash = "sha256:3b3c7d8eddd4ec1380f3b49fbb861ee1e974adb223564401f10884b6260d406f"}, - {file = "gcsfs-2023.6.0.tar.gz", hash = "sha256:30b14fccadb3b7f0d99b2cd03bd8507c40f3a9a7d05847edca571f642bedbdff"}, + {file = "gcsfs-2023.10.0-py2.py3-none-any.whl", hash = "sha256:f3ad41652a596ca56e44778e041f428d022add3eff62b97a47302014affd270f"}, + {file = "gcsfs-2023.10.0.tar.gz", hash = "sha256:1915e6d766faad9a295e815b13c59966b925a274108b8a56f673623bf4aef83f"}, ] [package.dependencies] aiohttp = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1" decorator = ">4.1.2" -fsspec = "2023.6.0" +fsspec = "2023.10.0" google-auth = ">=1.2" google-auth-oauthlib = "*" google-cloud-storage = "*" @@ -975,13 +1021,13 @@ gcsfuse = ["fusepy"] [[package]] name = "gitdb" -version = "4.0.10" +version = "4.0.11" description = "Git Object Database" optional = false python-versions = ">=3.7" files = [ - {file = "gitdb-4.0.10-py3-none-any.whl", hash = "sha256:c286cf298426064079ed96a9e4a9d39e7f3e9bf15ba60701e95f5492f28415c7"}, - {file = "gitdb-4.0.10.tar.gz", hash = "sha256:6eb990b69df4e15bad899ea868dc46572c3f75339735663b81de79b06f17eb9a"}, + {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"}, + {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"}, ] [package.dependencies] @@ -989,27 +1035,30 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.32" +version = "3.1.40" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.32-py3-none-any.whl", hash = "sha256:e3d59b1c2c6ebb9dfa7a184daf3b6dd4914237e7488a1730a6d8f6f5d0b4187f"}, - {file = "GitPython-3.1.32.tar.gz", hash = "sha256:8d9b8cb1e80b9735e8717c9362079d3ce4c6e5ddeebedd0361b228c3a67a62f6"}, + {file = "GitPython-3.1.40-py3-none-any.whl", hash = "sha256:cf14627d5a8049ffbf49915732e5eddbe8134c3bdb9d476e6182b676fc573f8a"}, + {file = "GitPython-3.1.40.tar.gz", hash = "sha256:22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4"}, ] [package.dependencies] gitdb = ">=4.0.1,<5" +[package.extras] +test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-sugar"] + [[package]] name = "google-api-core" -version = "2.11.1" +version = "2.13.0" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-core-2.11.1.tar.gz", hash = "sha256:25d29e05a0058ed5f19c61c0a78b1b53adea4d9364b464d014fbda941f6d1c9a"}, - {file = "google_api_core-2.11.1-py3-none-any.whl", hash = "sha256:d92a5a92dc36dd4f4b9ee4e55528a90e432b059f93aee6ad857f9de8cc7ae94a"}, + {file = "google-api-core-2.13.0.tar.gz", hash = "sha256:abc1da067c9026c6cd15dfbd4f6ad07735a62eeadc541d1cc296314447fc3aad"}, + {file = "google_api_core-2.13.0-py3-none-any.whl", hash = "sha256:44ed591f6c3a0c1ac7a91867d2b3841f92839f860f3d3fe26c464dbd50f97094"}, ] [package.dependencies] @@ -1046,21 +1095,19 @@ uritemplate = ">=3.0.0,<4dev" [[package]] name = "google-auth" -version = "2.22.0" +version = "2.23.4" description = "Google Authentication Library" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "google-auth-2.22.0.tar.gz", hash = "sha256:164cba9af4e6e4e40c3a4f90a1a6c12ee56f14c0b4868d1ca91b32826ab334ce"}, - {file = "google_auth-2.22.0-py2.py3-none-any.whl", hash = "sha256:d61d1b40897407b574da67da1a833bdc10d5a11642566e506565d1b1a46ba873"}, + {file = "google-auth-2.23.4.tar.gz", hash = "sha256:79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3"}, + {file = "google_auth-2.23.4-py2.py3-none-any.whl", hash = "sha256:d4bbc92fe4b8bfd2f3e8d88e5ba7085935da208ee38a134fc280e7ce682a05f2"}, ] [package.dependencies] cachetools = ">=2.0.0,<6.0" pyasn1-modules = ">=0.2.1" rsa = ">=3.1.4,<5" -six = ">=1.9.0" -urllib3 = "<2.0" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] @@ -1071,29 +1118,28 @@ requests = ["requests (>=2.20.0,<3.0.0.dev0)"] [[package]] name = "google-auth-httplib2" -version = "0.1.0" +version = "0.1.1" description = "Google Authentication Library: httplib2 transport" optional = false python-versions = "*" files = [ - {file = "google-auth-httplib2-0.1.0.tar.gz", hash = "sha256:a07c39fd632becacd3f07718dfd6021bf396978f03ad3ce4321d060015cc30ac"}, - {file = "google_auth_httplib2-0.1.0-py2.py3-none-any.whl", hash = "sha256:31e49c36c6b5643b57e82617cb3e021e3e1d2df9da63af67252c02fa9c1f4a10"}, + {file = "google-auth-httplib2-0.1.1.tar.gz", hash = "sha256:c64bc555fdc6dd788ea62ecf7bccffcf497bf77244887a3f3d7a5a02f8e3fc29"}, + {file = "google_auth_httplib2-0.1.1-py2.py3-none-any.whl", hash = "sha256:42c50900b8e4dcdf8222364d1f0efe32b8421fb6ed72f2613f12f75cc933478c"}, ] [package.dependencies] google-auth = "*" -httplib2 = ">=0.15.0" -six = "*" +httplib2 = ">=0.19.0" [[package]] name = "google-auth-oauthlib" -version = "1.0.0" +version = "1.1.0" description = "Google Authentication Library" optional = false python-versions = ">=3.6" files = [ - {file = "google-auth-oauthlib-1.0.0.tar.gz", hash = "sha256:e375064964820b47221a7e1b7ee1fd77051b6323c3f9e3e19785f78ab67ecfc5"}, - {file = "google_auth_oauthlib-1.0.0-py2.py3-none-any.whl", hash = "sha256:95880ca704928c300f48194d1770cf5b1462835b6e49db61445a520f793fd5fb"}, + {file = "google-auth-oauthlib-1.1.0.tar.gz", hash = "sha256:83ea8c3b0881e453790baff4448e8a6112ac8778d1de9da0b68010b843937afb"}, + {file = "google_auth_oauthlib-1.1.0-py2.py3-none-any.whl", hash = "sha256:089c6e587d36f4803ac7e0720c045c6a8b1fd1790088b8424975b90d0ee61c12"}, ] [package.dependencies] @@ -1123,13 +1169,13 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)"] [[package]] name = "google-cloud-iam" -version = "2.12.1" +version = "2.12.2" description = "Google Cloud Iam API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google-cloud-iam-2.12.1.tar.gz", hash = "sha256:fe507085447ecf461dafd2cd4b8016c5899e58e520bd04b51bb3ab6f6b08faff"}, - {file = "google_cloud_iam-2.12.1-py2.py3-none-any.whl", hash = "sha256:9c7a3ed85b2877c0cccbd83f0dc41db818e77ac41d5527897bdd02a4ea5f6668"}, + {file = "google-cloud-iam-2.12.2.tar.gz", hash = "sha256:6031d0c1911fc79ce0b8bb8f6fe1645283b9c1a9188b483dae623b53b4d8181c"}, + {file = "google_cloud_iam-2.12.2-py2.py3-none-any.whl", hash = "sha256:e55f5602219371630284f94b8939806d93b168fb57d2ca56b3ba50a3bd454f01"}, ] [package.dependencies] @@ -1139,13 +1185,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 [[package]] name = "google-cloud-scheduler" -version = "2.11.1" +version = "2.11.2" description = "Google Cloud Scheduler API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google-cloud-scheduler-2.11.1.tar.gz", hash = "sha256:9ccf3612be59ed66beba979cfc543eb10a2be3416596757971d178976a63f975"}, - {file = "google_cloud_scheduler-2.11.1-py2.py3-none-any.whl", hash = "sha256:b0d34e5d22f892b904fe110d662d8bbf8552da6d683b8fc38a877a89b786fa75"}, + {file = "google-cloud-scheduler-2.11.2.tar.gz", hash = "sha256:8ccc66f4d52453f4c927894646ef6c8f1913cfa5479d15aa96e90f558a4256b7"}, + {file = "google_cloud_scheduler-2.11.2-py2.py3-none-any.whl", hash = "sha256:911d0018132365cb160ca2ee248e56e3b83951f57586223463ad85c07386e53b"}, ] [package.dependencies] @@ -1155,20 +1201,21 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 [[package]] name = "google-cloud-storage" -version = "2.10.0" +version = "2.13.0" description = "Google Cloud Storage API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google-cloud-storage-2.10.0.tar.gz", hash = "sha256:934b31ead5f3994e5360f9ff5750982c5b6b11604dc072bc452c25965e076dc7"}, - {file = "google_cloud_storage-2.10.0-py2.py3-none-any.whl", hash = "sha256:9433cf28801671de1c80434238fb1e7e4a1ba3087470e90f70c928ea77c2b9d7"}, + {file = "google-cloud-storage-2.13.0.tar.gz", hash = "sha256:f62dc4c7b6cd4360d072e3deb28035fbdad491ac3d9b0b1815a12daea10f37c7"}, + {file = "google_cloud_storage-2.13.0-py2.py3-none-any.whl", hash = "sha256:ab0bf2e1780a1b74cf17fccb13788070b729f50c252f0c94ada2aae0ca95437d"}, ] [package.dependencies] google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev" -google-auth = ">=1.25.0,<3.0dev" +google-auth = ">=2.23.3,<3.0dev" google-cloud-core = ">=2.3.0,<3.0dev" -google-resumable-media = ">=2.3.2" +google-crc32c = ">=1.0,<2.0dev" +google-resumable-media = ">=2.6.0" requests = ">=2.18.0,<3.0.0dev" [package.extras] @@ -1256,31 +1303,31 @@ testing = ["pytest"] [[package]] name = "google-resumable-media" -version = "2.5.0" +version = "2.6.0" description = "Utilities for Google Media Downloads and Resumable Uploads" optional = false python-versions = ">= 3.7" files = [ - {file = "google-resumable-media-2.5.0.tar.gz", hash = "sha256:218931e8e2b2a73a58eb354a288e03a0fd5fb1c4583261ac6e4c078666468c93"}, - {file = "google_resumable_media-2.5.0-py2.py3-none-any.whl", hash = "sha256:da1bd943e2e114a56d85d6848497ebf9be6a14d3db23e9fc57581e7c3e8170ec"}, + {file = "google-resumable-media-2.6.0.tar.gz", hash = "sha256:972852f6c65f933e15a4a210c2b96930763b47197cdf4aa5f5bea435efb626e7"}, + {file = "google_resumable_media-2.6.0-py2.py3-none-any.whl", hash = "sha256:fc03d344381970f79eebb632a3c18bb1828593a2dc5572b5f90115ef7d11e81b"}, ] [package.dependencies] google-crc32c = ">=1.0,<2.0dev" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "google-auth (>=1.22.0,<2.0dev)"] requests = ["requests (>=2.18.0,<3.0.0dev)"] [[package]] name = "googleapis-common-protos" -version = "1.60.0" +version = "1.61.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" files = [ - {file = "googleapis-common-protos-1.60.0.tar.gz", hash = "sha256:e73ebb404098db405ba95d1e1ae0aa91c3e15a71da031a2eeb6b2e23e7bc3708"}, - {file = "googleapis_common_protos-1.60.0-py2.py3-none-any.whl", hash = "sha256:69f9bbcc6acde92cab2db95ce30a70bd2b81d20b12eff3f1aabaffcbe8a93918"}, + {file = "googleapis-common-protos-1.61.0.tar.gz", hash = "sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b"}, + {file = "googleapis_common_protos-1.61.0-py2.py3-none-any.whl", hash = "sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0"}, ] [package.dependencies] @@ -1291,133 +1338,139 @@ grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "greenlet" -version = "2.0.2" +version = "3.0.1" description = "Lightweight in-process concurrent programming" optional = true -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" -files = [ - {file = "greenlet-2.0.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:bdfea8c661e80d3c1c99ad7c3ff74e6e87184895bbaca6ee8cc61209f8b9b85d"}, - {file = "greenlet-2.0.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9d14b83fab60d5e8abe587d51c75b252bcc21683f24699ada8fb275d7712f5a9"}, - {file = "greenlet-2.0.2-cp27-cp27m-win32.whl", hash = "sha256:6c3acb79b0bfd4fe733dff8bc62695283b57949ebcca05ae5c129eb606ff2d74"}, - {file = "greenlet-2.0.2-cp27-cp27m-win_amd64.whl", hash = "sha256:283737e0da3f08bd637b5ad058507e578dd462db259f7f6e4c5c365ba4ee9343"}, - {file = "greenlet-2.0.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d27ec7509b9c18b6d73f2f5ede2622441de812e7b1a80bbd446cb0633bd3d5ae"}, - {file = "greenlet-2.0.2-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:30bcf80dda7f15ac77ba5af2b961bdd9dbc77fd4ac6105cee85b0d0a5fcf74df"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26fbfce90728d82bc9e6c38ea4d038cba20b7faf8a0ca53a9c07b67318d46088"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9190f09060ea4debddd24665d6804b995a9c122ef5917ab26e1566dcc712ceeb"}, - {file = "greenlet-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d75209eed723105f9596807495d58d10b3470fa6732dd6756595e89925ce2470"}, - {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a51c9751078733d88e013587b108f1b7a1fb106d402fb390740f002b6f6551a"}, - {file = "greenlet-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:76ae285c8104046b3a7f06b42f29c7b73f77683df18c49ab5af7983994c2dd91"}, - {file = "greenlet-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:2d4686f195e32d36b4d7cf2d166857dbd0ee9f3d20ae349b6bf8afc8485b3645"}, - {file = "greenlet-2.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c4302695ad8027363e96311df24ee28978162cdcdd2006476c43970b384a244c"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c48f54ef8e05f04d6eff74b8233f6063cb1ed960243eacc474ee73a2ea8573ca"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1846f1b999e78e13837c93c778dcfc3365902cfb8d1bdb7dd73ead37059f0d0"}, - {file = "greenlet-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a06ad5312349fec0ab944664b01d26f8d1f05009566339ac6f63f56589bc1a2"}, - {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:eff4eb9b7eb3e4d0cae3d28c283dc16d9bed6b193c2e1ace3ed86ce48ea8df19"}, - {file = "greenlet-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5454276c07d27a740c5892f4907c86327b632127dd9abec42ee62e12427ff7e3"}, - {file = "greenlet-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:7cafd1208fdbe93b67c7086876f061f660cfddc44f404279c1585bbf3cdc64c5"}, - {file = "greenlet-2.0.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:910841381caba4f744a44bf81bfd573c94e10b3045ee00de0cbf436fe50673a6"}, - {file = "greenlet-2.0.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:18a7f18b82b52ee85322d7a7874e676f34ab319b9f8cce5de06067384aa8ff43"}, - {file = "greenlet-2.0.2-cp35-cp35m-win32.whl", hash = "sha256:03a8f4f3430c3b3ff8d10a2a86028c660355ab637cee9333d63d66b56f09d52a"}, - {file = "greenlet-2.0.2-cp35-cp35m-win_amd64.whl", hash = "sha256:4b58adb399c4d61d912c4c331984d60eb66565175cdf4a34792cd9600f21b394"}, - {file = "greenlet-2.0.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:703f18f3fda276b9a916f0934d2fb6d989bf0b4fb5a64825260eb9bfd52d78f0"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:32e5b64b148966d9cccc2c8d35a671409e45f195864560829f395a54226408d3"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dd11f291565a81d71dab10b7033395b7a3a5456e637cf997a6f33ebdf06f8db"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f72c9ddb8cd28532185f54cc1453f2c16fb417a08b53a855c4e6a418edd099"}, - {file = "greenlet-2.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd021c754b162c0fb55ad5d6b9d960db667faad0fa2ff25bb6e1301b0b6e6a75"}, - {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3c9b12575734155d0c09d6c3e10dbd81665d5c18e1a7c6597df72fd05990c8cf"}, - {file = "greenlet-2.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b9ec052b06a0524f0e35bd8790686a1da006bd911dd1ef7d50b77bfbad74e292"}, - {file = "greenlet-2.0.2-cp36-cp36m-win32.whl", hash = "sha256:dbfcfc0218093a19c252ca8eb9aee3d29cfdcb586df21049b9d777fd32c14fd9"}, - {file = "greenlet-2.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:9f35ec95538f50292f6d8f2c9c9f8a3c6540bbfec21c9e5b4b751e0a7c20864f"}, - {file = "greenlet-2.0.2-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:d5508f0b173e6aa47273bdc0a0b5ba055b59662ba7c7ee5119528f466585526b"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f82d4d717d8ef19188687aa32b8363e96062911e63ba22a0cff7802a8e58e5f1"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9c59a2120b55788e800d82dfa99b9e156ff8f2227f07c5e3012a45a399620b7"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2780572ec463d44c1d3ae850239508dbeb9fed38e294c68d19a24d925d9223ca"}, - {file = "greenlet-2.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937e9020b514ceedb9c830c55d5c9872abc90f4b5862f89c0887033ae33c6f73"}, - {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:36abbf031e1c0f79dd5d596bfaf8e921c41df2bdf54ee1eed921ce1f52999a86"}, - {file = "greenlet-2.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:18e98fb3de7dba1c0a852731c3070cf022d14f0d68b4c87a19cc1016f3bb8b33"}, - {file = "greenlet-2.0.2-cp37-cp37m-win32.whl", hash = "sha256:3f6ea9bd35eb450837a3d80e77b517ea5bc56b4647f5502cd28de13675ee12f7"}, - {file = "greenlet-2.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:7492e2b7bd7c9b9916388d9df23fa49d9b88ac0640db0a5b4ecc2b653bf451e3"}, - {file = "greenlet-2.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b864ba53912b6c3ab6bcb2beb19f19edd01a6bfcbdfe1f37ddd1778abfe75a30"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ba2956617f1c42598a308a84c6cf021a90ff3862eddafd20c3333d50f0edb45b"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc3a569657468b6f3fb60587e48356fe512c1754ca05a564f11366ac9e306526"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8eab883b3b2a38cc1e050819ef06a7e6344d4a990d24d45bc6f2cf959045a45b"}, - {file = "greenlet-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acd2162a36d3de67ee896c43effcd5ee3de247eb00354db411feb025aa319857"}, - {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0bf60faf0bc2468089bdc5edd10555bab6e85152191df713e2ab1fcc86382b5a"}, - {file = "greenlet-2.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b0ef99cdbe2b682b9ccbb964743a6aca37905fda5e0452e5ee239b1654d37f2a"}, - {file = "greenlet-2.0.2-cp38-cp38-win32.whl", hash = "sha256:b80f600eddddce72320dbbc8e3784d16bd3fb7b517e82476d8da921f27d4b249"}, - {file = "greenlet-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:4d2e11331fc0c02b6e84b0d28ece3a36e0548ee1a1ce9ddde03752d9b79bba40"}, - {file = "greenlet-2.0.2-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:88d9ab96491d38a5ab7c56dd7a3cc37d83336ecc564e4e8816dbed12e5aaefc8"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:561091a7be172ab497a3527602d467e2b3fbe75f9e783d8b8ce403fa414f71a6"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:971ce5e14dc5e73715755d0ca2975ac88cfdaefcaab078a284fea6cfabf866df"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be4ed120b52ae4d974aa40215fcdfde9194d63541c7ded40ee12eb4dda57b76b"}, - {file = "greenlet-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c817e84245513926588caf1152e3b559ff794d505555211ca041f032abbb6b"}, - {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1a819eef4b0e0b96bb0d98d797bef17dc1b4a10e8d7446be32d1da33e095dbb8"}, - {file = "greenlet-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7efde645ca1cc441d6dc4b48c0f7101e8d86b54c8530141b09fd31cef5149ec9"}, - {file = "greenlet-2.0.2-cp39-cp39-win32.whl", hash = "sha256:ea9872c80c132f4663822dd2a08d404073a5a9b5ba6155bea72fb2a79d1093b5"}, - {file = "greenlet-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:db1a39669102a1d8d12b57de2bb7e2ec9066a6f2b3da35ae511ff93b01b5d564"}, - {file = "greenlet-2.0.2.tar.gz", hash = "sha256:e7c8dc13af7db097bed64a051d2dd49e9f0af495c26995c00a9ee842690d34c0"}, -] - -[package.extras] -docs = ["Sphinx", "docutils (<0.18)"] +python-versions = ">=3.7" +files = [ + {file = "greenlet-3.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f89e21afe925fcfa655965ca8ea10f24773a1791400989ff32f467badfe4a064"}, + {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28e89e232c7593d33cac35425b58950789962011cc274aa43ef8865f2e11f46d"}, + {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8ba29306c5de7717b5761b9ea74f9c72b9e2b834e24aa984da99cbfc70157fd"}, + {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19bbdf1cce0346ef7341705d71e2ecf6f41a35c311137f29b8a2dc2341374565"}, + {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:599daf06ea59bfedbec564b1692b0166a0045f32b6f0933b0dd4df59a854caf2"}, + {file = "greenlet-3.0.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b641161c302efbb860ae6b081f406839a8b7d5573f20a455539823802c655f63"}, + {file = "greenlet-3.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d57e20ba591727da0c230ab2c3f200ac9d6d333860d85348816e1dca4cc4792e"}, + {file = "greenlet-3.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5805e71e5b570d490938d55552f5a9e10f477c19400c38bf1d5190d760691846"}, + {file = "greenlet-3.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:52e93b28db27ae7d208748f45d2db8a7b6a380e0d703f099c949d0f0d80b70e9"}, + {file = "greenlet-3.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f7bfb769f7efa0eefcd039dd19d843a4fbfbac52f1878b1da2ed5793ec9b1a65"}, + {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91e6c7db42638dc45cf2e13c73be16bf83179f7859b07cfc139518941320be96"}, + {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1757936efea16e3f03db20efd0cd50a1c86b06734f9f7338a90c4ba85ec2ad5a"}, + {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19075157a10055759066854a973b3d1325d964d498a805bb68a1f9af4aaef8ec"}, + {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9d21aaa84557d64209af04ff48e0ad5e28c5cca67ce43444e939579d085da72"}, + {file = "greenlet-3.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2847e5d7beedb8d614186962c3d774d40d3374d580d2cbdab7f184580a39d234"}, + {file = "greenlet-3.0.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:97e7ac860d64e2dcba5c5944cfc8fa9ea185cd84061c623536154d5a89237884"}, + {file = "greenlet-3.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b2c02d2ad98116e914d4f3155ffc905fd0c025d901ead3f6ed07385e19122c94"}, + {file = "greenlet-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:22f79120a24aeeae2b4471c711dcf4f8c736a2bb2fabad2a67ac9a55ea72523c"}, + {file = "greenlet-3.0.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:100f78a29707ca1525ea47388cec8a049405147719f47ebf3895e7509c6446aa"}, + {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60d5772e8195f4e9ebf74046a9121bbb90090f6550f81d8956a05387ba139353"}, + {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:daa7197b43c707462f06d2c693ffdbb5991cbb8b80b5b984007de431493a319c"}, + {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea6b8aa9e08eea388c5f7a276fabb1d4b6b9d6e4ceb12cc477c3d352001768a9"}, + {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d11ebbd679e927593978aa44c10fc2092bc454b7d13fdc958d3e9d508aba7d0"}, + {file = "greenlet-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dbd4c177afb8a8d9ba348d925b0b67246147af806f0b104af4d24f144d461cd5"}, + {file = "greenlet-3.0.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20107edf7c2c3644c67c12205dc60b1bb11d26b2610b276f97d666110d1b511d"}, + {file = "greenlet-3.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8bef097455dea90ffe855286926ae02d8faa335ed8e4067326257cb571fc1445"}, + {file = "greenlet-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:b2d3337dcfaa99698aa2377c81c9ca72fcd89c07e7eb62ece3f23a3fe89b2ce4"}, + {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80ac992f25d10aaebe1ee15df45ca0d7571d0f70b645c08ec68733fb7a020206"}, + {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:337322096d92808f76ad26061a8f5fccb22b0809bea39212cd6c406f6a7060d2"}, + {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9934adbd0f6e476f0ecff3c94626529f344f57b38c9a541f87098710b18af0a"}, + {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4d815b794fd8868c4d67602692c21bf5293a75e4b607bb92a11e821e2b859a"}, + {file = "greenlet-3.0.1-cp37-cp37m-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41bdeeb552d814bcd7fb52172b304898a35818107cc8778b5101423c9017b3de"}, + {file = "greenlet-3.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6e6061bf1e9565c29002e3c601cf68569c450be7fc3f7336671af7ddb4657166"}, + {file = "greenlet-3.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fa24255ae3c0ab67e613556375a4341af04a084bd58764731972bcbc8baeba36"}, + {file = "greenlet-3.0.1-cp37-cp37m-win32.whl", hash = "sha256:b489c36d1327868d207002391f662a1d163bdc8daf10ab2e5f6e41b9b96de3b1"}, + {file = "greenlet-3.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:f33f3258aae89da191c6ebaa3bc517c6c4cbc9b9f689e5d8452f7aedbb913fa8"}, + {file = "greenlet-3.0.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:d2905ce1df400360463c772b55d8e2518d0e488a87cdea13dd2c71dcb2a1fa16"}, + {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a02d259510b3630f330c86557331a3b0e0c79dac3d166e449a39363beaae174"}, + {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55d62807f1c5a1682075c62436702aaba941daa316e9161e4b6ccebbbf38bda3"}, + {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3fcc780ae8edbb1d050d920ab44790201f027d59fdbd21362340a85c79066a74"}, + {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4eddd98afc726f8aee1948858aed9e6feeb1758889dfd869072d4465973f6bfd"}, + {file = "greenlet-3.0.1-cp38-cp38-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eabe7090db68c981fca689299c2d116400b553f4b713266b130cfc9e2aa9c5a9"}, + {file = "greenlet-3.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f2f6d303f3dee132b322a14cd8765287b8f86cdc10d2cb6a6fae234ea488888e"}, + {file = "greenlet-3.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d923ff276f1c1f9680d32832f8d6c040fe9306cbfb5d161b0911e9634be9ef0a"}, + {file = "greenlet-3.0.1-cp38-cp38-win32.whl", hash = "sha256:0b6f9f8ca7093fd4433472fd99b5650f8a26dcd8ba410e14094c1e44cd3ceddd"}, + {file = "greenlet-3.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:990066bff27c4fcf3b69382b86f4c99b3652bab2a7e685d968cd4d0cfc6f67c6"}, + {file = "greenlet-3.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ce85c43ae54845272f6f9cd8320d034d7a946e9773c693b27d620edec825e376"}, + {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89ee2e967bd7ff85d84a2de09df10e021c9b38c7d91dead95b406ed6350c6997"}, + {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87c8ceb0cf8a5a51b8008b643844b7f4a8264a2c13fcbcd8a8316161725383fe"}, + {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6a8c9d4f8692917a3dc7eb25a6fb337bff86909febe2f793ec1928cd97bedfc"}, + {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fbc5b8f3dfe24784cee8ce0be3da2d8a79e46a276593db6868382d9c50d97b1"}, + {file = "greenlet-3.0.1-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85d2b77e7c9382f004b41d9c72c85537fac834fb141b0296942d52bf03fe4a3d"}, + {file = "greenlet-3.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:696d8e7d82398e810f2b3622b24e87906763b6ebfd90e361e88eb85b0e554dc8"}, + {file = "greenlet-3.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:329c5a2e5a0ee942f2992c5e3ff40be03e75f745f48847f118a3cfece7a28546"}, + {file = "greenlet-3.0.1-cp39-cp39-win32.whl", hash = "sha256:cf868e08690cb89360eebc73ba4be7fb461cfbc6168dd88e2fbbe6f31812cd57"}, + {file = "greenlet-3.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:ac4a39d1abae48184d420aa8e5e63efd1b75c8444dd95daa3e03f6c6310e9619"}, + {file = "greenlet-3.0.1.tar.gz", hash = "sha256:816bd9488a94cba78d93e1abb58000e8266fa9cc2aa9ccdd6eb0696acb24005b"}, +] + +[package.extras] +docs = ["Sphinx"] test = ["objgraph", "psutil"] [[package]] name = "grpcio" -version = "1.57.0" +version = "1.59.2" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.7" files = [ - {file = "grpcio-1.57.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:092fa155b945015754bdf988be47793c377b52b88d546e45c6a9f9579ac7f7b6"}, - {file = "grpcio-1.57.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2f7349786da979a94690cc5c2b804cab4e8774a3cf59be40d037c4342c906649"}, - {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:82640e57fb86ea1d71ea9ab54f7e942502cf98a429a200b2e743d8672171734f"}, - {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40b72effd4c789de94ce1be2b5f88d7b9b5f7379fe9645f198854112a6567d9a"}, - {file = "grpcio-1.57.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f708a6a17868ad8bf586598bee69abded4996b18adf26fd2d91191383b79019"}, - {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:60fe15288a0a65d5c1cb5b4a62b1850d07336e3ba728257a810317be14f0c527"}, - {file = "grpcio-1.57.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6907b1cf8bb29b058081d2aad677b15757a44ef2d4d8d9130271d2ad5e33efca"}, - {file = "grpcio-1.57.0-cp310-cp310-win32.whl", hash = "sha256:57b183e8b252825c4dd29114d6c13559be95387aafc10a7be645462a0fc98bbb"}, - {file = "grpcio-1.57.0-cp310-cp310-win_amd64.whl", hash = "sha256:7b400807fa749a9eb286e2cd893e501b110b4d356a218426cb9c825a0474ca56"}, - {file = "grpcio-1.57.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:c6ebecfb7a31385393203eb04ed8b6a08f5002f53df3d59e5e795edb80999652"}, - {file = "grpcio-1.57.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:00258cbe3f5188629828363ae8ff78477ce976a6f63fb2bb5e90088396faa82e"}, - {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:23e7d8849a0e58b806253fd206ac105b328171e01b8f18c7d5922274958cc87e"}, - {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5371bcd861e679d63b8274f73ac281751d34bd54eccdbfcd6aa00e692a82cd7b"}, - {file = "grpcio-1.57.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aed90d93b731929e742967e236f842a4a2174dc5db077c8f9ad2c5996f89f63e"}, - {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe752639919aad9ffb0dee0d87f29a6467d1ef764f13c4644d212a9a853a078d"}, - {file = "grpcio-1.57.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fada6b07ec4f0befe05218181f4b85176f11d531911b64c715d1875c4736d73a"}, - {file = "grpcio-1.57.0-cp311-cp311-win32.whl", hash = "sha256:bb396952cfa7ad2f01061fbc7dc1ad91dd9d69243bcb8110cf4e36924785a0fe"}, - {file = "grpcio-1.57.0-cp311-cp311-win_amd64.whl", hash = "sha256:e503cb45ed12b924b5b988ba9576dc9949b2f5283b8e33b21dcb6be74a7c58d0"}, - {file = "grpcio-1.57.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:fd173b4cf02b20f60860dc2ffe30115c18972d7d6d2d69df97ac38dee03be5bf"}, - {file = "grpcio-1.57.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:d7f8df114d6b4cf5a916b98389aeaf1e3132035420a88beea4e3d977e5f267a5"}, - {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:76c44efa4ede1f42a9d5b2fed1fe9377e73a109bef8675fb0728eb80b0b8e8f2"}, - {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4faea2cfdf762a664ab90589b66f416274887641ae17817de510b8178356bf73"}, - {file = "grpcio-1.57.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c60b83c43faeb6d0a9831f0351d7787a0753f5087cc6fa218d78fdf38e5acef0"}, - {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b363bbb5253e5f9c23d8a0a034dfdf1b7c9e7f12e602fc788c435171e96daccc"}, - {file = "grpcio-1.57.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:f1fb0fd4a1e9b11ac21c30c169d169ef434c6e9344ee0ab27cfa6f605f6387b2"}, - {file = "grpcio-1.57.0-cp37-cp37m-win_amd64.whl", hash = "sha256:34950353539e7d93f61c6796a007c705d663f3be41166358e3d88c45760c7d98"}, - {file = "grpcio-1.57.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:871f9999e0211f9551f368612460442a5436d9444606184652117d6a688c9f51"}, - {file = "grpcio-1.57.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:a8a8e560e8dbbdf29288872e91efd22af71e88b0e5736b0daf7773c1fecd99f0"}, - {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2313b124e475aa9017a9844bdc5eafb2d5abdda9d456af16fc4535408c7d6da6"}, - {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4098b6b638d9e0ca839a81656a2fd4bc26c9486ea707e8b1437d6f9d61c3941"}, - {file = "grpcio-1.57.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e5b58e32ae14658085c16986d11e99abd002ddbf51c8daae8a0671fffb3467f"}, - {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0f80bf37f09e1caba6a8063e56e2b87fa335add314cf2b78ebf7cb45aa7e3d06"}, - {file = "grpcio-1.57.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5b7a4ce8f862fe32b2a10b57752cf3169f5fe2915acfe7e6a1e155db3da99e79"}, - {file = "grpcio-1.57.0-cp38-cp38-win32.whl", hash = "sha256:9338bacf172e942e62e5889b6364e56657fbf8ac68062e8b25c48843e7b202bb"}, - {file = "grpcio-1.57.0-cp38-cp38-win_amd64.whl", hash = "sha256:e1cb52fa2d67d7f7fab310b600f22ce1ff04d562d46e9e0ac3e3403c2bb4cc16"}, - {file = "grpcio-1.57.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fee387d2fab144e8a34e0e9c5ca0f45c9376b99de45628265cfa9886b1dbe62b"}, - {file = "grpcio-1.57.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:b53333627283e7241fcc217323f225c37783b5f0472316edcaa4479a213abfa6"}, - {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:f19ac6ac0a256cf77d3cc926ef0b4e64a9725cc612f97228cd5dc4bd9dbab03b"}, - {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3fdf04e402f12e1de8074458549337febb3b45f21076cc02ef4ff786aff687e"}, - {file = "grpcio-1.57.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5613a2fecc82f95d6c51d15b9a72705553aa0d7c932fad7aed7afb51dc982ee5"}, - {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b670c2faa92124b7397b42303e4d8eb64a4cd0b7a77e35a9e865a55d61c57ef9"}, - {file = "grpcio-1.57.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a635589201b18510ff988161b7b573f50c6a48fae9cb567657920ca82022b37"}, - {file = "grpcio-1.57.0-cp39-cp39-win32.whl", hash = "sha256:d78d8b86fcdfa1e4c21f8896614b6cc7ee01a2a758ec0c4382d662f2a62cf766"}, - {file = "grpcio-1.57.0-cp39-cp39-win_amd64.whl", hash = "sha256:20ec6fc4ad47d1b6e12deec5045ec3cd5402d9a1597f738263e98f490fe07056"}, - {file = "grpcio-1.57.0.tar.gz", hash = "sha256:4b089f7ad1eb00a104078bab8015b0ed0ebcb3b589e527ab009c53893fd4e613"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.57.0)"] + {file = "grpcio-1.59.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:d2fa68a96a30dd240be80bbad838a0ac81a61770611ff7952b889485970c4c71"}, + {file = "grpcio-1.59.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cf0dead5a2c5a3347af2cfec7131d4f2a2e03c934af28989c9078f8241a491fa"}, + {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:e420ced29b5904cdf9ee5545e23f9406189d8acb6750916c2db4793dada065c6"}, + {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b230028a008ae1d0f430acb227d323ff8a619017415cf334c38b457f814119f"}, + {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4a3833c0e067f3558538727235cd8a49709bff1003200bbdefa2f09334e4b1"}, + {file = "grpcio-1.59.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6b25ed37c27e652db01be341af93fbcea03d296c024d8a0e680017a268eb85dd"}, + {file = "grpcio-1.59.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73abb8584b0cf74d37f5ef61c10722adc7275502ab71789a8fe3cb7ef04cf6e2"}, + {file = "grpcio-1.59.2-cp310-cp310-win32.whl", hash = "sha256:d6f70406695e3220f09cd7a2f879333279d91aa4a8a1d34303b56d61a8180137"}, + {file = "grpcio-1.59.2-cp310-cp310-win_amd64.whl", hash = "sha256:3c61d641d4f409c5ae46bfdd89ea42ce5ea233dcf69e74ce9ba32b503c727e29"}, + {file = "grpcio-1.59.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:3059668df17627f0e0fa680e9ef8c995c946c792612e9518f5cc1503be14e90b"}, + {file = "grpcio-1.59.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:72ca2399097c0b758198f2ff30f7178d680de8a5cfcf3d9b73a63cf87455532e"}, + {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c978f864b35f2261e0819f5cd88b9830b04dc51bcf055aac3c601e525a10d2ba"}, + {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9411e24328a2302e279e70cae6e479f1fddde79629fcb14e03e6d94b3956eabf"}, + {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb7e0fe6ad73b7f06d7e2b689c19a71cf5cc48f0c2bf8608469e51ffe0bd2867"}, + {file = "grpcio-1.59.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c2504eed520958a5b77cc99458297cb7906308cb92327f35fb7fbbad4e9b2188"}, + {file = "grpcio-1.59.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2171c39f355ba5b551c5d5928d65aa6c69807fae195b86ef4a7d125bcdb860a9"}, + {file = "grpcio-1.59.2-cp311-cp311-win32.whl", hash = "sha256:d2794f0e68b3085d99b4f6ff9c089f6fdd02b32b9d3efdfbb55beac1bf22d516"}, + {file = "grpcio-1.59.2-cp311-cp311-win_amd64.whl", hash = "sha256:2067274c88bc6de89c278a672a652b4247d088811ece781a4858b09bdf8448e3"}, + {file = "grpcio-1.59.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:535561990e075fa6bd4b16c4c3c1096b9581b7bb35d96fac4650f1181e428268"}, + {file = "grpcio-1.59.2-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:a213acfbf186b9f35803b52e4ca9addb153fc0b67f82a48f961be7000ecf6721"}, + {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:6959fb07e8351e20501ffb8cc4074c39a0b7ef123e1c850a7f8f3afdc3a3da01"}, + {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e82c5cf1495244adf5252f925ac5932e5fd288b3e5ab6b70bec5593074b7236c"}, + {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023088764012411affe7db183d1ada3ad9daf2e23ddc719ff46d7061de661340"}, + {file = "grpcio-1.59.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:da2d94c15f88cd40d7e67f7919d4f60110d2b9d5b1e08cf354c2be773ab13479"}, + {file = "grpcio-1.59.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6009386a2df66159f64ac9f20425ae25229b29b9dd0e1d3dd60043f037e2ad7e"}, + {file = "grpcio-1.59.2-cp312-cp312-win32.whl", hash = "sha256:75c6ecb70e809cf1504465174343113f51f24bc61e22a80ae1c859f3f7034c6d"}, + {file = "grpcio-1.59.2-cp312-cp312-win_amd64.whl", hash = "sha256:cbe946b3e6e60a7b4618f091e62a029cb082b109a9d6b53962dd305087c6e4fd"}, + {file = "grpcio-1.59.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:f8753a6c88d1d0ba64302309eecf20f70d2770f65ca02d83c2452279085bfcd3"}, + {file = "grpcio-1.59.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:f1ef0d39bc1feb420caf549b3c657c871cad4ebbcf0580c4d03816b0590de0cf"}, + {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:4c93f4abbb54321ee6471e04a00139c80c754eda51064187963ddf98f5cf36a4"}, + {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08d77e682f2bf730a4961eea330e56d2f423c6a9b91ca222e5b1eb24a357b19f"}, + {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff16d68bf453275466a9a46739061a63584d92f18a0f5b33d19fc97eb69867c"}, + {file = "grpcio-1.59.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4abb717e320e74959517dc8e84a9f48fbe90e9abe19c248541e9418b1ce60acd"}, + {file = "grpcio-1.59.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36f53c2b3449c015880e7d55a89c992c357f176327b0d2873cdaaf9628a37c69"}, + {file = "grpcio-1.59.2-cp37-cp37m-win_amd64.whl", hash = "sha256:cc3e4cd087f07758b16bef8f31d88dbb1b5da5671d2f03685ab52dece3d7a16e"}, + {file = "grpcio-1.59.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:27f879ae604a7fcf371e59fba6f3ff4635a4c2a64768bd83ff0cac503142fef4"}, + {file = "grpcio-1.59.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:7cf05053242f61ba94014dd3a986e11a083400a32664058f80bf4cf817c0b3a1"}, + {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e1727c1c0e394096bb9af185c6923e8ea55a5095b8af44f06903bcc0e06800a2"}, + {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d573e70a6fe77555fb6143c12d3a7d3fa306632a3034b4e7c59ca09721546f8"}, + {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31176aa88f36020055ace9adff2405a33c8bdbfa72a9c4980e25d91b2f196873"}, + {file = "grpcio-1.59.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:11168ef43e4a43ff1b1a65859f3e0ef1a173e277349e7fb16923ff108160a8cd"}, + {file = "grpcio-1.59.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:53c9aa5ddd6857c0a1cd0287225a2a25873a8e09727c2e95c4aebb1be83a766a"}, + {file = "grpcio-1.59.2-cp38-cp38-win32.whl", hash = "sha256:3b4368b33908f683a363f376dfb747d40af3463a6e5044afee07cf9436addf96"}, + {file = "grpcio-1.59.2-cp38-cp38-win_amd64.whl", hash = "sha256:0a754aff9e3af63bdc4c75c234b86b9d14e14a28a30c4e324aed1a9b873d755f"}, + {file = "grpcio-1.59.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:1f9524d1d701e399462d2c90ba7c193e49d1711cf429c0d3d97c966856e03d00"}, + {file = "grpcio-1.59.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:f93dbf58f03146164048be5426ffde298b237a5e059144847e4940f5b80172c3"}, + {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:6da6dea3a1bacf99b3c2187e296db9a83029ed9c38fd4c52b7c9b7326d13c828"}, + {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f09cffa619adfb44799fa4a81c2a1ad77c887187613fb0a8f201ab38d89ba1"}, + {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c35aa9657f5d5116d23b934568e0956bd50c615127810fffe3ac356a914c176a"}, + {file = "grpcio-1.59.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:74100fecaec8a535e380cf5f2fb556ff84957d481c13e54051c52e5baac70541"}, + {file = "grpcio-1.59.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:128e20f57c5f27cb0157e73756d1586b83c1b513ebecc83ea0ac37e4b0e4e758"}, + {file = "grpcio-1.59.2-cp39-cp39-win32.whl", hash = "sha256:686e975a5d16602dc0982c7c703948d17184bd1397e16c8ee03511ecb8c4cdda"}, + {file = "grpcio-1.59.2-cp39-cp39-win_amd64.whl", hash = "sha256:242adc47725b9a499ee77c6a2e36688fa6c96484611f33b1be4c57ab075a92dd"}, + {file = "grpcio-1.59.2.tar.gz", hash = "sha256:d8f9cd4ad1be90b0cf350a2f04a38a36e44a026cac1e036ac593dc48efe91d52"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.59.2)"] [[package]] name = "grpcio-status" @@ -1437,17 +1490,17 @@ protobuf = ">=3.12.0" [[package]] name = "gunicorn" -version = "20.1.0" +version = "21.2.0" description = "WSGI HTTP Server for UNIX" optional = true python-versions = ">=3.5" files = [ - {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, - {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, + {file = "gunicorn-21.2.0-py3-none-any.whl", hash = "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0"}, + {file = "gunicorn-21.2.0.tar.gz", hash = "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033"}, ] [package.dependencies] -setuptools = ">=3.0" +packaging = "*" [package.extras] eventlet = ["eventlet (>=0.24.1)"] @@ -1471,13 +1524,13 @@ pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0 [[package]] name = "identify" -version = "2.5.26" +version = "2.5.31" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.26-py2.py3-none-any.whl", hash = "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54"}, - {file = "identify-2.5.26.tar.gz", hash = "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f"}, + {file = "identify-2.5.31-py2.py3-none-any.whl", hash = "sha256:90199cb9e7bd3c5407a9b7e81b4abec4bb9d249991c79439ec8af740afc6293d"}, + {file = "identify-2.5.31.tar.gz", hash = "sha256:7736b3c7a28233637e3c36550646fc6389bedd74ae84cb788200cc8e2dd60b75"}, ] [package.extras] @@ -1515,21 +1568,21 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.0.1" +version = "6.1.1" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"}, - {file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"}, + {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, + {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] [[package]] name = "iniconfig" @@ -1594,13 +1647,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.19.0" +version = "4.19.2" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.0-py3-none-any.whl", hash = "sha256:043dc26a3845ff09d20e4420d6012a9c91c9aa8999fa184e7efcfeccb41e32cb"}, - {file = "jsonschema-4.19.0.tar.gz", hash = "sha256:6e1e7569ac13be8139b2dd2c21a55d350066ee3f80df06c608b398cdc6f30e8f"}, + {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, + {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, ] [package.dependencies] @@ -1632,53 +1685,53 @@ referencing = ">=0.28.0" [[package]] name = "kedro" -version = "0.18.12" +version = "0.18.14" description = "Kedro helps you build production-ready data and analytics pipelines" optional = false python-versions = ">=3.7" files = [ - {file = "kedro-0.18.12-py3-none-any.whl", hash = "sha256:f532c186f38711a08df89a86732468b1f931739c3c78454cea0c6b753be2e7c3"}, - {file = "kedro-0.18.12.tar.gz", hash = "sha256:5bd995dc710507427097488200f9f40ac8fb5085bec415ae6dd2335a53ffbf49"}, + {file = "kedro-0.18.14-py3-none-any.whl", hash = "sha256:8bd3a322f8c543af40928d4e3e4b395b89eaa6c1b65676617dced289c84156fe"}, + {file = "kedro-0.18.14.tar.gz", hash = "sha256:da219eaf10ed96909195dda53cb33c66a3e017012501d08f0da90ce1879a3364"}, ] [package.dependencies] -anyconfig = ">=0.10.0,<0.11.0" +anyconfig = ">=0.10.0" attrs = ">=21.3" -build = "*" -cachetools = ">=5.3,<6.0" -click = "<9.0" +build = ">=0.7.0" +cachetools = ">=4.1" +click = ">=4.0" cookiecutter = ">=2.1.1,<3.0" dynaconf = ">=3.1.2,<4.0" -fsspec = ">=2021.4,<2024.1" -gitpython = ">=3.0,<4.0" -importlib-metadata = {version = ">=3.6", markers = "python_version >= \"3.8\""} -importlib-resources = ">=1.3" -jmespath = ">=0.9.5,<2.0" -more-itertools = ">=9,<11" -omegaconf = ">=2.3,<3.0" -parse = ">=1.19.0,<1.20.0" -pip-tools = ">=6.5,<8" -pluggy = ">=1.0,<2.0" +fsspec = ">=2021.4" +gitpython = ">=3.0" +importlib-metadata = {version = ">=3.6,<7.0", markers = "python_version >= \"3.8\""} +importlib-resources = ">=1.3,<7.0" +jmespath = ">=0.9.5" +more-itertools = ">=8.14.0" +omegaconf = ">=2.1.1" +parse = ">=1.19.0" +pip-tools = ">=6.5" +pluggy = ">=1.0,<1.3" PyYAML = ">=4.2,<7.0" rich = ">=12.0,<14.0" rope = ">=0.21,<2.0" setuptools = ">=65.5.1" -toml = ">=0.10,<1.0" -toposort = ">=1.5,<2.0" +toml = ">=0.10.0" +toposort = ">=1.5" [package.extras] -all = ["Jinja2 (<3.1.0)", "Pillow (>=9.0,<10.0)", "PyYAML (>=4.2,<7.0)", "SQLAlchemy (>=1.2,<2.0)", "biopython (>=1.73,<2.0)", "compress-pickle[lz4] (>=2.1.0,<2.2.0)", "dask[complete] (>=2021.10,<2022.0)", "delta-spark (>=1.0,<3.0)", "docutils (==0.16)", "geopandas (>=0.6.0,<1.0)", "hdfs (>=2.5.8,<3.0)", "holoviews (>=1.13.0,<1.14.0)", "ipykernel (>=5.3,<7.0)", "kedro-datasets[all,pandas-deltatabledataset] (>=1.5.1,<1.6.0)", "lxml (>=4.6,<5.0)", "matplotlib (>=3.0.3,<4.0)", "myst-parser (>=1.0.0,<1.1.0)", "networkx (>=2.4,<3.0)", "opencv-python (>=4.5.5.64,<4.6.0.0)", "openpyxl (>=3.0.6,<4.0)", "pandas (>=1.3,<2.0)", "pandas-gbq (>=0.12.0,<0.18.0)", "plotly (>=4.8.0,<6.0)", "pyarrow (>=1.0,<7.0)", "pyproj (>=3.0,<4.0)", "pyspark (>=2.2,<4.0)", "redis (>=4.1,<5.0)", "requests (>=2.20,<3.0)", "s3fs (>=0.3.0,<0.5)", "scikit-learn (>=1.0.2,<1.1.0)", "scipy (>=1.7.3,<1.8.0)", "sphinx (>=5.3.0,<5.4.0)", "sphinx-autodoc-typehints (==1.20.2)", "sphinx-copybutton (==0.3.1)", "sphinx-notfound-page", "sphinx-rtd-theme (==1.2.0)", "sphinxcontrib-mermaid (>=0.7.1,<0.8.0)", "tables (>=3.6,<4.0)", "tables (>=3.6.0,<3.7.0)", "tensorflow (>=2.0,<3.0)", "tensorflow-macos (>=2.0,<3.0)", "triad (>=0.6.7,<1.0)"] +all = ["Jinja2 (<3.1.0)", "Pillow (>=9.0,<10.0)", "PyYAML (>=4.2,<7.0)", "SQLAlchemy (>=1.2,<2.0)", "biopython (>=1.73,<2.0)", "compress-pickle[lz4] (>=2.1.0,<2.2.0)", "dask[complete] (>=2021.10,<2022.0)", "delta-spark (>=1.0,<3.0)", "docutils (==0.16)", "geopandas (>=0.6.0,<1.0)", "hdfs (>=2.5.8,<3.0)", "holoviews (>=1.13.0)", "ipykernel (>=5.3,<7.0)", "kedro-datasets[all] (>=1.7.0,<1.8.0)", "lxml (>=4.6,<5.0)", "matplotlib (>=3.0.3,<4.0)", "myst-parser (>=1.0.0,<1.1.0)", "networkx (>=2.4,<3.0)", "opencv-python (>=4.5.5.64,<4.6.0.0)", "openpyxl (>=3.0.6,<4.0)", "pandas (>=1.3,<2.0)", "pandas-gbq (>=0.12.0,<0.18.0)", "plotly (>=4.8.0,<6.0)", "pyarrow (>=1.0,<7.0)", "pyproj (>=3.0,<4.0)", "pyspark (>=2.2,<3.4)", "redis (>=4.1,<5.0)", "requests (>=2.20,<3.0)", "s3fs (>=0.3.0,<0.5)", "scikit-learn (>=1.0.2,<1.1.0)", "scipy (>=1.7.3,<1.8.0)", "sphinx (>=5.3.0,<5.4.0)", "sphinx-autodoc-typehints (==1.20.2)", "sphinx-copybutton (==0.3.1)", "sphinx-notfound-page", "sphinx-rtd-theme (==1.2.0)", "sphinxcontrib-mermaid (>=0.7.1,<0.8.0)", "tables (>=3.6,<4.0)", "tables (>=3.6.0,<3.7.0)", "tensorflow (>=2.0,<3.0)", "tensorflow-macos (>=2.0,<3.0)", "triad (>=0.6.7,<1.0)"] api = ["requests (>=2.20,<3.0)"] api-apidataset = ["requests (>=2.20,<3.0)"] biosequence = ["biopython (>=1.73,<2.0)"] biosequence-biosequencedataset = ["biopython (>=1.73,<2.0)"] dask = ["dask[complete] (>=2021.10,<2022.0)", "triad (>=0.6.7,<1.0)"] dask-parquetdataset = ["dask[complete] (>=2021.10,<2022.0)", "triad (>=0.6.7,<1.0)"] -docs = ["Jinja2 (<3.1.0)", "docutils (==0.16)", "ipykernel (>=5.3,<7.0)", "kedro-datasets[all,pandas-deltatabledataset] (>=1.5.1,<1.6.0)", "myst-parser (>=1.0.0,<1.1.0)", "sphinx (>=5.3.0,<5.4.0)", "sphinx-autodoc-typehints (==1.20.2)", "sphinx-copybutton (==0.3.1)", "sphinx-notfound-page", "sphinx-rtd-theme (==1.2.0)", "sphinxcontrib-mermaid (>=0.7.1,<0.8.0)"] +docs = ["Jinja2 (<3.1.0)", "docutils (==0.16)", "ipykernel (>=5.3,<7.0)", "kedro-datasets[all] (>=1.7.0,<1.8.0)", "myst-parser (>=1.0.0,<1.1.0)", "sphinx (>=5.3.0,<5.4.0)", "sphinx-autodoc-typehints (==1.20.2)", "sphinx-copybutton (==0.3.1)", "sphinx-notfound-page", "sphinx-rtd-theme (==1.2.0)", "sphinxcontrib-mermaid (>=0.7.1,<0.8.0)"] geopandas = ["geopandas (>=0.6.0,<1.0)", "pyproj (>=3.0,<4.0)"] geopandas-geojsondataset = ["geopandas (>=0.6.0,<1.0)", "pyproj (>=3.0,<4.0)"] -holoviews = ["holoviews (>=1.13.0,<1.14.0)"] -holoviews-holoviewswriter = ["holoviews (>=1.13.0,<1.14.0)"] +holoviews = ["holoviews (>=1.13.0)"] +holoviews-holoviewswriter = ["holoviews (>=1.13.0)"] matplotlib = ["matplotlib (>=3.0.3,<4.0)"] matplotlib-matplotlibwriter = ["matplotlib (>=3.0.3,<4.0)"] networkx = ["networkx (>=2.4,<3.0)"] @@ -1704,16 +1757,16 @@ plotly = ["pandas (>=1.3,<2.0)", "plotly (>=4.8.0,<6.0)"] plotly-jsondataset = ["plotly (>=4.8.0,<6.0)"] plotly-plotlydataset = ["pandas (>=1.3,<2.0)", "plotly (>=4.8.0,<6.0)"] redis = ["redis (>=4.1,<5.0)"] -spark = ["delta-spark (>=1.0,<3.0)", "hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<4.0)", "s3fs (>=0.3.0,<0.5)"] -spark-deltatabledataset = ["delta-spark (>=1.0,<3.0)", "hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<4.0)", "s3fs (>=0.3.0,<0.5)"] -spark-sparkdataset = ["hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<4.0)", "s3fs (>=0.3.0,<0.5)"] -spark-sparkhivedataset = ["hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<4.0)", "s3fs (>=0.3.0,<0.5)"] -spark-sparkjdbcdataset = ["hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<4.0)", "s3fs (>=0.3.0,<0.5)"] +spark = ["delta-spark (>=1.0,<3.0)", "hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<3.4)", "s3fs (>=0.3.0,<0.5)"] +spark-deltatabledataset = ["delta-spark (>=1.0,<3.0)", "hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<3.4)", "s3fs (>=0.3.0,<0.5)"] +spark-sparkdataset = ["hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<3.4)", "s3fs (>=0.3.0,<0.5)"] +spark-sparkhivedataset = ["hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<3.4)", "s3fs (>=0.3.0,<0.5)"] +spark-sparkjdbcdataset = ["hdfs (>=2.5.8,<3.0)", "pyspark (>=2.2,<3.4)", "s3fs (>=0.3.0,<0.5)"] svmlight = ["scikit-learn (>=1.0.2,<1.1.0)", "scipy (>=1.7.3,<1.8.0)"] svmlight-svmlightdataset = ["scikit-learn (>=1.0.2,<1.1.0)", "scipy (>=1.7.3,<1.8.0)"] tensorflow = ["tensorflow (>=2.0,<3.0)", "tensorflow-macos (>=2.0,<3.0)"] tensorflow-tensorflowmodeldataset = ["tensorflow (>=2.0,<3.0)", "tensorflow-macos (>=2.0,<3.0)"] -test = ["Jinja2 (<3.1.0)", "Pillow (>=9.0,<10.0)", "SQLAlchemy (>=1.2,<2.0)", "adlfs (>=2021.7.1,<=2022.2)", "adlfs (>=2023.1,<2024.0)", "bandit (>=1.6.2,<2.0)", "behave (==1.2.6)", "biopython (>=1.73,<2.0)", "black (>=22.0,<23.0)", "blacken-docs (==1.9.2)", "compress-pickle[lz4] (>=2.1.0,<2.2.0)", "coverage[toml]", "dask[complete] (>=2021.10,<2022.0)", "delta-spark (>=1.2.1,<1.3.0)", "dill (>=0.3.1,<0.4.0)", "filelock (>=3.4.0,<4.0)", "gcsfs (>=2021.4,<=2023.1)", "gcsfs (>=2023.1,<2023.3)", "geopandas (>=0.6.0,<1.0)", "hdfs (>=2.5.8,<3.0)", "holoviews (>=1.13.0,<1.14.0)", "import-linter[toml] (==1.8.0)", "ipython (>=7.31.1,<8.0)", "ipython (>=8.10,<9.0)", "isort (>=5.0,<6.0)", "joblib (>=0.14)", "jupyter (>=1.0,<2.0)", "jupyterlab (>=3.0,<3.6.0)", "jupyterlab-server (>=2.11.1,<2.16.0)", "lxml (>=4.6,<5.0)", "matplotlib (>=3.0.3,<3.4)", "matplotlib (>=3.5,<3.6)", "memory-profiler (>=0.50.0,<1.0)", "moto (==1.3.7)", "moto (==3.0.4)", "networkx (>=2.4,<3.0)", "opencv-python (>=4.5.5.64,<4.6.0.0)", "openpyxl (>=3.0.3,<4.0)", "pandas (>=1.3,<2.0)", "pandas-gbq (>=0.12.0,<0.18.0)", "plotly (>=4.8.0,<6.0)", "pre-commit (>=2.9.2,<3.0)", "psutil (>=5.8,<6.0)", "pyarrow (>=6.0)", "pylint (>=2.17.0,<3.0)", "pyproj (>=3.0,<4.0)", "pyspark (>=2.2,<4.0)", "pytest (>=7.2,<8.0)", "pytest-cov (>=3.0,<4.0)", "pytest-mock (>=1.7.1,<2.0)", "pytest-xdist[psutil] (>=2.2.1,<2.3.0)", "redis (>=4.1,<5.0)", "requests (>=2.20,<3.0)", "requests-mock (>=1.6,<2.0)", "s3fs (>=0.3.0,<0.5)", "scikit-learn (>=1.0.2,<1.1.0)", "scipy (>=1.7.3,<1.8.0)", "tables (>=3.6,<4.0)", "tables (>=3.6.0,<3.7.0)", "tensorflow (>=2.0,<3.0)", "tensorflow-macos (>=2.0,<3.0)", "triad (>=0.6.7,<1.0)", "trufflehog (>=2.1,<3.0)", "xlsxwriter (>=1.0,<2.0)"] +test = ["Jinja2 (<3.1.0)", "Pillow (>=9.0,<10.0)", "SQLAlchemy (>=1.2,<2.0)", "adlfs (>=2021.7.1,<=2022.2)", "adlfs (>=2023.1,<2024.0)", "bandit (>=1.6.2,<2.0)", "behave (==1.2.6)", "biopython (>=1.73,<2.0)", "black (>=22.0,<23.0)", "blacken-docs (==1.9.2)", "compress-pickle[lz4] (>=2.1.0,<2.2.0)", "coverage[toml]", "dask[complete] (>=2021.10,<2022.0)", "delta-spark (>=1.2.1)", "delta-spark (>=1.2.1,<1.3.0)", "dill (>=0.3.1,<0.4.0)", "filelock (>=3.4.0,<4.0)", "gcsfs (>=2021.4,<=2023.1)", "gcsfs (>=2023.1,<2023.3)", "geopandas (>=0.6.0,<1.0)", "hdfs (>=2.5.8,<3.0)", "holoviews (>=1.13.0)", "import-linter[toml] (==1.8.0)", "ipython (>=7.31.1,<8.0)", "ipython (>=8.10,<9.0)", "isort (>=5.0,<6.0)", "joblib (>=0.14)", "jupyter (>=1.0,<2.0)", "jupyterlab (>=3.0,<3.6.0)", "jupyterlab-server (>=2.11.1,<2.16.0)", "lxml (>=4.6,<5.0)", "matplotlib (>=3.0.3,<3.4)", "matplotlib (>=3.5,<3.6)", "memory-profiler (>=0.50.0,<1.0)", "moto (==1.3.7)", "moto (==4.1.12)", "networkx (>=2.4,<3.0)", "opencv-python (>=4.5.5.64,<4.6.0.0)", "openpyxl (>=3.0.3,<4.0)", "pandas (>=1.3,<2.0)", "pandas-gbq (>=0.12.0,<0.18.0)", "pandas-gbq (>=0.18.0)", "plotly (>=4.8.0,<6.0)", "pre-commit (>=2.9.2,<3.0)", "pyarrow (>=1.0)", "pyarrow (>=7.0)", "pylint (>=2.17.0,<3.0)", "pyproj (>=3.0,<4.0)", "pyspark (>=2.2,<3.4)", "pyspark (>=3.4)", "pytest (>=7.2,<8.0)", "pytest-cov (>=3.0,<4.0)", "pytest-mock (>=1.7.1,<2.0)", "pytest-xdist[psutil] (>=2.2.1,<2.3.0)", "redis (>=4.1,<5.0)", "requests (>=2.20,<3.0)", "requests-mock (>=1.6,<2.0)", "s3fs (>=0.3.0,<0.5)", "scikit-learn (>=1.0.2,<2)", "scipy (>=1.7.3)", "semver", "tables (>=3.6,<3.9.0)", "tables (>=3.6.0,<3.7.0)", "tables (>=3.8.0,<3.9.0)", "tensorflow (>=2.0,<3.0)", "tensorflow-macos (>=2.0,<3.0)", "triad (>=0.6.7,<1.0)", "trufflehog (>=2.1,<3.0)", "xlsxwriter (>=1.0,<2.0)"] video = ["opencv-python (>=4.5.5.64,<4.6.0.0)"] video-videodataset = ["opencv-python (>=4.5.5.64,<4.6.0.0)"] yaml = ["PyYAML (>=4.2,<7.0)", "pandas (>=1.3,<2.0)"] @@ -1721,12 +1774,12 @@ yaml-yamldataset = ["PyYAML (>=4.2,<7.0)", "pandas (>=1.3,<2.0)"] [[package]] name = "kedro-mlflow" -version = "0.11.9" +version = "0.11.10" description = "A kedro-plugin to use mlflow in your kedro projects" optional = true python-versions = ">=3.8, <3.11" files = [ - {file = "kedro_mlflow-0.11.9.tar.gz", hash = "sha256:8148a52412a75c4fc0f6e5e6753fa7c5df13e2ed3a73fb37e236376cbe73f375"}, + {file = "kedro_mlflow-0.11.10.tar.gz", hash = "sha256:72fda648d60185850fca5c88e2d0cb4e28978d8dc803ff1e7e92e35945073487"}, ] [package.dependencies] @@ -1809,79 +1862,115 @@ urllib3 = ">=1.15" [[package]] name = "kiwisolver" -version = "1.4.4" +version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" optional = true python-versions = ">=3.7" files = [ - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, - {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, - {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, - {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, - {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, - {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, - {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, - {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, - {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, - {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, - {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, - {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, - {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, - {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, - {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, - {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, - {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, - {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, ] [[package]] @@ -1912,13 +2001,13 @@ adal = ["adal (>=1.0.2)"] [[package]] name = "mako" -version = "1.2.4" +version = "1.3.0" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Mako-1.2.4-py3-none-any.whl", hash = "sha256:c97c79c018b9165ac9922ae4f32da095ffd3c4e6872b45eded42926deea46818"}, - {file = "Mako-1.2.4.tar.gz", hash = "sha256:d60a3903dc3bb01a18ad6a89cdbe2e4eadc69c0bc8ef1e3773ba53d44c3f7a34"}, + {file = "Mako-1.3.0-py3-none-any.whl", hash = "sha256:57d4e997349f1a92035aa25c17ace371a4213f2ca42f99bee9a602500cfd54d9"}, + {file = "Mako-1.3.0.tar.gz", hash = "sha256:e3a9d388fd00e87043edbe8792f45880ac0114e9c4adc69f6e9bfb2c55e3b11b"}, ] [package.dependencies] @@ -1931,20 +2020,20 @@ testing = ["pytest"] [[package]] name = "markdown" -version = "3.4.4" +version = "3.5.1" description = "Python implementation of John Gruber's Markdown." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Markdown-3.4.4-py3-none-any.whl", hash = "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941"}, - {file = "Markdown-3.4.4.tar.gz", hash = "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6"}, + {file = "Markdown-3.5.1-py3-none-any.whl", hash = "sha256:5874b47d4ee3f0b14d764324d2c94c03ea66bee56f2d929da9f2508d65e722dc"}, + {file = "Markdown-3.5.1.tar.gz", hash = "sha256:b65d7beb248dc22f2e8a31fb706d93798093c308dc1aba295aedeb9d41a813bd"}, ] [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.0)", "mkdocs-nature (>=0.4)"] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] [[package]] @@ -2032,52 +2121,58 @@ files = [ [[package]] name = "matplotlib" -version = "3.7.2" +version = "3.7.3" description = "Python plotting package" optional = true python-versions = ">=3.8" files = [ - {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:2699f7e73a76d4c110f4f25be9d2496d6ab4f17345307738557d345f099e07de"}, - {file = "matplotlib-3.7.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a8035ba590658bae7562786c9cc6ea1a84aa49d3afab157e414c9e2ea74f496d"}, - {file = "matplotlib-3.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f8e4a49493add46ad4a8c92f63e19d548b2b6ebbed75c6b4c7f46f57d36cdd1"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71667eb2ccca4c3537d9414b1bc00554cb7f91527c17ee4ec38027201f8f1603"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:152ee0b569a37630d8628534c628456b28686e085d51394da6b71ef84c4da201"}, - {file = "matplotlib-3.7.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:070f8dddd1f5939e60aacb8fa08f19551f4b0140fab16a3669d5cd6e9cb28fc8"}, - {file = "matplotlib-3.7.2-cp310-cp310-win32.whl", hash = "sha256:fdbb46fad4fb47443b5b8ac76904b2e7a66556844f33370861b4788db0f8816a"}, - {file = "matplotlib-3.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:23fb1750934e5f0128f9423db27c474aa32534cec21f7b2153262b066a581fd1"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:30e1409b857aa8a747c5d4f85f63a79e479835f8dffc52992ac1f3f25837b544"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:50e0a55ec74bf2d7a0ebf50ac580a209582c2dd0f7ab51bc270f1b4a0027454e"}, - {file = "matplotlib-3.7.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac60daa1dc83e8821eed155796b0f7888b6b916cf61d620a4ddd8200ac70cd64"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:305e3da477dc8607336ba10bac96986d6308d614706cae2efe7d3ffa60465b24"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c308b255efb9b06b23874236ec0f10f026673ad6515f602027cc8ac7805352d"}, - {file = "matplotlib-3.7.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60c521e21031632aa0d87ca5ba0c1c05f3daacadb34c093585a0be6780f698e4"}, - {file = "matplotlib-3.7.2-cp311-cp311-win32.whl", hash = "sha256:26bede320d77e469fdf1bde212de0ec889169b04f7f1179b8930d66f82b30cbc"}, - {file = "matplotlib-3.7.2-cp311-cp311-win_amd64.whl", hash = "sha256:af4860132c8c05261a5f5f8467f1b269bf1c7c23902d75f2be57c4a7f2394b3e"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:a1733b8e84e7e40a9853e505fe68cc54339f97273bdfe6f3ed980095f769ddc7"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d9881356dc48e58910c53af82b57183879129fa30492be69058c5b0d9fddf391"}, - {file = "matplotlib-3.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f081c03f413f59390a80b3e351cc2b2ea0205839714dbc364519bcf51f4b56ca"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1cd120fca3407a225168238b790bd5c528f0fafde6172b140a2f3ab7a4ea63e9"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2c1590b90aa7bd741b54c62b78de05d4186271e34e2377e0289d943b3522273"}, - {file = "matplotlib-3.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d2ff3c984b8a569bc1383cd468fc06b70d7b59d5c2854ca39f1436ae8394117"}, - {file = "matplotlib-3.7.2-cp38-cp38-win32.whl", hash = "sha256:5dea00b62d28654b71ca92463656d80646675628d0828e08a5f3b57e12869e13"}, - {file = "matplotlib-3.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f506a1776ee94f9e131af1ac6efa6e5bc7cb606a3e389b0ccb6e657f60bb676"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6515e878f91894c2e4340d81f0911857998ccaf04dbc1bba781e3d89cbf70608"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:71f7a8c6b124e904db550f5b9fe483d28b896d4135e45c4ea381ad3b8a0e3256"}, - {file = "matplotlib-3.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:12f01b92ecd518e0697da4d97d163b2b3aa55eb3eb4e2c98235b3396d7dad55f"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7e28d6396563955f7af437894a36bf2b279462239a41028323e04b85179058b"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbcf59334ff645e6a67cd5f78b4b2cdb76384cdf587fa0d2dc85f634a72e1a3e"}, - {file = "matplotlib-3.7.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:318c89edde72ff95d8df67d82aca03861240512994a597a435a1011ba18dbc7f"}, - {file = "matplotlib-3.7.2-cp39-cp39-win32.whl", hash = "sha256:ce55289d5659b5b12b3db4dc9b7075b70cef5631e56530f14b2945e8836f2d20"}, - {file = "matplotlib-3.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:2ecb5be2b2815431c81dc115667e33da0f5a1bcf6143980d180d09a717c4a12e"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fdcd28360dbb6203fb5219b1a5658df226ac9bebc2542a9e8f457de959d713d0"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c3cca3e842b11b55b52c6fb8bd6a4088693829acbfcdb3e815fa9b7d5c92c1b"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebf577c7a6744e9e1bd3fee45fc74a02710b214f94e2bde344912d85e0c9af7c"}, - {file = "matplotlib-3.7.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:936bba394682049919dda062d33435b3be211dc3dcaa011e09634f060ec878b2"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bc221ffbc2150458b1cd71cdd9ddd5bb37962b036e41b8be258280b5b01da1dd"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35d74ebdb3f71f112b36c2629cf32323adfbf42679e2751252acd468f5001c07"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:717157e61b3a71d3d26ad4e1770dc85156c9af435659a25ee6407dc866cb258d"}, - {file = "matplotlib-3.7.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:20f844d6be031948148ba49605c8b96dfe7d3711d1b63592830d650622458c11"}, - {file = "matplotlib-3.7.2.tar.gz", hash = "sha256:a8cdb91dddb04436bd2f098b8fdf4b81352e68cf4d2c6756fcc414791076569b"}, + {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:085c33b27561d9c04386789d5aa5eb4a932ddef43cfcdd0e01735f9a6e85ce0c"}, + {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c568e80e1c17f68a727f30f591926751b97b98314d8e59804f54f86ae6fa6a22"}, + {file = "matplotlib-3.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7baf98c5ad59c5c4743ea884bb025cbffa52dacdfdac0da3e6021a285a90377e"}, + {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:236024f582e40dac39bca592258888b38ae47a9fed7b8de652d68d3d02d47d2b"}, + {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12b4f6795efea037ce2d41e7c417ad8bd02d5719c6ad4a8450a0708f4a1cfb89"}, + {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b2136cc6c5415b78977e0e8c608647d597204b05b1d9089ccf513c7d913733"}, + {file = "matplotlib-3.7.3-cp310-cp310-win32.whl", hash = "sha256:122dcbf9be0086e2a95d9e5e0632dbf3bd5b65eaa68c369363310a6c87753059"}, + {file = "matplotlib-3.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:4aab27d9e33293389e3c1d7c881d414a72bdfda0fedc3a6bf46c6fa88d9b8015"}, + {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:d5adc743de91e8e0b13df60deb1b1c285b8effea3d66223afceb14b63c9b05de"}, + {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:55de4cf7cd0071b8ebf203981b53ab64f988a0a1f897a2dff300a1124e8bcd8b"}, + {file = "matplotlib-3.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac03377fd908aaee2312d0b11735753e907adb6f4d1d102de5e2425249693f6c"}, + {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:755bafc10a46918ce9a39980009b54b02dd249594e5adf52f9c56acfddb5d0b7"}, + {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a6094c6f8e8d18db631754df4fe9a34dec3caf074f6869a7db09f18f9b1d6b2"}, + {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:272dba2f1b107790ed78ebf5385b8d14b27ad9e90419de340364b49fe549a993"}, + {file = "matplotlib-3.7.3-cp311-cp311-win32.whl", hash = "sha256:591c123bed1cb4b9996fb60b41a6d89c2ec4943244540776c5f1283fb6960a53"}, + {file = "matplotlib-3.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:3bf3a178c6504694cee8b88b353df0051583f2f6f8faa146f67115c27c856881"}, + {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_universal2.whl", hash = "sha256:edf54cac8ee3603f3093616b40a931e8c063969756a4d78a86e82c2fea9659f7"}, + {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:91e36a85ea639a1ba9f91427041eac064b04829945fe331a92617b6cb21d27e5"}, + {file = "matplotlib-3.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:caf5eaaf7c68f8d7df269dfbcaf46f48a70ff482bfcebdcc97519671023f2a7d"}, + {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74bf57f505efea376097e948b7cdd87191a7ce8180616390aef496639edf601f"}, + {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee152a88a0da527840a426535514b6ed8ac4240eb856b1da92cf48124320e346"}, + {file = "matplotlib-3.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:67a410a9c9e07cbc83581eeea144bbe298870bf0ac0ee2f2e10a015ab7efee19"}, + {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:259999c05285cb993d7f2a419cea547863fa215379eda81f7254c9e932963729"}, + {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3f4e7fd5a6157e1d018ce2166ec8e531a481dd4a36f035b5c23edfe05a25419a"}, + {file = "matplotlib-3.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:faa3d12d8811d08d14080a8b7b9caea9a457dc495350166b56df0db4b9909ef5"}, + {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:336e88900c11441e458da01c8414fc57e04e17f9d3bb94958a76faa2652bcf6b"}, + {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:12f4c0dd8aa280d796c8772ea8265a14f11a04319baa3a16daa5556065e8baea"}, + {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990955b11e7918d256cf3b956b10997f405b7917a3f1c7d8e69c1d15c7b1930"}, + {file = "matplotlib-3.7.3-cp38-cp38-win32.whl", hash = "sha256:e78707b751260b42b721507ad7aa60fe4026d7f51c74cca6b9cd8b123ebb633a"}, + {file = "matplotlib-3.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:e594ee43c59ea39ca5c6244667cac9d017a3527febc31f5532ad9135cf7469ec"}, + {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6eaa1cf0e94c936a26b78f6d756c5fbc12e0a58c8a68b7248a2a31456ce4e234"}, + {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0a97af9d22e8ebedc9f00b043d9bbd29a375e9e10b656982012dded44c10fd77"}, + {file = "matplotlib-3.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f9c6c16597af660433ab330b59ee2934b832ee1fabcaf5cbde7b2add840f31e"}, + {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7240259b4b9cbc62381f6378cff4d57af539162a18e832c1e48042fabc40b6b"}, + {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:747c6191d2e88ae854809e69aa358dbf852ff1a5738401b85c1cc9012309897a"}, + {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec726b08a5275d827aa91bb951e68234a4423adb91cf65bc0fcdc0f2777663f7"}, + {file = "matplotlib-3.7.3-cp39-cp39-win32.whl", hash = "sha256:40e3b9b450c6534f07278310c4e34caff41c2a42377e4b9d47b0f8d3ac1083a2"}, + {file = "matplotlib-3.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfc118642903a23e309b1da32886bb39a4314147d013e820c86b5fb4cb2e36d0"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:165c8082bf8fc0360c24aa4724a22eaadbfd8c28bf1ccf7e94d685cad48261e4"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebd8470cc2a3594746ff0513aecbfa2c55ff6f58e6cef2efb1a54eb87c88ffa2"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7153453669c9672b52095119fd21dd032d19225d48413a2871519b17db4b0fde"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:498a08267dc69dd8f24c4b5d7423fa584d7ce0027ba71f7881df05fc09b89bb7"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48999c4b19b5a0c058c9cd828ff6fc7748390679f6cf9a2ad653a3e802c87d3"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22d65d18b4ee8070a5fea5761d59293f1f9e2fac37ec9ce090463b0e629432fd"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c40cde976c36693cc0767e27cf5f443f91c23520060bd9496678364adfafe9c"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:39018a2b17592448fbfdf4b8352955e6c3905359939791d4ff429296494d1a0c"}, + {file = "matplotlib-3.7.3.tar.gz", hash = "sha256:f09b3dd6bdeb588de91f853bbb2d6f0ff8ab693485b0c49035eaa510cb4f142e"}, ] [package.dependencies] @@ -2086,11 +2181,12 @@ cycler = ">=0.10" fonttools = ">=4.22.0" importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} kiwisolver = ">=1.0.1" -numpy = ">=1.20" +numpy = ">=1.20,<2" packaging = ">=20.0" pillow = ">=6.2.0" -pyparsing = ">=2.3.1,<3.1" +pyparsing = ">=2.3.1" python-dateutil = ">=2.7" +setuptools_scm = ">=7" [[package]] name = "mdurl" @@ -2105,13 +2201,13 @@ files = [ [[package]] name = "mlflow" -version = "2.5.0" +version = "2.8.0" description = "MLflow: A Platform for ML Development and Productionization" optional = true python-versions = ">=3.8" files = [ - {file = "mlflow-2.5.0-py3-none-any.whl", hash = "sha256:981fcb3480ca7383b47e22b5e4c726d21e2c87fb4035e5a1b57574736c665576"}, - {file = "mlflow-2.5.0.tar.gz", hash = "sha256:f992ae8ea9c73502344baf48c4ec447aa9efbfa8965bc090868e6163234f4eb0"}, + {file = "mlflow-2.8.0-py3-none-any.whl", hash = "sha256:c336c547a508b087a2fe5fb995fe6ce2c0bbe94b60340dda8dee3317f64b02e5"}, + {file = "mlflow-2.8.0.tar.gz", hash = "sha256:75bdc7768ba950aa5c98dd4792a74ec372a4ac2b86d714ee565af18ebede4524"}, ] [package.dependencies] @@ -2121,9 +2217,9 @@ cloudpickle = "<3" databricks-cli = ">=0.8.7,<1" docker = ">=4.0.0,<7" entrypoints = "<1" -Flask = "<3" +Flask = "<4" gitpython = ">=2.1.0,<4" -gunicorn = {version = "<21", markers = "platform_system != \"Windows\""} +gunicorn = {version = "<22", markers = "platform_system != \"Windows\""} importlib-metadata = ">=3.7.0,<4.7.0 || >4.7.0,<7" Jinja2 = [ {version = ">=2.11,<4", markers = "platform_system != \"Windows\""}, @@ -2135,7 +2231,8 @@ numpy = "<2" packaging = "<24" pandas = "<3" protobuf = ">=3.12.0,<5" -pyarrow = ">=4.0.0,<13" +psutil = "<6" +pyarrow = ">=4.0.0,<14" pytz = "<2024" pyyaml = ">=5.1,<7" querystring-parser = "<2" @@ -2150,8 +2247,9 @@ waitress = {version = "<3", markers = "platform_system == \"Windows\""} aliyun-oss = ["aliyunstoreplugin"] databricks = ["azure-storage-file-datalake (>12)", "boto3 (>1)", "google-cloud-storage (>=1.30.0)"] extras = ["azureml-core (>=1.2.0)", "boto3", "google-cloud-storage (>=1.30.0)", "kubernetes", "mlserver (>=1.2.0,!=1.3.1)", "mlserver-mlflow (>=1.2.0,!=1.3.1)", "prometheus-flask-exporter", "pyarrow", "pysftp", "requests-auth-aws-sigv4", "virtualenv"] -gateway = ["aiohttp (<4)", "fastapi (<1)", "psutil (<6)", "pydantic (>=1.0,<2)", "uvicorn[standard] (<1)", "watchfiles (<1)"] +gateway = ["aiohttp (<4)", "boto3 (>=1.28.56,<2)", "fastapi (<1)", "pydantic (>=1.0,<3)", "uvicorn[standard] (<1)", "watchfiles (<1)"] sqlserver = ["mlflow-dbstore"] +xethub = ["mlflow-xethub"] [[package]] name = "more-itertools" @@ -2331,13 +2429,13 @@ PyYAML = ">=5.1.0" [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -2419,67 +2517,65 @@ files = [ [[package]] name = "pillow" -version = "10.0.0" +version = "10.1.0" description = "Python Imaging Library (Fork)" optional = true python-versions = ">=3.8" files = [ - {file = "Pillow-10.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1f62406a884ae75fb2f818694469519fb685cc7eaff05d3451a9ebe55c646891"}, - {file = "Pillow-10.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d5db32e2a6ccbb3d34d87c87b432959e0db29755727afb37290e10f6e8e62614"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf4392b77bdc81f36e92d3a07a5cd072f90253197f4a52a55a8cec48a12483b"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:520f2a520dc040512699f20fa1c363eed506e94248d71f85412b625026f6142c"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:8c11160913e3dd06c8ffdb5f233a4f254cb449f4dfc0f8f4549eda9e542c93d1"}, - {file = "Pillow-10.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a74ba0c356aaa3bb8e3eb79606a87669e7ec6444be352870623025d75a14a2bf"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d0dae4cfd56969d23d94dc8e89fb6a217be461c69090768227beb8ed28c0a3"}, - {file = "Pillow-10.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22c10cc517668d44b211717fd9775799ccec4124b9a7f7b3635fc5386e584992"}, - {file = "Pillow-10.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:dffe31a7f47b603318c609f378ebcd57f1554a3a6a8effbc59c3c69f804296de"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:9fb218c8a12e51d7ead2a7c9e101a04982237d4855716af2e9499306728fb485"}, - {file = "Pillow-10.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d35e3c8d9b1268cbf5d3670285feb3528f6680420eafe35cccc686b73c1e330f"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ed64f9ca2f0a95411e88a4efbd7a29e5ce2cea36072c53dd9d26d9c76f753b3"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b6eb5502f45a60a3f411c63187db83a3d3107887ad0d036c13ce836f8a36f1d"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:c1fbe7621c167ecaa38ad29643d77a9ce7311583761abf7836e1510c580bf3dd"}, - {file = "Pillow-10.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cd25d2a9d2b36fcb318882481367956d2cf91329f6892fe5d385c346c0649629"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3b08d4cc24f471b2c8ca24ec060abf4bebc6b144cb89cba638c720546b1cf538"}, - {file = "Pillow-10.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737a602fbd82afd892ca746392401b634e278cb65d55c4b7a8f48e9ef8d008d"}, - {file = "Pillow-10.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:3a82c40d706d9aa9734289740ce26460a11aeec2d9c79b7af87bb35f0073c12f"}, - {file = "Pillow-10.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:bc2ec7c7b5d66b8ec9ce9f720dbb5fa4bace0f545acd34870eff4a369b44bf37"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:d80cf684b541685fccdd84c485b31ce73fc5c9b5d7523bf1394ce134a60c6883"}, - {file = "Pillow-10.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76de421f9c326da8f43d690110f0e79fe3ad1e54be811545d7d91898b4c8493e"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81ff539a12457809666fef6624684c008e00ff6bf455b4b89fd00a140eecd640"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce543ed15570eedbb85df19b0a1a7314a9c8141a36ce089c0a894adbfccb4568"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:685ac03cc4ed5ebc15ad5c23bc555d68a87777586d970c2c3e216619a5476223"}, - {file = "Pillow-10.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d72e2ecc68a942e8cf9739619b7f408cc7b272b279b56b2c83c6123fcfa5cdff"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d50b6aec14bc737742ca96e85d6d0a5f9bfbded018264b3b70ff9d8c33485551"}, - {file = "Pillow-10.0.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:00e65f5e822decd501e374b0650146063fbb30a7264b4d2744bdd7b913e0cab5"}, - {file = "Pillow-10.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:f31f9fdbfecb042d046f9d91270a0ba28368a723302786c0009ee9b9f1f60199"}, - {file = "Pillow-10.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:1ce91b6ec08d866b14413d3f0bbdea7e24dfdc8e59f562bb77bc3fe60b6144ca"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:349930d6e9c685c089284b013478d6f76e3a534e36ddfa912cde493f235372f3"}, - {file = "Pillow-10.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3a684105f7c32488f7153905a4e3015a3b6c7182e106fe3c37fbb5ef3e6994c3"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4f69b3700201b80bb82c3a97d5e9254084f6dd5fb5b16fc1a7b974260f89f43"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f07ea8d2f827d7d2a49ecf1639ec02d75ffd1b88dcc5b3a61bbb37a8759ad8d"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:040586f7d37b34547153fa383f7f9aed68b738992380ac911447bb78f2abe530"}, - {file = "Pillow-10.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f88a0b92277de8e3ca715a0d79d68dc82807457dae3ab8699c758f07c20b3c51"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c7cf14a27b0d6adfaebb3ae4153f1e516df54e47e42dcc073d7b3d76111a8d86"}, - {file = "Pillow-10.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3400aae60685b06bb96f99a21e1ada7bc7a413d5f49bce739828ecd9391bb8f7"}, - {file = "Pillow-10.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:dbc02381779d412145331789b40cc7b11fdf449e5d94f6bc0b080db0a56ea3f0"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:9211e7ad69d7c9401cfc0e23d49b69ca65ddd898976d660a2fa5904e3d7a9baa"}, - {file = "Pillow-10.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:faaf07ea35355b01a35cb442dd950d8f1bb5b040a7787791a535de13db15ed90"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9f72a021fbb792ce98306ffb0c348b3c9cb967dce0f12a49aa4c3d3fdefa967"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f7c16705f44e0504a3a2a14197c1f0b32a95731d251777dcb060aa83022cb2d"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:76edb0a1fa2b4745fb0c99fb9fb98f8b180a1bbceb8be49b087e0b21867e77d3"}, - {file = "Pillow-10.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:368ab3dfb5f49e312231b6f27b8820c823652b7cd29cfbd34090565a015e99ba"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:608bfdee0d57cf297d32bcbb3c728dc1da0907519d1784962c5f0c68bb93e5a3"}, - {file = "Pillow-10.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5c6e3df6bdd396749bafd45314871b3d0af81ff935b2d188385e970052091017"}, - {file = "Pillow-10.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:7be600823e4c8631b74e4a0d38384c73f680e6105a7d3c6824fcf226c178c7e6"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:92be919bbc9f7d09f7ae343c38f5bb21c973d2576c1d45600fce4b74bafa7ac0"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8182b523b2289f7c415f589118228d30ac8c355baa2f3194ced084dac2dbba"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:38250a349b6b390ee6047a62c086d3817ac69022c127f8a5dc058c31ccef17f3"}, - {file = "Pillow-10.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:88af2003543cc40c80f6fca01411892ec52b11021b3dc22ec3bc9d5afd1c5334"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c189af0545965fa8d3b9613cfdb0cd37f9d71349e0f7750e1fd704648d475ed2"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b031a6fc11365970e6a5686d7ba8c63e4c1cf1ea143811acbb524295eabed"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:db24668940f82321e746773a4bc617bfac06ec831e5c88b643f91f122a785684"}, - {file = "Pillow-10.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:efe8c0681042536e0d06c11f48cebe759707c9e9abf880ee213541c5b46c5bf3"}, - {file = "Pillow-10.0.0.tar.gz", hash = "sha256:9c82b5b3e043c7af0d95792d0d20ccf68f61a1fec6b3530e718b688422727396"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, + {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, + {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, + {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, + {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, + {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, + {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, ] [package.extras] @@ -2488,13 +2584,13 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa [[package]] name = "pip" -version = "23.2.1" +version = "23.3.1" description = "The PyPA recommended tool for installing Python packages." optional = false python-versions = ">=3.7" files = [ - {file = "pip-23.2.1-py3-none-any.whl", hash = "sha256:7ccf472345f20d35bdc9d1841ff5f313260c2c33fe417f48c30ac46cccabf5be"}, - {file = "pip-23.2.1.tar.gz", hash = "sha256:fb0bd5435b3200c602b5bf61d2d43c2f13c02e29c1707567ae7fbc514eb9faf2"}, + {file = "pip-23.3.1-py3-none-any.whl", hash = "sha256:55eb67bb6171d37447e82213be585b75fe2b12b359e993773aca4de9247a052b"}, + {file = "pip-23.3.1.tar.gz", hash = "sha256:1fcaa041308d01f14575f6d0d2ea4b75a3e2871fe4f9c694976f908768e14174"}, ] [[package]] @@ -2533,13 +2629,13 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" +version = "3.11.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, + {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, ] [package.extras] @@ -2628,6 +2724,34 @@ files = [ {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, ] +[[package]] +name = "psutil" +version = "5.9.6" +description = "Cross-platform lib for process and system monitoring in Python." +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, + {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, + {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, + {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, + {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, + {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, + {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, + {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, + {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, + {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, + {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, + {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, + {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + [[package]] name = "py" version = "1.11.0" @@ -2641,36 +2765,40 @@ files = [ [[package]] name = "pyarrow" -version = "12.0.1" +version = "13.0.0" description = "Python library for Apache Arrow" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pyarrow-12.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:6d288029a94a9bb5407ceebdd7110ba398a00412c5b0155ee9813a40d246c5df"}, - {file = "pyarrow-12.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345e1828efdbd9aa4d4de7d5676778aba384a2c3add896d995b23d368e60e5af"}, - {file = "pyarrow-12.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d6009fdf8986332b2169314da482baed47ac053311c8934ac6651e614deacd6"}, - {file = "pyarrow-12.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d3c4cbbf81e6dd23fe921bc91dc4619ea3b79bc58ef10bce0f49bdafb103daf"}, - {file = "pyarrow-12.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:cdacf515ec276709ac8042c7d9bd5be83b4f5f39c6c037a17a60d7ebfd92c890"}, - {file = "pyarrow-12.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:749be7fd2ff260683f9cc739cb862fb11be376de965a2a8ccbf2693b098db6c7"}, - {file = "pyarrow-12.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6895b5fb74289d055c43db3af0de6e16b07586c45763cb5e558d38b86a91e3a7"}, - {file = "pyarrow-12.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1887bdae17ec3b4c046fcf19951e71b6a619f39fa674f9881216173566c8f718"}, - {file = "pyarrow-12.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2c9cb8eeabbadf5fcfc3d1ddea616c7ce893db2ce4dcef0ac13b099ad7ca082"}, - {file = "pyarrow-12.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:ce4aebdf412bd0eeb800d8e47db854f9f9f7e2f5a0220440acf219ddfddd4f63"}, - {file = "pyarrow-12.0.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:e0d8730c7f6e893f6db5d5b86eda42c0a130842d101992b581e2138e4d5663d3"}, - {file = "pyarrow-12.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43364daec02f69fec89d2315f7fbfbeec956e0d991cbbef471681bd77875c40f"}, - {file = "pyarrow-12.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051f9f5ccf585f12d7de836e50965b3c235542cc896959320d9776ab93f3b33d"}, - {file = "pyarrow-12.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:be2757e9275875d2a9c6e6052ac7957fbbfc7bc7370e4a036a9b893e96fedaba"}, - {file = "pyarrow-12.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:cf812306d66f40f69e684300f7af5111c11f6e0d89d6b733e05a3de44961529d"}, - {file = "pyarrow-12.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:459a1c0ed2d68671188b2118c63bac91eaef6fc150c77ddd8a583e3c795737bf"}, - {file = "pyarrow-12.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85e705e33eaf666bbe508a16fd5ba27ca061e177916b7a317ba5a51bee43384c"}, - {file = "pyarrow-12.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9120c3eb2b1f6f516a3b7a9714ed860882d9ef98c4b17edcdc91d95b7528db60"}, - {file = "pyarrow-12.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:c780f4dc40460015d80fcd6a6140de80b615349ed68ef9adb653fe351778c9b3"}, - {file = "pyarrow-12.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a3c63124fc26bf5f95f508f5d04e1ece8cc23a8b0af2a1e6ab2b1ec3fdc91b24"}, - {file = "pyarrow-12.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b13329f79fa4472324f8d32dc1b1216616d09bd1e77cfb13104dec5463632c36"}, - {file = "pyarrow-12.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb656150d3d12ec1396f6dde542db1675a95c0cc8366d507347b0beed96e87ca"}, - {file = "pyarrow-12.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6251e38470da97a5b2e00de5c6a049149f7b2bd62f12fa5dbb9ac674119ba71a"}, - {file = "pyarrow-12.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:3de26da901216149ce086920547dfff5cd22818c9eab67ebc41e863a5883bac7"}, - {file = "pyarrow-12.0.1.tar.gz", hash = "sha256:cce317fc96e5b71107bf1f9f184d5e54e2bd14bbf3f9a3d62819961f0af86fec"}, + {file = "pyarrow-13.0.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:1afcc2c33f31f6fb25c92d50a86b7a9f076d38acbcb6f9e74349636109550148"}, + {file = "pyarrow-13.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:70fa38cdc66b2fc1349a082987f2b499d51d072faaa6b600f71931150de2e0e3"}, + {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd57b13a6466822498238877892a9b287b0a58c2e81e4bdb0b596dbb151cbb73"}, + {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ce69f7bf01de2e2764e14df45b8404fc6f1a5ed9871e8e08a12169f87b7a26"}, + {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:588f0d2da6cf1b1680974d63be09a6530fd1bd825dc87f76e162404779a157dc"}, + {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6241afd72b628787b4abea39e238e3ff9f34165273fad306c7acf780dd850956"}, + {file = "pyarrow-13.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:fda7857e35993673fcda603c07d43889fca60a5b254052a462653f8656c64f44"}, + {file = "pyarrow-13.0.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:aac0ae0146a9bfa5e12d87dda89d9ef7c57a96210b899459fc2f785303dcbb67"}, + {file = "pyarrow-13.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7759994217c86c161c6a8060509cfdf782b952163569606bb373828afdd82e8"}, + {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:868a073fd0ff6468ae7d869b5fc1f54de5c4255b37f44fb890385eb68b68f95d"}, + {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51be67e29f3cfcde263a113c28e96aa04362ed8229cb7c6e5f5c719003659d33"}, + {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d1b4e7176443d12610874bb84d0060bf080f000ea9ed7c84b2801df851320295"}, + {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:69b6f9a089d116a82c3ed819eea8fe67dae6105f0d81eaf0fdd5e60d0c6e0944"}, + {file = "pyarrow-13.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ab1268db81aeb241200e321e220e7cd769762f386f92f61b898352dd27e402ce"}, + {file = "pyarrow-13.0.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:ee7490f0f3f16a6c38f8c680949551053c8194e68de5046e6c288e396dccee80"}, + {file = "pyarrow-13.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3ad79455c197a36eefbd90ad4aa832bece7f830a64396c15c61a0985e337287"}, + {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68fcd2dc1b7d9310b29a15949cdd0cb9bc34b6de767aff979ebf546020bf0ba0"}, + {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc6fd330fd574c51d10638e63c0d00ab456498fc804c9d01f2a61b9264f2c5b2"}, + {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e66442e084979a97bb66939e18f7b8709e4ac5f887e636aba29486ffbf373763"}, + {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:0f6eff839a9e40e9c5610d3ff8c5bdd2f10303408312caf4c8003285d0b49565"}, + {file = "pyarrow-13.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b30a27f1cddf5c6efcb67e598d7823a1e253d743d92ac32ec1eb4b6a1417867"}, + {file = "pyarrow-13.0.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:09552dad5cf3de2dc0aba1c7c4b470754c69bd821f5faafc3d774bedc3b04bb7"}, + {file = "pyarrow-13.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3896ae6c205d73ad192d2fc1489cd0edfab9f12867c85b4c277af4d37383c18c"}, + {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6647444b21cb5e68b593b970b2a9a07748dd74ea457c7dadaa15fd469c48ada1"}, + {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47663efc9c395e31d09c6aacfa860f4473815ad6804311c5433f7085415d62a7"}, + {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b9ba6b6d34bd2563345488cf444510588ea42ad5613df3b3509f48eb80250afd"}, + {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:d00d374a5625beeb448a7fa23060df79adb596074beb3ddc1838adb647b6ef09"}, + {file = "pyarrow-13.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:c51afd87c35c8331b56f796eff954b9c7f8d4b7fef5903daf4e05fcf017d23a8"}, + {file = "pyarrow-13.0.0.tar.gz", hash = "sha256:83333726e83ed44b0ac94d8d7a21bbdee4a05029c3b1e8db58a863eec8fd8a33"}, ] [package.dependencies] @@ -2703,47 +2831,47 @@ pyasn1 = ">=0.4.6,<0.6.0" [[package]] name = "pydantic" -version = "1.10.12" +version = "1.10.13" description = "Data validation and settings management using python type hints" optional = false python-versions = ">=3.7" files = [ - {file = "pydantic-1.10.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718"}, - {file = "pydantic-1.10.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b"}, - {file = "pydantic-1.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09"}, - {file = "pydantic-1.10.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed"}, - {file = "pydantic-1.10.12-cp310-cp310-win_amd64.whl", hash = "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc"}, - {file = "pydantic-1.10.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62"}, - {file = "pydantic-1.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246"}, - {file = "pydantic-1.10.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33"}, - {file = "pydantic-1.10.12-cp311-cp311-win_amd64.whl", hash = "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f"}, - {file = "pydantic-1.10.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565"}, - {file = "pydantic-1.10.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303"}, - {file = "pydantic-1.10.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5"}, - {file = "pydantic-1.10.12-cp37-cp37m-win_amd64.whl", hash = "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62"}, - {file = "pydantic-1.10.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0"}, - {file = "pydantic-1.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d"}, - {file = "pydantic-1.10.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33"}, - {file = "pydantic-1.10.12-cp38-cp38-win_amd64.whl", hash = "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6"}, - {file = "pydantic-1.10.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86"}, - {file = "pydantic-1.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe"}, - {file = "pydantic-1.10.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb"}, - {file = "pydantic-1.10.12-cp39-cp39-win_amd64.whl", hash = "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d"}, - {file = "pydantic-1.10.12-py3-none-any.whl", hash = "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942"}, - {file = "pydantic-1.10.12.tar.gz", hash = "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:efff03cc7a4f29d9009d1c96ceb1e7a70a65cfe86e89d34e4a5f2ab1e5693737"}, + {file = "pydantic-1.10.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3ecea2b9d80e5333303eeb77e180b90e95eea8f765d08c3d278cd56b00345d01"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1740068fd8e2ef6eb27a20e5651df000978edce6da6803c2bef0bc74540f9548"}, + {file = "pydantic-1.10.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bafe2e60b5e78bc64a2941b4c071a4b7404c5c907f5f5a99b0139781e69ed8"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bc0898c12f8e9c97f6cd44c0ed70d55749eaf783716896960b4ecce2edfd2d69"}, + {file = "pydantic-1.10.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:654db58ae399fe6434e55325a2c3e959836bd17a6f6a0b6ca8107ea0571d2e17"}, + {file = "pydantic-1.10.13-cp310-cp310-win_amd64.whl", hash = "sha256:75ac15385a3534d887a99c713aa3da88a30fbd6204a5cd0dc4dab3d770b9bd2f"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c553f6a156deb868ba38a23cf0df886c63492e9257f60a79c0fd8e7173537653"}, + {file = "pydantic-1.10.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e08865bc6464df8c7d61439ef4439829e3ab62ab1669cddea8dd00cd74b9ffe"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31647d85a2013d926ce60b84f9dd5300d44535a9941fe825dc349ae1f760df9"}, + {file = "pydantic-1.10.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:210ce042e8f6f7c01168b2d84d4c9eb2b009fe7bf572c2266e235edf14bacd80"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8ae5dd6b721459bfa30805f4c25880e0dd78fc5b5879f9f7a692196ddcb5a580"}, + {file = "pydantic-1.10.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f8e81fc5fb17dae698f52bdd1c4f18b6ca674d7068242b2aff075f588301bbb0"}, + {file = "pydantic-1.10.13-cp311-cp311-win_amd64.whl", hash = "sha256:61d9dce220447fb74f45e73d7ff3b530e25db30192ad8d425166d43c5deb6df0"}, + {file = "pydantic-1.10.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b03e42ec20286f052490423682016fd80fda830d8e4119f8ab13ec7464c0132"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f59ef915cac80275245824e9d771ee939133be38215555e9dc90c6cb148aaeb5"}, + {file = "pydantic-1.10.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a1f9f747851338933942db7af7b6ee8268568ef2ed86c4185c6ef4402e80ba8"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:97cce3ae7341f7620a0ba5ef6cf043975cd9d2b81f3aa5f4ea37928269bc1b87"}, + {file = "pydantic-1.10.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:854223752ba81e3abf663d685f105c64150873cc6f5d0c01d3e3220bcff7d36f"}, + {file = "pydantic-1.10.13-cp37-cp37m-win_amd64.whl", hash = "sha256:b97c1fac8c49be29486df85968682b0afa77e1b809aff74b83081cc115e52f33"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c958d053453a1c4b1c2062b05cd42d9d5c8eb67537b8d5a7e3c3032943ecd261"}, + {file = "pydantic-1.10.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4c5370a7edaac06daee3af1c8b1192e305bc102abcbf2a92374b5bc793818599"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d6f6e7305244bddb4414ba7094ce910560c907bdfa3501e9db1a7fd7eaea127"}, + {file = "pydantic-1.10.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d3a3c792a58e1622667a2837512099eac62490cdfd63bd407993aaf200a4cf1f"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c636925f38b8db208e09d344c7aa4f29a86bb9947495dd6b6d376ad10334fb78"}, + {file = "pydantic-1.10.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:678bcf5591b63cc917100dc50ab6caebe597ac67e8c9ccb75e698f66038ea953"}, + {file = "pydantic-1.10.13-cp38-cp38-win_amd64.whl", hash = "sha256:6cf25c1a65c27923a17b3da28a0bdb99f62ee04230c931d83e888012851f4e7f"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8ef467901d7a41fa0ca6db9ae3ec0021e3f657ce2c208e98cd511f3161c762c6"}, + {file = "pydantic-1.10.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:968ac42970f57b8344ee08837b62f6ee6f53c33f603547a55571c954a4225691"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9849f031cf8a2f0a928fe885e5a04b08006d6d41876b8bbd2fc68a18f9f2e3fd"}, + {file = "pydantic-1.10.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56e3ff861c3b9c6857579de282ce8baabf443f42ffba355bf070770ed63e11e1"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f00790179497767aae6bcdc36355792c79e7bbb20b145ff449700eb076c5f96"}, + {file = "pydantic-1.10.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:75b297827b59bc229cac1a23a2f7a4ac0031068e5be0ce385be1462e7e17a35d"}, + {file = "pydantic-1.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:e70ca129d2053fb8b728ee7d1af8e553a928d7e301a311094b8a0501adc8763d"}, + {file = "pydantic-1.10.13-py3-none-any.whl", hash = "sha256:b87326822e71bd5f313e7d3bfdc77ac3247035ac10b0c0618bd99dcf95b1e687"}, + {file = "pydantic-1.10.13.tar.gz", hash = "sha256:32c8b48dcd3b2ac4e78b0ba4af3a2c2eb6048cb75202f0ea7b34feb740efc340"}, ] [package.dependencies] @@ -2786,13 +2914,13 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, - {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, + {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, + {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, ] [package.extras] @@ -2814,13 +2942,13 @@ tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} [[package]] name = "pytest" -version = "7.4.0" +version = "7.4.3" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, + {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, + {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, ] [package.dependencies] @@ -2900,13 +3028,13 @@ unidecode = ["Unidecode (>=1.1.1)"] [[package]] name = "pytoolconfig" -version = "1.2.5" +version = "1.2.6" description = "Python tool configuration" optional = false python-versions = ">=3.7" files = [ - {file = "pytoolconfig-1.2.5-py3-none-any.whl", hash = "sha256:239ba9d3e537b91d0243275a497700ea39a5e259ddb80421c366e3b288bf30fe"}, - {file = "pytoolconfig-1.2.5.tar.gz", hash = "sha256:a50f9dfe23b03a9d40414c1fdf902fefbeae12f2ac75a3c8f915944d6ffac279"}, + {file = "pytoolconfig-1.2.6-py3-none-any.whl", hash = "sha256:e8b2e538f11dbabc4617884d45401e0105e2d7db920cb8ae6baa94d66126a8e3"}, + {file = "pytoolconfig-1.2.6.tar.gz", hash = "sha256:f2d00ea4f8cbdffd3006780ba51016618c835b338f634e3f7f8b2715b1710889"}, ] [package.dependencies] @@ -2922,13 +3050,13 @@ validation = ["pydantic (>=1.7.4)"] [[package]] name = "pytz" -version = "2023.3" +version = "2023.3.post1" description = "World timezone definitions, modern and historical" optional = true python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, + {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] [[package]] @@ -3087,33 +3215,32 @@ requests = ">=2.0.1,<3.0.0" [[package]] name = "responses" -version = "0.23.3" +version = "0.24.0" description = "A utility library for mocking out the `requests` Python library." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "responses-0.23.3-py3-none-any.whl", hash = "sha256:e6fbcf5d82172fecc0aa1860fd91e58cbfd96cee5e96da5b63fa6eb3caa10dd3"}, - {file = "responses-0.23.3.tar.gz", hash = "sha256:205029e1cb334c21cb4ec64fc7599be48b859a0fd381a42443cdd600bfe8b16a"}, + {file = "responses-0.24.0-py3-none-any.whl", hash = "sha256:060be153c270c06fa4d22c1ef8865fdef43902eb595204deeef736cddb62d353"}, + {file = "responses-0.24.0.tar.gz", hash = "sha256:3df82f7d4dcd3e5f61498181aadb4381f291da25c7506c47fe8cb68ce29203e7"}, ] [package.dependencies] pyyaml = "*" requests = ">=2.30.0,<3.0" -types-PyYAML = "*" 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-requests"] +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 = "rich" -version = "13.5.2" +version = "13.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.5.2-py3-none-any.whl", hash = "sha256:146a90b3b6b47cac4a73c12866a499e9817426423f57c5a66949c086191a8808"}, - {file = "rich-13.5.2.tar.gz", hash = "sha256:fb9d6c0a0f643c99eed3875b5377a184132ba9be4d61516a55273d3554d75a39"}, + {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, + {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, ] [package.dependencies] @@ -3126,13 +3253,13 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rope" -version = "1.9.0" +version = "1.11.0" description = "a python refactoring library..." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "rope-1.9.0-py3-none-any.whl", hash = "sha256:2ed32d72cd2c4395bb1d569e38fd4f15d6080cfadd61b6e5c565fd39e3f677aa"}, - {file = "rope-1.9.0.tar.gz", hash = "sha256:f48d708132c0e062b411308732ca13933b976486b4b53d1e804f94ed08d69503"}, + {file = "rope-1.11.0-py3-none-any.whl", hash = "sha256:62c9028353d1f020653bd1b090d659031539842ede6bd65985f86db3d6430932"}, + {file = "rope-1.11.0.tar.gz", hash = "sha256:ac0cbdcda5a546e1e56c54976df07ea2cb04c806f65459bc213536c5d1bc073e"}, ] [package.dependencies] @@ -3145,108 +3272,110 @@ release = ["pip-tools (>=6.12.1)", "toml (>=0.10.2)", "twine (>=4.0.2)"] [[package]] name = "rpds-py" -version = "0.9.2" +version = "0.12.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.9.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7"}, - {file = "rpds_py-0.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f"}, - {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f"}, - {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe"}, - {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6"}, - {file = "rpds_py-0.9.2-cp310-none-win32.whl", hash = "sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764"}, - {file = "rpds_py-0.9.2-cp310-none-win_amd64.whl", hash = "sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e"}, - {file = "rpds_py-0.9.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3"}, - {file = "rpds_py-0.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d"}, - {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c"}, - {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae"}, - {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de"}, - {file = "rpds_py-0.9.2-cp311-none-win32.whl", hash = "sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab"}, - {file = "rpds_py-0.9.2-cp311-none-win_amd64.whl", hash = "sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298"}, - {file = "rpds_py-0.9.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386"}, - {file = "rpds_py-0.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1"}, - {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b"}, - {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90"}, - {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d"}, - {file = "rpds_py-0.9.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d"}, - {file = "rpds_py-0.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55"}, - {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d"}, - {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32"}, - {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e"}, - {file = "rpds_py-0.9.2-cp38-none-win32.whl", hash = "sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920"}, - {file = "rpds_py-0.9.2-cp38-none-win_amd64.whl", hash = "sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044"}, - {file = "rpds_py-0.9.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260"}, - {file = "rpds_py-0.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324"}, - {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3"}, - {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535"}, - {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26"}, - {file = "rpds_py-0.9.2-cp39-none-win32.whl", hash = "sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0"}, - {file = "rpds_py-0.9.2-cp39-none-win_amd64.whl", hash = "sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe"}, - {file = "rpds_py-0.9.2.tar.gz", hash = "sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, + {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, + {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, + {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, + {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, + {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, + {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, + {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, + {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, + {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, + {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, + {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, + {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, + {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, + {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, + {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, + {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, + {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, + {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, + {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, + {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, + {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, + {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, + {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, + {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, + {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, + {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, + {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, + {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, + {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, ] [[package]] @@ -3265,37 +3394,42 @@ pyasn1 = ">=0.1.3" [[package]] name = "scikit-learn" -version = "1.3.0" +version = "1.3.2" description = "A set of python modules for machine learning and data mining" optional = true python-versions = ">=3.8" files = [ - {file = "scikit-learn-1.3.0.tar.gz", hash = "sha256:8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a"}, - {file = "scikit_learn-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:981287869e576d42c682cf7ca96af0c6ac544ed9316328fd0d9292795c742cf5"}, - {file = "scikit_learn-1.3.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:436aaaae2c916ad16631142488e4c82f4296af2404f480e031d866863425d2a2"}, - {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7e28d8fa47a0b30ae1bd7a079519dd852764e31708a7804da6cb6f8b36e3630"}, - {file = "scikit_learn-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80c08834a473d08a204d966982a62e11c976228d306a2648c575e3ead12111"}, - {file = "scikit_learn-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:552fd1b6ee22900cf1780d7386a554bb96949e9a359999177cf30211e6b20df6"}, - {file = "scikit_learn-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:79970a6d759eb00a62266a31e2637d07d2d28446fca8079cf9afa7c07b0427f8"}, - {file = "scikit_learn-1.3.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:850a00b559e636b23901aabbe79b73dc604b4e4248ba9e2d6e72f95063765603"}, - {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee04835fb016e8062ee9fe9074aef9b82e430504e420bff51e3e5fffe72750ca"}, - {file = "scikit_learn-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d953531f5d9f00c90c34fa3b7d7cfb43ecff4c605dac9e4255a20b114a27369"}, - {file = "scikit_learn-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:151ac2bf65ccf363664a689b8beafc9e6aae36263db114b4ca06fbbbf827444a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6a885a9edc9c0a341cab27ec4f8a6c58b35f3d449c9d2503a6fd23e06bbd4f6a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:9877af9c6d1b15486e18a94101b742e9d0d2f343d35a634e337411ddb57783f3"}, - {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c470f53cea065ff3d588050955c492793bb50c19a92923490d18fcb637f6383a"}, - {file = "scikit_learn-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd6e2d7389542eae01077a1ee0318c4fec20c66c957f45c7aac0c6eb0fe3c612"}, - {file = "scikit_learn-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:3a11936adbc379a6061ea32fa03338d4ca7248d86dd507c81e13af428a5bc1db"}, - {file = "scikit_learn-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:998d38fcec96584deee1e79cd127469b3ad6fefd1ea6c2dfc54e8db367eb396b"}, - {file = "scikit_learn-1.3.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ded35e810438a527e17623ac6deae3b360134345b7c598175ab7741720d7ffa7"}, - {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e8102d5036e28d08ab47166b48c8d5e5810704daecf3a476a4282d562be9a28"}, - {file = "scikit_learn-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7617164951c422747e7c32be4afa15d75ad8044f42e7d70d3e2e0429a50e6718"}, - {file = "scikit_learn-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:1d54fb9e6038284548072df22fd34777e434153f7ffac72c8596f2d6987110dd"}, + {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"}, + {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"}, + {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"}, + {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"}, + {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"}, + {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"}, ] [package.dependencies] joblib = ">=1.1.1" -numpy = ">=1.17.3" +numpy = ">=1.17.3,<2.0" scipy = ">=1.5.0" threadpoolctl = ">=2.0.0" @@ -3345,30 +3479,52 @@ test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeo [[package]] name = "semver" -version = "3.0.1" +version = "3.0.2" description = "Python helper for Semantic Versioning (https://semver.org)" optional = false python-versions = ">=3.7" files = [ - {file = "semver-3.0.1-py3-none-any.whl", hash = "sha256:2a23844ba1647362c7490fe3995a86e097bb590d16f0f32dfc383008f19e4cdf"}, - {file = "semver-3.0.1.tar.gz", hash = "sha256:9ec78c5447883c67b97f98c3b6212796708191d22e4ad30f4570f840171cbce1"}, + {file = "semver-3.0.2-py3-none-any.whl", hash = "sha256:b1ea4686fe70b981f85359eda33199d60c53964284e0cfb4977d243e37cf4bf4"}, + {file = "semver-3.0.2.tar.gz", hash = "sha256:6253adb39c70f6e51afed2fa7152bcd414c411286088fb4b9effb133885ab4cc"}, ] [[package]] name = "setuptools" -version = "68.0.0" +version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, - {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, + {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, + {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "setuptools-scm" +version = "8.0.4" +description = "the blessed package to manage your versions by scm tags" +optional = true +python-versions = ">=3.8" +files = [ + {file = "setuptools-scm-8.0.4.tar.gz", hash = "sha256:b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"}, + {file = "setuptools_scm-8.0.4-py3-none-any.whl", hash = "sha256:b47844cd2a84b83b3187a5782c71128c28b4c94cad8bfb871da2784a5cb54c4f"}, +] + +[package.dependencies] +packaging = ">=20" +setuptools = "*" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} +typing-extensions = "*" + +[package.extras] +docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] +rich = ["rich"] +test = ["build", "pytest", "rich", "wheel"] [[package]] name = "six" @@ -3383,71 +3539,80 @@ files = [ [[package]] name = "smmap" -version = "5.0.0" +version = "5.0.1" description = "A pure Python implementation of a sliding window memory map manager" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, - {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, + {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"}, + {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, ] [[package]] name = "sqlalchemy" -version = "2.0.19" +version = "2.0.23" description = "Database Abstraction Library" optional = true python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9deaae357edc2091a9ed5d25e9ee8bba98bcfae454b3911adeaf159c2e9ca9e3"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0bf0fd65b50a330261ec7fe3d091dfc1c577483c96a9fa1e4323e932961aa1b5"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d90ccc15ba1baa345796a8fb1965223ca7ded2d235ccbef80a47b85cea2d71a"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb4e688f6784427e5f9479d1a13617f573de8f7d4aa713ba82813bcd16e259d1"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:584f66e5e1979a7a00f4935015840be627e31ca29ad13f49a6e51e97a3fb8cae"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c69ce70047b801d2aba3e5ff3cba32014558966109fecab0c39d16c18510f15"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-win32.whl", hash = "sha256:96f0463573469579d32ad0c91929548d78314ef95c210a8115346271beeeaaa2"}, - {file = "SQLAlchemy-2.0.19-cp310-cp310-win_amd64.whl", hash = "sha256:22bafb1da60c24514c141a7ff852b52f9f573fb933b1e6b5263f0daa28ce6db9"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d6894708eeb81f6d8193e996257223b6bb4041cb05a17cd5cf373ed836ef87a2"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8f2afd1aafded7362b397581772c670f20ea84d0a780b93a1a1529da7c3d369"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15afbf5aa76f2241184c1d3b61af1a72ba31ce4161013d7cb5c4c2fca04fd6e"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fc05b59142445a4efb9c1fd75c334b431d35c304b0e33f4fa0ff1ea4890f92e"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5831138f0cc06b43edf5f99541c64adf0ab0d41f9a4471fd63b54ae18399e4de"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3afa8a21a9046917b3a12ffe016ba7ebe7a55a6fc0c7d950beb303c735c3c3ad"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-win32.whl", hash = "sha256:c896d4e6ab2eba2afa1d56be3d0b936c56d4666e789bfc59d6ae76e9fcf46145"}, - {file = "SQLAlchemy-2.0.19-cp311-cp311-win_amd64.whl", hash = "sha256:024d2f67fb3ec697555e48caeb7147cfe2c08065a4f1a52d93c3d44fc8e6ad1c"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:89bc2b374ebee1a02fd2eae6fd0570b5ad897ee514e0f84c5c137c942772aa0c"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd4d410a76c3762511ae075d50f379ae09551d92525aa5bb307f8343bf7c2c12"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f469f15068cd8351826df4080ffe4cc6377c5bf7d29b5a07b0e717dddb4c7ea2"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cda283700c984e699e8ef0fcc5c61f00c9d14b6f65a4f2767c97242513fcdd84"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:43699eb3f80920cc39a380c159ae21c8a8924fe071bccb68fc509e099420b148"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-win32.whl", hash = "sha256:61ada5831db36d897e28eb95f0f81814525e0d7927fb51145526c4e63174920b"}, - {file = "SQLAlchemy-2.0.19-cp37-cp37m-win_amd64.whl", hash = "sha256:57d100a421d9ab4874f51285c059003292433c648df6abe6c9c904e5bd5b0828"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:16a310f5bc75a5b2ce7cb656d0e76eb13440b8354f927ff15cbaddd2523ee2d1"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf7b5e3856cbf1876da4e9d9715546fa26b6e0ba1a682d5ed2fc3ca4c7c3ec5b"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e7b69d9ced4b53310a87117824b23c509c6fc1f692aa7272d47561347e133b6"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9eb4575bfa5afc4b066528302bf12083da3175f71b64a43a7c0badda2be365"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6b54d1ad7a162857bb7c8ef689049c7cd9eae2f38864fc096d62ae10bc100c7d"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5d6afc41ca0ecf373366fd8e10aee2797128d3ae45eb8467b19da4899bcd1ee0"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-win32.whl", hash = "sha256:430614f18443b58ceb9dedec323ecddc0abb2b34e79d03503b5a7579cd73a531"}, - {file = "SQLAlchemy-2.0.19-cp38-cp38-win_amd64.whl", hash = "sha256:eb60699de43ba1a1f77363f563bb2c652f7748127ba3a774f7cf2c7804aa0d3d"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a752b7a9aceb0ba173955d4f780c64ee15a1a991f1c52d307d6215c6c73b3a4c"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7351c05db355da112e056a7b731253cbeffab9dfdb3be1e895368513c7d70106"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa51ce4aea583b0c6b426f4b0563d3535c1c75986c4373a0987d84d22376585b"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae7473a67cd82a41decfea58c0eac581209a0aa30f8bc9190926fbf628bb17f7"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851a37898a8a39783aab603c7348eb5b20d83c76a14766a43f56e6ad422d1ec8"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:539010665c90e60c4a1650afe4ab49ca100c74e6aef882466f1de6471d414be7"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-win32.whl", hash = "sha256:f82c310ddf97b04e1392c33cf9a70909e0ae10a7e2ddc1d64495e3abdc5d19fb"}, - {file = "SQLAlchemy-2.0.19-cp39-cp39-win_amd64.whl", hash = "sha256:8e712cfd2e07b801bc6b60fdf64853bc2bd0af33ca8fa46166a23fe11ce0dbb0"}, - {file = "SQLAlchemy-2.0.19-py3-none-any.whl", hash = "sha256:314145c1389b021a9ad5aa3a18bac6f5d939f9087d7fc5443be28cba19d2c972"}, - {file = "SQLAlchemy-2.0.19.tar.gz", hash = "sha256:77a14fa20264af73ddcdb1e2b9c5a829b8cc6b8304d0f093271980e36c200a3f"}, -] - -[package.dependencies] -greenlet = {version = "!=0.4.17", markers = "platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\""} + {file = "SQLAlchemy-2.0.23-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:638c2c0b6b4661a4fd264f6fb804eccd392745c5887f9317feb64bb7cb03b3ea"}, + {file = "SQLAlchemy-2.0.23-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3b5036aa326dc2df50cba3c958e29b291a80f604b1afa4c8ce73e78e1c9f01d"}, + {file = "SQLAlchemy-2.0.23-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:787af80107fb691934a01889ca8f82a44adedbf5ef3d6ad7d0f0b9ac557e0c34"}, + {file = "SQLAlchemy-2.0.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c14eba45983d2f48f7546bb32b47937ee2cafae353646295f0e99f35b14286ab"}, + {file = "SQLAlchemy-2.0.23-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0666031df46b9badba9bed00092a1ffa3aa063a5e68fa244acd9f08070e936d3"}, + {file = "SQLAlchemy-2.0.23-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:89a01238fcb9a8af118eaad3ffcc5dedaacbd429dc6fdc43fe430d3a941ff965"}, + {file = "SQLAlchemy-2.0.23-cp310-cp310-win32.whl", hash = "sha256:cabafc7837b6cec61c0e1e5c6d14ef250b675fa9c3060ed8a7e38653bd732ff8"}, + {file = "SQLAlchemy-2.0.23-cp310-cp310-win_amd64.whl", hash = "sha256:87a3d6b53c39cd173990de2f5f4b83431d534a74f0e2f88bd16eabb5667e65c6"}, + {file = "SQLAlchemy-2.0.23-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d5578e6863eeb998980c212a39106ea139bdc0b3f73291b96e27c929c90cd8e1"}, + {file = "SQLAlchemy-2.0.23-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62d9e964870ea5ade4bc870ac4004c456efe75fb50404c03c5fd61f8bc669a72"}, + {file = "SQLAlchemy-2.0.23-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c80c38bd2ea35b97cbf7c21aeb129dcbebbf344ee01a7141016ab7b851464f8e"}, + {file = "SQLAlchemy-2.0.23-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75eefe09e98043cff2fb8af9796e20747ae870c903dc61d41b0c2e55128f958d"}, + {file = "SQLAlchemy-2.0.23-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd45a5b6c68357578263d74daab6ff9439517f87da63442d244f9f23df56138d"}, + {file = "SQLAlchemy-2.0.23-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a86cb7063e2c9fb8e774f77fbf8475516d270a3e989da55fa05d08089d77f8c4"}, + {file = "SQLAlchemy-2.0.23-cp311-cp311-win32.whl", hash = "sha256:b41f5d65b54cdf4934ecede2f41b9c60c9f785620416e8e6c48349ab18643855"}, + {file = "SQLAlchemy-2.0.23-cp311-cp311-win_amd64.whl", hash = "sha256:9ca922f305d67605668e93991aaf2c12239c78207bca3b891cd51a4515c72e22"}, + {file = "SQLAlchemy-2.0.23-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0f7fb0c7527c41fa6fcae2be537ac137f636a41b4c5a4c58914541e2f436b45"}, + {file = "SQLAlchemy-2.0.23-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7c424983ab447dab126c39d3ce3be5bee95700783204a72549c3dceffe0fc8f4"}, + {file = "SQLAlchemy-2.0.23-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f508ba8f89e0a5ecdfd3761f82dda2a3d7b678a626967608f4273e0dba8f07ac"}, + {file = "SQLAlchemy-2.0.23-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6463aa765cf02b9247e38b35853923edbf2f6fd1963df88706bc1d02410a5577"}, + {file = "SQLAlchemy-2.0.23-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e599a51acf3cc4d31d1a0cf248d8f8d863b6386d2b6782c5074427ebb7803bda"}, + {file = "SQLAlchemy-2.0.23-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd54601ef9cc455a0c61e5245f690c8a3ad67ddb03d3b91c361d076def0b4c60"}, + {file = "SQLAlchemy-2.0.23-cp312-cp312-win32.whl", hash = "sha256:42d0b0290a8fb0165ea2c2781ae66e95cca6e27a2fbe1016ff8db3112ac1e846"}, + {file = "SQLAlchemy-2.0.23-cp312-cp312-win_amd64.whl", hash = "sha256:227135ef1e48165f37590b8bfc44ed7ff4c074bf04dc8d6f8e7f1c14a94aa6ca"}, + {file = "SQLAlchemy-2.0.23-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:14aebfe28b99f24f8a4c1346c48bc3d63705b1f919a24c27471136d2f219f02d"}, + {file = "SQLAlchemy-2.0.23-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e983fa42164577d073778d06d2cc5d020322425a509a08119bdcee70ad856bf"}, + {file = "SQLAlchemy-2.0.23-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e0dc9031baa46ad0dd5a269cb7a92a73284d1309228be1d5935dac8fb3cae24"}, + {file = "SQLAlchemy-2.0.23-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5f94aeb99f43729960638e7468d4688f6efccb837a858b34574e01143cf11f89"}, + {file = "SQLAlchemy-2.0.23-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:63bfc3acc970776036f6d1d0e65faa7473be9f3135d37a463c5eba5efcdb24c8"}, + {file = "SQLAlchemy-2.0.23-cp37-cp37m-win32.whl", hash = "sha256:f48ed89dd11c3c586f45e9eec1e437b355b3b6f6884ea4a4c3111a3358fd0c18"}, + {file = "SQLAlchemy-2.0.23-cp37-cp37m-win_amd64.whl", hash = "sha256:1e018aba8363adb0599e745af245306cb8c46b9ad0a6fc0a86745b6ff7d940fc"}, + {file = "SQLAlchemy-2.0.23-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:64ac935a90bc479fee77f9463f298943b0e60005fe5de2aa654d9cdef46c54df"}, + {file = "SQLAlchemy-2.0.23-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c4722f3bc3c1c2fcc3702dbe0016ba31148dd6efcd2a2fd33c1b4897c6a19693"}, + {file = "SQLAlchemy-2.0.23-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4af79c06825e2836de21439cb2a6ce22b2ca129bad74f359bddd173f39582bf5"}, + {file = "SQLAlchemy-2.0.23-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:683ef58ca8eea4747737a1c35c11372ffeb84578d3aab8f3e10b1d13d66f2bc4"}, + {file = "SQLAlchemy-2.0.23-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d4041ad05b35f1f4da481f6b811b4af2f29e83af253bf37c3c4582b2c68934ab"}, + {file = "SQLAlchemy-2.0.23-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aeb397de65a0a62f14c257f36a726945a7f7bb60253462e8602d9b97b5cbe204"}, + {file = "SQLAlchemy-2.0.23-cp38-cp38-win32.whl", hash = "sha256:42ede90148b73fe4ab4a089f3126b2cfae8cfefc955c8174d697bb46210c8306"}, + {file = "SQLAlchemy-2.0.23-cp38-cp38-win_amd64.whl", hash = "sha256:964971b52daab357d2c0875825e36584d58f536e920f2968df8d581054eada4b"}, + {file = "SQLAlchemy-2.0.23-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:616fe7bcff0a05098f64b4478b78ec2dfa03225c23734d83d6c169eb41a93e55"}, + {file = "SQLAlchemy-2.0.23-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0e680527245895aba86afbd5bef6c316831c02aa988d1aad83c47ffe92655e74"}, + {file = "SQLAlchemy-2.0.23-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9585b646ffb048c0250acc7dad92536591ffe35dba624bb8fd9b471e25212a35"}, + {file = "SQLAlchemy-2.0.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4895a63e2c271ffc7a81ea424b94060f7b3b03b4ea0cd58ab5bb676ed02f4221"}, + {file = "SQLAlchemy-2.0.23-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cc1d21576f958c42d9aec68eba5c1a7d715e5fc07825a629015fe8e3b0657fb0"}, + {file = "SQLAlchemy-2.0.23-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:967c0b71156f793e6662dd839da54f884631755275ed71f1539c95bbada9aaab"}, + {file = "SQLAlchemy-2.0.23-cp39-cp39-win32.whl", hash = "sha256:0a8c6aa506893e25a04233bc721c6b6cf844bafd7250535abb56cb6cc1368884"}, + {file = "SQLAlchemy-2.0.23-cp39-cp39-win_amd64.whl", hash = "sha256:f3420d00d2cb42432c1d0e44540ae83185ccbbc67a6054dcc8ab5387add6620b"}, + {file = "SQLAlchemy-2.0.23-py3-none-any.whl", hash = "sha256:31952bbc527d633b9479f5f81e8b9dfada00b91d6baba021a869095f1a97006d"}, + {file = "SQLAlchemy-2.0.23.tar.gz", hash = "sha256:c1bda93cbbe4aa2aa0aa8655c5aeda505cd219ff3e8da91d1d329e143e4aff69"}, +] + +[package.dependencies] +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} typing-extensions = ">=4.2.0" [package.extras] -aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (!=0.4.17)"] +aioodbc = ["aioodbc", "greenlet (!=0.4.17)"] aiosqlite = ["aiosqlite", "greenlet (!=0.4.17)", "typing-extensions (!=3.10.0.1)"] asyncio = ["greenlet (!=0.4.17)"] asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (!=0.4.17)"] @@ -3458,7 +3623,7 @@ mssql-pyodbc = ["pyodbc"] mypy = ["mypy (>=0.910)"] mysql = ["mysqlclient (>=1.4.0)"] mysql-connector = ["mysql-connector-python"] -oracle = ["cx-oracle (>=7)"] +oracle = ["cx-oracle (>=8)"] oracle-oracledb = ["oracledb (>=1.0.1)"] postgresql = ["psycopg2 (>=2.7)"] postgresql-asyncpg = ["asyncpg", "greenlet (!=0.4.17)"] @@ -3629,25 +3794,25 @@ doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1 test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] [[package]] -name = "types-pyyaml" -version = "6.0.12.11" -description = "Typing stubs for PyYAML" +name = "types-python-dateutil" +version = "2.8.19.14" +description = "Typing stubs for python-dateutil" optional = false python-versions = "*" files = [ - {file = "types-PyYAML-6.0.12.11.tar.gz", hash = "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b"}, - {file = "types_PyYAML-6.0.12.11-py3-none-any.whl", hash = "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d"}, + {file = "types-python-dateutil-2.8.19.14.tar.gz", hash = "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b"}, + {file = "types_python_dateutil-2.8.19.14-py3-none-any.whl", hash = "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9"}, ] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] [[package]] @@ -3674,29 +3839,29 @@ files = [ [[package]] name = "urllib3" -version = "1.26.16" +version = "1.26.18" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, - {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "virtualenv" -version = "20.24.3" +version = "20.24.6" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.24.3-py3-none-any.whl", hash = "sha256:95a6e9398b4967fbcb5fef2acec5efaf9aa4972049d9ae41f95e0972a683fd02"}, - {file = "virtualenv-20.24.3.tar.gz", hash = "sha256:e5c3b4ce817b0b328af041506a2a299418c98747c4b1e68cb7527e74ced23efc"}, + {file = "virtualenv-20.24.6-py3-none-any.whl", hash = "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381"}, + {file = "virtualenv-20.24.6.tar.gz", hash = "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"}, ] [package.dependencies] @@ -3705,7 +3870,7 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<4" [package.extras] -docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "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]] @@ -3725,29 +3890,29 @@ testing = ["coverage (>=5.0)", "pytest", "pytest-cover"] [[package]] name = "websocket-client" -version = "1.6.1" +version = "1.6.4" description = "WebSocket client for Python with low level API options" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, + {file = "websocket-client-1.6.4.tar.gz", hash = "sha256:b3324019b3c28572086c4a319f91d1dcd44e6e11cd340232978c684a7650d0df"}, + {file = "websocket_client-1.6.4-py3-none-any.whl", hash = "sha256:084072e0a7f5f347ef2ac3d8698a5e0b4ffbfcab607628cadabc650fc9a83a24"}, ] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] [[package]] name = "werkzeug" -version = "2.3.7" +version = "3.0.1" description = "The comprehensive WSGI web application library." optional = true python-versions = ">=3.8" files = [ - {file = "werkzeug-2.3.7-py3-none-any.whl", hash = "sha256:effc12dba7f3bd72e605ce49807bbe692bd729c3bb122a3b91747a6ae77df528"}, - {file = "werkzeug-2.3.7.tar.gz", hash = "sha256:2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8"}, + {file = "werkzeug-3.0.1-py3-none-any.whl", hash = "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10"}, + {file = "werkzeug-3.0.1.tar.gz", hash = "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc"}, ] [package.dependencies] @@ -3758,13 +3923,13 @@ watchdog = ["watchdog (>=2.3)"] [[package]] name = "wheel" -version = "0.41.1" +version = "0.41.3" description = "A built-package format for Python" optional = false python-versions = ">=3.7" files = [ - {file = "wheel-0.41.1-py3-none-any.whl", hash = "sha256:473219bd4cbedc62cea0cb309089b593e47c15c4a2531015f94e4e3b9a0f6981"}, - {file = "wheel-0.41.1.tar.gz", hash = "sha256:12b911f083e876e10c595779709f8a88a59f45aacc646492a67fe9ef796c1b47"}, + {file = "wheel-0.41.3-py3-none-any.whl", hash = "sha256:488609bc63a29322326e05560731bf7bfea8e48ad646e1f5e40d366607de0942"}, + {file = "wheel-0.41.3.tar.gz", hash = "sha256:4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841"}, ] [package.extras] @@ -3772,86 +3937,81 @@ test = ["pytest (>=6.0.0)", "setuptools (>=65)"] [[package]] name = "wrapt" -version = "1.15.0" +version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, - {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, - {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, - {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, - {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, - {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, - {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, - {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, - {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, - {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, - {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, - {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, - {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, - {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, - {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, - {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, - {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, - {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, - {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, - {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, - {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, - {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, - {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, - {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, - {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, - {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, - {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, - {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, - {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, - {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, - {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, - {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, - {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, - {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, - {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, - {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, - {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, - {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, + {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, + {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, + {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, + {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, + {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, + {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, + {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, + {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, + {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, + {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, + {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, + {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, + {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, + {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, + {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, + {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, + {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, + {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, + {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, + {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, + {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, + {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, + {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, + {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, + {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, + {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, + {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, + {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, + {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, + {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, + {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, + {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, + {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, + {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, + {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, + {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] [[package]] @@ -3943,17 +4103,17 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [extras] @@ -3962,4 +4122,4 @@ mlflow = ["kedro-mlflow"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.11" -content-hash = "782757aec766a99afea52e91cc0f669118da8c934b690cb6995d00581b86c331" +content-hash = "ac8076a1f32c945ebf19d702454fabd2a166869da28ec71e232c884cd9760500" diff --git a/pyproject.toml b/pyproject.toml index afb7861..5c8bb62 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,10 +32,10 @@ exclude_lines = [ known_third_party = ["click","google","kedro","kfp","kubernetes","tabulate", "pydantic","semver","setuptools"] [tool.poetry.dependencies] -python = ">=3.8,<3.11" +python = ">=3.8,<3.11" # waiting for newest kedro-mlflow to bump to <3.12 kedro = ">=0.18.8,<0.19.0" click = ">=8.0.4" -kfp = ">=1.8.12,<2.0" +kfp = ">=1.8.21,<2.0" tabulate = ">=0.8.7" semver = ">=2.10,<4.0.0" pydantic = ">=1.9.0,<2.0.0" From 0cdbe04256bee8fdb339881e31056dcaa4a8a8db Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Thu, 9 Nov 2023 17:26:25 +0100 Subject: [PATCH 02/37] fix: Fixed potential issues with MRO/inheritance in context class --- kedro_vertexai/auth/mlflow_request_header_provider.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kedro_vertexai/auth/mlflow_request_header_provider.py b/kedro_vertexai/auth/mlflow_request_header_provider.py index 7cf4b87..fc9a7af 100644 --- a/kedro_vertexai/auth/mlflow_request_header_provider.py +++ b/kedro_vertexai/auth/mlflow_request_header_provider.py @@ -1,5 +1,5 @@ import logging -from abc import ABC +from abc import ABCMeta from typing import Any, Dict, Optional from kedro.framework.context import KedroContext @@ -22,7 +22,7 @@ def safe_import_mlflow(): mlflow, RequestHeaderProvider = safe_import_mlflow() -class RequestHeaderProviderWithKedroContext(RequestHeaderProvider, ABC): +class RequestHeaderProviderWithKedroContext(RequestHeaderProvider, metaclass=ABCMeta): def __init__(self, kedro_context: KedroContext, **kwargs): self.kedro_context = kedro_context self.params: Optional[Dict[str, Any]] = kwargs From fcf20719de10f59c71d2c4635137925ed41ca72e Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Thu, 9 Nov 2023 17:27:03 +0100 Subject: [PATCH 03/37] refactor: simplified error handling for getting config from context that should also be futureproof with omegaconf --- kedro_vertexai/context_helper.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/kedro_vertexai/context_helper.py b/kedro_vertexai/context_helper.py index 168c021..f625117 100644 --- a/kedro_vertexai/context_helper.py +++ b/kedro_vertexai/context_helper.py @@ -17,6 +17,7 @@ from .constants import KEDRO_GLOBALS_PATTERN +# FIXME: remove once updated to 0.19 class EnvTemplatedConfigLoader(TemplatedConfigLoader): """Config loader that can substitute $(commit_id) and $(branch_name) placeholders with information taken from env variables.""" @@ -100,19 +101,19 @@ def _ensure_obj_is_dict(self, obj): def config(self) -> PluginConfig: cl: AbstractConfigLoader = self.context.config_loader try: - obj = self.context.config_loader.get(self.CONFIG_FILE_PATTERN) - except: # noqa - obj = None - - if obj is None: - try: - obj = self._ensure_obj_is_dict( - self.context.config_loader[self.CONFIG_KEY] + if self.CONFIG_KEY not in cl.config_patterns.keys(): + cl.config_patterns.update( + { + self.CONFIG_KEY: [ + self.CONFIG_FILE_PATTERN, + f"{self.CONFIG_FILE_PATTERN}/**", + ] + } ) - except (KeyError, MissingConfigException): - obj = None - - if obj is None: + vertex_conf = self._ensure_obj_is_dict( + self.context.config_loader.get(self.CONFIG_KEY) + ) + except MissingConfigException: if not isinstance(cl, ConfigLoader): raise ValueError( f"You're using a custom config loader: {cl.__class__.__qualname__}{os.linesep}" @@ -130,7 +131,7 @@ def config(self) -> PluginConfig: raise ValueError( "Missing vertexai.yml files in configuration. Make sure that you configure your project first" ) - return PluginConfig.parse_obj(obj) + return PluginConfig.parse_obj(vertex_conf) @cached_property def vertexai_client(self) -> VertexAIPipelinesClient: From 6bc8f44dc401e458a516a41e52bf27b93b769540 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 10 Nov 2023 12:58:10 +0100 Subject: [PATCH 04/37] tests: added test case for missing config pattern --- tests/test_context_helper.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/test_context_helper.py b/tests/test_context_helper.py index 840a21c..75233f2 100644 --- a/tests/test_context_helper.py +++ b/tests/test_context_helper.py @@ -69,15 +69,16 @@ def test_config_with_omegaconf(self): metadata = Mock() metadata.package_name = "test_package" - session = MagicMock() - session.load_context().config_loader = OmegaConfigLoader( - str(tmp_dir / "conf"), - config_patterns={"vertexai": ["vertexai*"]}, - default_run_env="local", - ) - with patch.object(KedroSession, "create", return_value=session): - helper = ContextHelper.init(metadata, "test") - assert helper.config == cfg + for config_pattern in [{}, {"vertexai": ["vertexai*"]}]: + session = MagicMock() + session.load_context().config_loader = OmegaConfigLoader( + str(tmp_dir / "conf"), + config_patterns=config_pattern, + default_run_env="local", + ) + with patch.object(KedroSession, "create", return_value=session): + helper = ContextHelper.init(metadata, "test") + assert helper.config == cfg @unittest.expectedFailure def test_config_empty(self): From b5a4cb5852351d91b5c797d3645cc633bdceb150 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 10 Nov 2023 13:00:43 +0100 Subject: [PATCH 05/37] changelog update --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc5cf5b..7cc54a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +- Updated dependencies and tested for kedro `0.18.14` + ## [0.9.1] - 2023-08-16 - Updated dependencies of kedro to `0.18.8`, mlflow to `2.3.2` and others From c3904efd1a40256fbe53d5370cb1c623cd6252dd Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Mon, 13 Nov 2023 12:59:30 +0100 Subject: [PATCH 06/37] dependencies: updated github actions versions because of deprecation warnings --- .github/workflows/prepare-release.yml | 4 ++-- .github/workflows/spellcheck.yml | 4 ++-- .github/workflows/test_and_publish.yml | 20 ++++++++++---------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 8d3b55b..5c54916 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -17,9 +17,9 @@ jobs: env: PYTHON_PACKAGE: kedro_vertexai steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v4.7.1 with: python-version: ${{ matrix.python-version }} - name: Validate inputs diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index c8f0894..5b6139d 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -15,6 +15,6 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Spellcheck - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: rojopolis/spellcheck-github-actions@0.25.0 - name: Spellcheck \ No newline at end of file + name: Spellcheck diff --git a/.github/workflows/test_and_publish.yml b/.github/workflows/test_and_publish.yml index 96db249..dbbf3c7 100644 --- a/.github/workflows/test_and_publish.yml +++ b/.github/workflows/test_and_publish.yml @@ -21,10 +21,10 @@ jobs: python-version: [ '3.8', '3.9', '3.10'] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup python ${{ matrix.python-version }} - uses: actions/setup-python@v2.2.1 + uses: actions/setup-python@v4.7.1 with: python-version: ${{ matrix.python-version }} @@ -55,7 +55,7 @@ jobs: needs: unit_tests steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -82,7 +82,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL @@ -100,10 +100,10 @@ jobs: runs-on: ubuntu-latest needs: [unit_tests, sonarcloud] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Setup python - uses: actions/setup-python@v2.2.1 + uses: actions/setup-python@v4.7.1 with: python-version: 3.8 @@ -143,7 +143,7 @@ jobs: mv ../tests/e2e/vertexai.yml conf/base/vertexai.yml - name: Prepare docker env - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v3 id: buildx with: install: true @@ -161,7 +161,7 @@ jobs: dst: gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:latest - name: Set up GCP Credentials - uses: google-github-actions/auth@v0.6.0 + uses: google-github-actions/auth@v1.1.1 with: credentials_json: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} create_credentials_file: true @@ -180,11 +180,11 @@ jobs: PYTHON_PACKAGE: kedro_vertexai steps: - name: Checkout the repo - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 0 # necessary to enable merging, all the history is needed - name: Set up Python 3.8 - uses: actions/setup-python@v1 + uses: actions/setup-python@v4.7.1 with: python-version: "3.8" - name: Build package dist from source # A better way will be : https://packaging.python.org/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/ but pep 517 is still marked as experimental From 00d16ce3dacd250a8d29de7325e4bdde50a6584a Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Mon, 13 Nov 2023 14:43:12 +0100 Subject: [PATCH 07/37] dependencies: pyarrow vulnerability fix --- CHANGELOG.md | 1 + poetry.lock | 713 +++++++------------------------------------------ pyproject.toml | 1 + 3 files changed, 103 insertions(+), 612 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7cc54a9..1a94f58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## [Unreleased] +- Added explicite pyarrow dependency to avoid critical vulnerability - Updated dependencies and tested for kedro `0.18.14` ## [0.9.1] - 2023-08-16 diff --git a/poetry.lock b/poetry.lock index 421c9b0..2242b6e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -461,77 +461,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "contourpy" -version = "1.1.1" -description = "Python library for calculating contours of 2D quadrilateral grids" -optional = true -python-versions = ">=3.8" -files = [ - {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"}, - {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"}, - {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"}, - {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"}, - {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"}, - {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"}, - {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"}, - {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"}, - {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"}, - {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"}, - {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"}, - {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"}, - {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"}, - {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"}, - {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"}, - {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"}, - {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"}, - {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"}, - {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"}, - {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"}, - {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"}, - {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"}, - {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"}, - {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"}, - {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"}, - {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"}, - {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"}, - {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"}, - {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"}, - {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"}, - {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"}, - {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"}, - {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"}, - {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"}, - {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"}, - {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"}, - {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"}, -] - -[package.dependencies] -numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} - -[package.extras] -bokeh = ["bokeh", "selenium"] -docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"] -test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] -test-no-images = ["pytest", "pytest-cov", "wurlitzer"] - [[package]] name = "cookiecutter" version = "2.4.0" @@ -620,21 +549,6 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] -[[package]] -name = "cycler" -version = "0.12.1" -description = "Composable style cycles" -optional = true -python-versions = ">=3.8" -files = [ - {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, - {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, -] - -[package.extras] -docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] -tests = ["pytest", "pytest-cov", "pytest-xdist"] - [[package]] name = "databricks-cli" version = "0.18.0" @@ -825,71 +739,6 @@ Werkzeug = ">=3.0.0" async = ["asgiref (>=3.2)"] dotenv = ["python-dotenv"] -[[package]] -name = "fonttools" -version = "4.44.0" -description = "Tools to manipulate font files" -optional = true -python-versions = ">=3.8" -files = [ - {file = "fonttools-4.44.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1cd1c6bb097e774d68402499ff66185190baaa2629ae2f18515a2c50b93db0c"}, - {file = "fonttools-4.44.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b9eab7f9837fdaa2a10a524fbcc2ec24bf60637c044b6e4a59c3f835b90f0fae"}, - {file = "fonttools-4.44.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f412954275e594f7a51c16f3b3edd850acb0d842fefc33856b63a17e18499a5"}, - {file = "fonttools-4.44.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50d25893885e80a5955186791eed5579f1e75921751539cc1dc3ffd1160b48cf"}, - {file = "fonttools-4.44.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:22ea8aa7b3712450b42b044702bd3a64fd118006bad09a6f94bd1b227088492e"}, - {file = "fonttools-4.44.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:df40daa6c03b98652ffe8110ae014fe695437f6e1cb5a07e16ea37f40e73ac86"}, - {file = "fonttools-4.44.0-cp310-cp310-win32.whl", hash = "sha256:bca49da868e8bde569ef36f0cc1b6de21d56bf9c3be185c503b629c19a185287"}, - {file = "fonttools-4.44.0-cp310-cp310-win_amd64.whl", hash = "sha256:dbac86d83d96099890e731cc2af97976ff2c98f4ba432fccde657c5653a32f1c"}, - {file = "fonttools-4.44.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e8ff7d19a6804bfd561cfcec9b4200dd1788e28f7de4be70189801530c47c1b3"}, - {file = "fonttools-4.44.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a8a1fa9a718de0bc026979c93e1e9b55c5efde60d76f91561fd713387573817d"}, - {file = "fonttools-4.44.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05064f95aacdfc06f21e55096c964b2228d942b8675fa26995a2551f6329d2d"}, - {file = "fonttools-4.44.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31b38528f25bc662401e6ffae14b3eb7f1e820892fd80369a37155e3b636a2f4"}, - {file = "fonttools-4.44.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:05d7c4d2c95b9490e669f3cb83918799bf1c838619ac6d3bad9ea017cfc63f2e"}, - {file = "fonttools-4.44.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6999e80a125b0cd8e068d0210b63323f17338038c2ecd2e11b9209ec430fe7f2"}, - {file = "fonttools-4.44.0-cp311-cp311-win32.whl", hash = "sha256:a7aec7f5d14dfcd71fb3ebc299b3f000c21fdc4043079101777ed2042ba5b7c5"}, - {file = "fonttools-4.44.0-cp311-cp311-win_amd64.whl", hash = "sha256:518a945dbfe337744bfff31423c1430303b8813c5275dffb0f2577f0734a1189"}, - {file = "fonttools-4.44.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:59b6ad83cce067d10f4790c037a5904424f45bebb5e7be2eb2db90402f288267"}, - {file = "fonttools-4.44.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c2de1fb18198acd400c45ffe2aef5420c8d55fde903e91cba705596099550f3b"}, - {file = "fonttools-4.44.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f308b7a8d28208d54315d11d35f9888d6d607673dd4d42d60b463682ee0400"}, - {file = "fonttools-4.44.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66bc6efd829382f7a7e6cf33c2fb32b13edc8a239eb15f32acbf197dce7a0165"}, - {file = "fonttools-4.44.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a8b99713d3a0d0e876b6aecfaada5e7dc9fe979fcd90ef9fa0ba1d9b9aed03f2"}, - {file = "fonttools-4.44.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b63da598d9cbc52e2381f922da0e94d60c0429f92207bd3fb04d112fc82ea7cb"}, - {file = "fonttools-4.44.0-cp312-cp312-win32.whl", hash = "sha256:f611c97678604e302b725f71626edea113a5745a7fb557c958b39edb6add87d5"}, - {file = "fonttools-4.44.0-cp312-cp312-win_amd64.whl", hash = "sha256:58af428746fa73a2edcbf26aff33ac4ef3c11c8d75bb200eaea2f7e888d2de4e"}, - {file = "fonttools-4.44.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9ee8692e23028564c13d924004495f284df8ac016a19f17a87251210e1f1f928"}, - {file = "fonttools-4.44.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dab3d00d27b1a79ae4d4a240e8ceea8af0ff049fd45f05adb4f860d93744110d"}, - {file = "fonttools-4.44.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f53526668beccdb3409c6055a4ffe50987a7f05af6436fa55d61f5e7bd450219"}, - {file = "fonttools-4.44.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3da036b016c975c2d8c69005bdc4d5d16266f948a7fab950244e0f58301996a"}, - {file = "fonttools-4.44.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b99fe8ef4093f672d00841569d2d05691e50334d79f4d9c15c1265d76d5580d2"}, - {file = "fonttools-4.44.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d16d9634ff1e5cea2cf4a8cbda9026f766e4b5f30b48f8180f0e99133d3abfc"}, - {file = "fonttools-4.44.0-cp38-cp38-win32.whl", hash = "sha256:3d29509f6e05e8d725db59c2d8c076223d793e4e35773040be6632a0349f2f97"}, - {file = "fonttools-4.44.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4fa4f4bc8fd86579b8cdbe5e948f35d82c0eda0091c399d009b2a5a6b61c040"}, - {file = "fonttools-4.44.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c794de4086f06ae609b71ac944ec7deb09f34ecf73316fddc041087dd24bba39"}, - {file = "fonttools-4.44.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2db63941fee3122e31a21dd0f5b2138ce9906b661a85b63622421d3654a74ae2"}, - {file = "fonttools-4.44.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb01c49c8aa035d5346f46630209923d4927ed15c2493db38d31da9f811eb70d"}, - {file = "fonttools-4.44.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46c79af80a835410874683b5779b6c1ec1d5a285e11c45b5193e79dd691eb111"}, - {file = "fonttools-4.44.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b6e6aa2d066f8dafd06d8d0799b4944b5d5a1f015dd52ac01bdf2895ebe169a0"}, - {file = "fonttools-4.44.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:63a3112f753baef8c6ac2f5f574bb9ac8001b86c8c0c0380039db47a7f512d20"}, - {file = "fonttools-4.44.0-cp39-cp39-win32.whl", hash = "sha256:54efed22b2799a85475e6840e907c402ba49892c614565dc770aa97a53621b2b"}, - {file = "fonttools-4.44.0-cp39-cp39-win_amd64.whl", hash = "sha256:2e91e19b583961979e2e5a701269d3cfc07418963bee717f8160b0a24332826b"}, - {file = "fonttools-4.44.0-py3-none-any.whl", hash = "sha256:b9beb0fa6ff3ea808ad4a6962d68ac0f140ddab080957b20d9e268e4d67fb335"}, - {file = "fonttools-4.44.0.tar.gz", hash = "sha256:4e90dd81b6e0d97ebfe52c0d12a17a9ef7f305d6bfbb93081265057d6092f252"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] -graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "scipy"] -lxml = ["lxml (>=4.0,<5)"] -pathops = ["skia-pathops (>=0.5.0)"] -plot = ["matplotlib"] -repacker = ["uharfbuzz (>=0.23.0)"] -symfont = ["sympy"] -type1 = ["xattr"] -ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.1.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] - [[package]] name = "frozenlist" version = "1.4.0" @@ -1052,13 +901,13 @@ test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre [[package]] name = "google-api-core" -version = "2.13.0" +version = "2.14.0" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-core-2.13.0.tar.gz", hash = "sha256:abc1da067c9026c6cd15dfbd4f6ad07735a62eeadc541d1cc296314447fc3aad"}, - {file = "google_api_core-2.13.0-py3-none-any.whl", hash = "sha256:44ed591f6c3a0c1ac7a91867d2b3841f92839f860f3d3fe26c464dbd50f97094"}, + {file = "google-api-core-2.14.0.tar.gz", hash = "sha256:5368a4502b793d9bbf812a5912e13e4e69f9bd87f6efb508460c43f5bbd1ce41"}, + {file = "google_api_core-2.14.0-py3-none-any.whl", hash = "sha256:de2fb50ed34d47ddbb2bd2dcf680ee8fead46279f4ed6b16de362aca23a18952"}, ] [package.dependencies] @@ -1634,17 +1483,6 @@ files = [ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] -[[package]] -name = "joblib" -version = "1.3.2" -description = "Lightweight pipelining with Python functions" -optional = true -python-versions = ">=3.7" -files = [ - {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, - {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, -] - [[package]] name = "jsonschema" version = "4.19.2" @@ -1860,119 +1698,6 @@ python-dateutil = "*" six = ">=1.10" urllib3 = ">=1.15" -[[package]] -name = "kiwisolver" -version = "1.4.5" -description = "A fast implementation of the Cassowary constraint solver" -optional = true -python-versions = ">=3.7" -files = [ - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, - {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, - {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, - {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, - {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, - {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, - {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, - {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, - {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, - {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, - {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, - {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, - {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, - {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, - {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, - {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, - {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, - {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, - {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, - {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, - {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, - {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, - {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, - {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, -] - [[package]] name = "kubernetes" version = "25.3.0" @@ -2018,24 +1743,6 @@ babel = ["Babel"] lingua = ["lingua"] testing = ["pytest"] -[[package]] -name = "markdown" -version = "3.5.1" -description = "Python implementation of John Gruber's Markdown." -optional = true -python-versions = ">=3.8" -files = [ - {file = "Markdown-3.5.1-py3-none-any.whl", hash = "sha256:5874b47d4ee3f0b14d764324d2c94c03ea66bee56f2d929da9f2508d65e722dc"}, - {file = "Markdown-3.5.1.tar.gz", hash = "sha256:b65d7beb248dc22f2e8a31fb706d93798093c308dc1aba295aedeb9d41a813bd"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] -testing = ["coverage", "pyyaml"] - [[package]] name = "markdown-it-py" version = "3.0.0" @@ -2119,75 +1826,6 @@ files = [ {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] -[[package]] -name = "matplotlib" -version = "3.7.3" -description = "Python plotting package" -optional = true -python-versions = ">=3.8" -files = [ - {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:085c33b27561d9c04386789d5aa5eb4a932ddef43cfcdd0e01735f9a6e85ce0c"}, - {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c568e80e1c17f68a727f30f591926751b97b98314d8e59804f54f86ae6fa6a22"}, - {file = "matplotlib-3.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7baf98c5ad59c5c4743ea884bb025cbffa52dacdfdac0da3e6021a285a90377e"}, - {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:236024f582e40dac39bca592258888b38ae47a9fed7b8de652d68d3d02d47d2b"}, - {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12b4f6795efea037ce2d41e7c417ad8bd02d5719c6ad4a8450a0708f4a1cfb89"}, - {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b2136cc6c5415b78977e0e8c608647d597204b05b1d9089ccf513c7d913733"}, - {file = "matplotlib-3.7.3-cp310-cp310-win32.whl", hash = "sha256:122dcbf9be0086e2a95d9e5e0632dbf3bd5b65eaa68c369363310a6c87753059"}, - {file = "matplotlib-3.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:4aab27d9e33293389e3c1d7c881d414a72bdfda0fedc3a6bf46c6fa88d9b8015"}, - {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:d5adc743de91e8e0b13df60deb1b1c285b8effea3d66223afceb14b63c9b05de"}, - {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:55de4cf7cd0071b8ebf203981b53ab64f988a0a1f897a2dff300a1124e8bcd8b"}, - {file = "matplotlib-3.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac03377fd908aaee2312d0b11735753e907adb6f4d1d102de5e2425249693f6c"}, - {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:755bafc10a46918ce9a39980009b54b02dd249594e5adf52f9c56acfddb5d0b7"}, - {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a6094c6f8e8d18db631754df4fe9a34dec3caf074f6869a7db09f18f9b1d6b2"}, - {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:272dba2f1b107790ed78ebf5385b8d14b27ad9e90419de340364b49fe549a993"}, - {file = "matplotlib-3.7.3-cp311-cp311-win32.whl", hash = "sha256:591c123bed1cb4b9996fb60b41a6d89c2ec4943244540776c5f1283fb6960a53"}, - {file = "matplotlib-3.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:3bf3a178c6504694cee8b88b353df0051583f2f6f8faa146f67115c27c856881"}, - {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_universal2.whl", hash = "sha256:edf54cac8ee3603f3093616b40a931e8c063969756a4d78a86e82c2fea9659f7"}, - {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:91e36a85ea639a1ba9f91427041eac064b04829945fe331a92617b6cb21d27e5"}, - {file = "matplotlib-3.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:caf5eaaf7c68f8d7df269dfbcaf46f48a70ff482bfcebdcc97519671023f2a7d"}, - {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74bf57f505efea376097e948b7cdd87191a7ce8180616390aef496639edf601f"}, - {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee152a88a0da527840a426535514b6ed8ac4240eb856b1da92cf48124320e346"}, - {file = "matplotlib-3.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:67a410a9c9e07cbc83581eeea144bbe298870bf0ac0ee2f2e10a015ab7efee19"}, - {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:259999c05285cb993d7f2a419cea547863fa215379eda81f7254c9e932963729"}, - {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3f4e7fd5a6157e1d018ce2166ec8e531a481dd4a36f035b5c23edfe05a25419a"}, - {file = "matplotlib-3.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:faa3d12d8811d08d14080a8b7b9caea9a457dc495350166b56df0db4b9909ef5"}, - {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:336e88900c11441e458da01c8414fc57e04e17f9d3bb94958a76faa2652bcf6b"}, - {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:12f4c0dd8aa280d796c8772ea8265a14f11a04319baa3a16daa5556065e8baea"}, - {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990955b11e7918d256cf3b956b10997f405b7917a3f1c7d8e69c1d15c7b1930"}, - {file = "matplotlib-3.7.3-cp38-cp38-win32.whl", hash = "sha256:e78707b751260b42b721507ad7aa60fe4026d7f51c74cca6b9cd8b123ebb633a"}, - {file = "matplotlib-3.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:e594ee43c59ea39ca5c6244667cac9d017a3527febc31f5532ad9135cf7469ec"}, - {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6eaa1cf0e94c936a26b78f6d756c5fbc12e0a58c8a68b7248a2a31456ce4e234"}, - {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0a97af9d22e8ebedc9f00b043d9bbd29a375e9e10b656982012dded44c10fd77"}, - {file = "matplotlib-3.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f9c6c16597af660433ab330b59ee2934b832ee1fabcaf5cbde7b2add840f31e"}, - {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7240259b4b9cbc62381f6378cff4d57af539162a18e832c1e48042fabc40b6b"}, - {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:747c6191d2e88ae854809e69aa358dbf852ff1a5738401b85c1cc9012309897a"}, - {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec726b08a5275d827aa91bb951e68234a4423adb91cf65bc0fcdc0f2777663f7"}, - {file = "matplotlib-3.7.3-cp39-cp39-win32.whl", hash = "sha256:40e3b9b450c6534f07278310c4e34caff41c2a42377e4b9d47b0f8d3ac1083a2"}, - {file = "matplotlib-3.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfc118642903a23e309b1da32886bb39a4314147d013e820c86b5fb4cb2e36d0"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:165c8082bf8fc0360c24aa4724a22eaadbfd8c28bf1ccf7e94d685cad48261e4"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebd8470cc2a3594746ff0513aecbfa2c55ff6f58e6cef2efb1a54eb87c88ffa2"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7153453669c9672b52095119fd21dd032d19225d48413a2871519b17db4b0fde"}, - {file = "matplotlib-3.7.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:498a08267dc69dd8f24c4b5d7423fa584d7ce0027ba71f7881df05fc09b89bb7"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48999c4b19b5a0c058c9cd828ff6fc7748390679f6cf9a2ad653a3e802c87d3"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22d65d18b4ee8070a5fea5761d59293f1f9e2fac37ec9ce090463b0e629432fd"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c40cde976c36693cc0767e27cf5f443f91c23520060bd9496678364adfafe9c"}, - {file = "matplotlib-3.7.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:39018a2b17592448fbfdf4b8352955e6c3905359939791d4ff429296494d1a0c"}, - {file = "matplotlib-3.7.3.tar.gz", hash = "sha256:f09b3dd6bdeb588de91f853bbb2d6f0ff8ab693485b0c49035eaa510cb4f142e"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} -kiwisolver = ">=1.0.1" -numpy = ">=1.20,<2" -packaging = ">=20.0" -pillow = ">=6.2.0" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" -setuptools_scm = ">=7" - [[package]] name = "mdurl" version = "0.1.2" @@ -2201,55 +1839,45 @@ files = [ [[package]] name = "mlflow" -version = "2.8.0" +version = "1.27.0" description = "MLflow: A Platform for ML Development and Productionization" optional = true -python-versions = ">=3.8" +python-versions = ">=3.7" files = [ - {file = "mlflow-2.8.0-py3-none-any.whl", hash = "sha256:c336c547a508b087a2fe5fb995fe6ce2c0bbe94b60340dda8dee3317f64b02e5"}, - {file = "mlflow-2.8.0.tar.gz", hash = "sha256:75bdc7768ba950aa5c98dd4792a74ec372a4ac2b86d714ee565af18ebede4524"}, + {file = "mlflow-1.27.0-py3-none-any.whl", hash = "sha256:d759f3eefad2ff509a0fbc10507224204c6f6bb8d7f437bbf0bb9961cf74ff95"}, + {file = "mlflow-1.27.0.tar.gz", hash = "sha256:6a1e34d6be266725e41d4547572a8425d86d6623e1c8888cf3f22b90019be0aa"}, ] [package.dependencies] -alembic = "<1.10.0 || >1.10.0,<2" -click = ">=7.0,<9" -cloudpickle = "<3" -databricks-cli = ">=0.8.7,<1" -docker = ">=4.0.0,<7" -entrypoints = "<1" -Flask = "<4" -gitpython = ">=2.1.0,<4" -gunicorn = {version = "<22", markers = "platform_system != \"Windows\""} -importlib-metadata = ">=3.7.0,<4.7.0 || >4.7.0,<7" -Jinja2 = [ - {version = ">=2.11,<4", markers = "platform_system != \"Windows\""}, - {version = ">=3.0,<4", markers = "platform_system == \"Windows\""}, -] -markdown = ">=3.3,<4" -matplotlib = "<4" -numpy = "<2" -packaging = "<24" -pandas = "<3" -protobuf = ">=3.12.0,<5" -psutil = "<6" -pyarrow = ">=4.0.0,<14" -pytz = "<2024" -pyyaml = ">=5.1,<7" -querystring-parser = "<2" -requests = ">=2.17.3,<3" -scikit-learn = "<2" -scipy = "<2" -sqlalchemy = ">=1.4.0,<3" -sqlparse = ">=0.4.0,<1" -waitress = {version = "<3", markers = "platform_system == \"Windows\""} +alembic = "*" +click = ">=7.0" +cloudpickle = "*" +databricks-cli = ">=0.8.7" +docker = ">=4.0.0" +entrypoints = "*" +Flask = "*" +gitpython = ">=2.1.0" +gunicorn = {version = "*", markers = "platform_system != \"Windows\""} +importlib-metadata = ">=3.7.0,<4.7.0 || >4.7.0" +numpy = "*" +packaging = "*" +pandas = "*" +prometheus-flask-exporter = "*" +protobuf = ">=3.12.0" +pytz = "*" +pyyaml = ">=5.1" +querystring-parser = "*" +requests = ">=2.17.3" +scipy = "*" +sqlalchemy = ">=1.4.0" +sqlparse = ">=0.3.1" +waitress = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] aliyun-oss = ["aliyunstoreplugin"] -databricks = ["azure-storage-file-datalake (>12)", "boto3 (>1)", "google-cloud-storage (>=1.30.0)"] -extras = ["azureml-core (>=1.2.0)", "boto3", "google-cloud-storage (>=1.30.0)", "kubernetes", "mlserver (>=1.2.0,!=1.3.1)", "mlserver-mlflow (>=1.2.0,!=1.3.1)", "prometheus-flask-exporter", "pyarrow", "pysftp", "requests-auth-aws-sigv4", "virtualenv"] -gateway = ["aiohttp (<4)", "boto3 (>=1.28.56,<2)", "fastapi (<1)", "pydantic (>=1.0,<3)", "uvicorn[standard] (<1)", "watchfiles (<1)"] +extras = ["azureml-core (>=1.2.0)", "boto3", "google-cloud-storage (>=1.30.0)", "kubernetes", "mlserver (>=0.5.3)", "mlserver-mlflow (>=0.5.3)", "pyarrow", "pysftp", "scikit-learn", "virtualenv"] +pipelines = ["Jinja2 (>=3.0)", "ipython (>=7.0)", "markdown (>=3.3)", "pandas-profiling (>=3.1)", "pyarrow (>=7.0)", "scikit-learn (>=1.0)", "shap (>=0.40)"] sqlserver = ["mlflow-dbstore"] -xethub = ["mlflow-xethub"] [[package]] name = "more-itertools" @@ -2363,7 +1991,7 @@ setuptools = "*" name = "numpy" version = "1.24.4" description = "Fundamental package for array computing in Python" -optional = true +optional = false python-versions = ">=3.8" files = [ {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, @@ -2515,73 +2143,6 @@ files = [ {file = "parse-1.19.1.tar.gz", hash = "sha256:cc3a47236ff05da377617ddefa867b7ba983819c664e1afe46249e5b469be464"}, ] -[[package]] -name = "pillow" -version = "10.1.0" -description = "Python Imaging Library (Fork)" -optional = true -python-versions = ">=3.8" -files = [ - {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, - {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, - {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, - {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, - {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, - {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, - {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, - {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, - {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, - {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, - {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, - {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, - {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, - {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, - {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, - {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, - {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, - {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, - {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, - {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, - {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, - {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, - {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, - {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] - [[package]] name = "pip" version = "23.3.1" @@ -2676,6 +2237,35 @@ pyyaml = ">=5.1" toml = "*" virtualenv = ">=20.0.8" +[[package]] +name = "prometheus-client" +version = "0.18.0" +description = "Python client for the Prometheus monitoring system." +optional = true +python-versions = ">=3.8" +files = [ + {file = "prometheus_client-0.18.0-py3-none-any.whl", hash = "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184"}, + {file = "prometheus_client-0.18.0.tar.gz", hash = "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prometheus-flask-exporter" +version = "0.23.0" +description = "Prometheus metrics exporter for Flask" +optional = true +python-versions = "*" +files = [ + {file = "prometheus_flask_exporter-0.23.0-py3-none-any.whl", hash = "sha256:7a026b4fdd54ebeddb77589333efe3a1ec43c7c717468825b0b3e9b6c33f7e9e"}, + {file = "prometheus_flask_exporter-0.23.0.tar.gz", hash = "sha256:e4e6beb1b8e1e164da6d70fe1edefc95ef184f113b5047f66f4b7262233da9c0"}, +] + +[package.dependencies] +flask = "*" +prometheus-client = "*" + [[package]] name = "proto-plus" version = "1.22.3" @@ -2724,34 +2314,6 @@ files = [ {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, ] -[[package]] -name = "psutil" -version = "5.9.6" -description = "Cross-platform lib for process and system monitoring in Python." -optional = true -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "psutil-5.9.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:fb8a697f11b0f5994550555fcfe3e69799e5b060c8ecf9e2f75c69302cc35c0d"}, - {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:91ecd2d9c00db9817a4b4192107cf6954addb5d9d67a969a4f436dbc9200f88c"}, - {file = "psutil-5.9.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:10e8c17b4f898d64b121149afb136c53ea8b68c7531155147867b7b1ac9e7e28"}, - {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:18cd22c5db486f33998f37e2bb054cc62fd06646995285e02a51b1e08da97017"}, - {file = "psutil-5.9.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ca2780f5e038379e520281e4c032dddd086906ddff9ef0d1b9dcf00710e5071c"}, - {file = "psutil-5.9.6-cp27-none-win32.whl", hash = "sha256:70cb3beb98bc3fd5ac9ac617a327af7e7f826373ee64c80efd4eb2856e5051e9"}, - {file = "psutil-5.9.6-cp27-none-win_amd64.whl", hash = "sha256:51dc3d54607c73148f63732c727856f5febec1c7c336f8f41fcbd6315cce76ac"}, - {file = "psutil-5.9.6-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:c69596f9fc2f8acd574a12d5f8b7b1ba3765a641ea5d60fb4736bf3c08a8214a"}, - {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:92e0cc43c524834af53e9d3369245e6cc3b130e78e26100d1f63cdb0abeb3d3c"}, - {file = "psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4"}, - {file = "psutil-5.9.6-cp36-cp36m-win32.whl", hash = "sha256:3ebf2158c16cc69db777e3c7decb3c0f43a7af94a60d72e87b2823aebac3d602"}, - {file = "psutil-5.9.6-cp36-cp36m-win_amd64.whl", hash = "sha256:ff18b8d1a784b810df0b0fff3bcb50ab941c3b8e2c8de5726f9c71c601c611aa"}, - {file = "psutil-5.9.6-cp37-abi3-win32.whl", hash = "sha256:a6f01f03bf1843280f4ad16f4bde26b817847b4c1a0db59bf6419807bc5ce05c"}, - {file = "psutil-5.9.6-cp37-abi3-win_amd64.whl", hash = "sha256:6e5fb8dc711a514da83098bc5234264e551ad980cec5f85dabf4d38ed6f15e9a"}, - {file = "psutil-5.9.6-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:daecbcbd29b289aac14ece28eca6a3e60aa361754cf6da3dfb20d4d32b6c7f57"}, - {file = "psutil-5.9.6.tar.gz", hash = "sha256:e4b92ddcd7dd4cdd3f900180ea1e104932c7bce234fb88976e2a3b296441225a"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - [[package]] name = "py" version = "1.11.0" @@ -2765,40 +2327,47 @@ files = [ [[package]] name = "pyarrow" -version = "13.0.0" +version = "14.0.1" description = "Python library for Apache Arrow" -optional = true +optional = false python-versions = ">=3.8" files = [ - {file = "pyarrow-13.0.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:1afcc2c33f31f6fb25c92d50a86b7a9f076d38acbcb6f9e74349636109550148"}, - {file = "pyarrow-13.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:70fa38cdc66b2fc1349a082987f2b499d51d072faaa6b600f71931150de2e0e3"}, - {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd57b13a6466822498238877892a9b287b0a58c2e81e4bdb0b596dbb151cbb73"}, - {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ce69f7bf01de2e2764e14df45b8404fc6f1a5ed9871e8e08a12169f87b7a26"}, - {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:588f0d2da6cf1b1680974d63be09a6530fd1bd825dc87f76e162404779a157dc"}, - {file = "pyarrow-13.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:6241afd72b628787b4abea39e238e3ff9f34165273fad306c7acf780dd850956"}, - {file = "pyarrow-13.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:fda7857e35993673fcda603c07d43889fca60a5b254052a462653f8656c64f44"}, - {file = "pyarrow-13.0.0-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:aac0ae0146a9bfa5e12d87dda89d9ef7c57a96210b899459fc2f785303dcbb67"}, - {file = "pyarrow-13.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7759994217c86c161c6a8060509cfdf782b952163569606bb373828afdd82e8"}, - {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:868a073fd0ff6468ae7d869b5fc1f54de5c4255b37f44fb890385eb68b68f95d"}, - {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51be67e29f3cfcde263a113c28e96aa04362ed8229cb7c6e5f5c719003659d33"}, - {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d1b4e7176443d12610874bb84d0060bf080f000ea9ed7c84b2801df851320295"}, - {file = "pyarrow-13.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:69b6f9a089d116a82c3ed819eea8fe67dae6105f0d81eaf0fdd5e60d0c6e0944"}, - {file = "pyarrow-13.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:ab1268db81aeb241200e321e220e7cd769762f386f92f61b898352dd27e402ce"}, - {file = "pyarrow-13.0.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:ee7490f0f3f16a6c38f8c680949551053c8194e68de5046e6c288e396dccee80"}, - {file = "pyarrow-13.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3ad79455c197a36eefbd90ad4aa832bece7f830a64396c15c61a0985e337287"}, - {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68fcd2dc1b7d9310b29a15949cdd0cb9bc34b6de767aff979ebf546020bf0ba0"}, - {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc6fd330fd574c51d10638e63c0d00ab456498fc804c9d01f2a61b9264f2c5b2"}, - {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:e66442e084979a97bb66939e18f7b8709e4ac5f887e636aba29486ffbf373763"}, - {file = "pyarrow-13.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:0f6eff839a9e40e9c5610d3ff8c5bdd2f10303408312caf4c8003285d0b49565"}, - {file = "pyarrow-13.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b30a27f1cddf5c6efcb67e598d7823a1e253d743d92ac32ec1eb4b6a1417867"}, - {file = "pyarrow-13.0.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:09552dad5cf3de2dc0aba1c7c4b470754c69bd821f5faafc3d774bedc3b04bb7"}, - {file = "pyarrow-13.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3896ae6c205d73ad192d2fc1489cd0edfab9f12867c85b4c277af4d37383c18c"}, - {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6647444b21cb5e68b593b970b2a9a07748dd74ea457c7dadaa15fd469c48ada1"}, - {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47663efc9c395e31d09c6aacfa860f4473815ad6804311c5433f7085415d62a7"}, - {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b9ba6b6d34bd2563345488cf444510588ea42ad5613df3b3509f48eb80250afd"}, - {file = "pyarrow-13.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:d00d374a5625beeb448a7fa23060df79adb596074beb3ddc1838adb647b6ef09"}, - {file = "pyarrow-13.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:c51afd87c35c8331b56f796eff954b9c7f8d4b7fef5903daf4e05fcf017d23a8"}, - {file = "pyarrow-13.0.0.tar.gz", hash = "sha256:83333726e83ed44b0ac94d8d7a21bbdee4a05029c3b1e8db58a863eec8fd8a33"}, + {file = "pyarrow-14.0.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:96d64e5ba7dceb519a955e5eeb5c9adcfd63f73a56aea4722e2cc81364fc567a"}, + {file = "pyarrow-14.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a8ae88c0038d1bc362a682320112ee6774f006134cd5afc291591ee4bc06505"}, + {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f6f053cb66dc24091f5511e5920e45c83107f954a21032feadc7b9e3a8e7851"}, + {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:906b0dc25f2be12e95975722f1e60e162437023f490dbd80d0deb7375baf3171"}, + {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:78d4a77a46a7de9388b653af1c4ce539350726cd9af62e0831e4f2bd0c95a2f4"}, + {file = "pyarrow-14.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06ca79080ef89d6529bb8e5074d4b4f6086143b2520494fcb7cf8a99079cde93"}, + {file = "pyarrow-14.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:32542164d905002c42dff896efdac79b3bdd7291b1b74aa292fac8450d0e4dcd"}, + {file = "pyarrow-14.0.1-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:c7331b4ed3401b7ee56f22c980608cf273f0380f77d0f73dd3c185f78f5a6220"}, + {file = "pyarrow-14.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:922e8b49b88da8633d6cac0e1b5a690311b6758d6f5d7c2be71acb0f1e14cd61"}, + {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58c889851ca33f992ea916b48b8540735055201b177cb0dcf0596a495a667b00"}, + {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30d8494870d9916bb53b2a4384948491444741cb9a38253c590e21f836b01222"}, + {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:be28e1a07f20391bb0b15ea03dcac3aade29fc773c5eb4bee2838e9b2cdde0cb"}, + {file = "pyarrow-14.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:981670b4ce0110d8dcb3246410a4aabf5714db5d8ea63b15686bce1c914b1f83"}, + {file = "pyarrow-14.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:4756a2b373a28f6166c42711240643fb8bd6322467e9aacabd26b488fa41ec23"}, + {file = "pyarrow-14.0.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:cf87e2cec65dd5cf1aa4aba918d523ef56ef95597b545bbaad01e6433851aa10"}, + {file = "pyarrow-14.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:470ae0194fbfdfbf4a6b65b4f9e0f6e1fa0ea5b90c1ee6b65b38aecee53508c8"}, + {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6263cffd0c3721c1e348062997babdf0151301f7353010c9c9a8ed47448f82ab"}, + {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8089d7e77d1455d529dbd7cff08898bbb2666ee48bc4085203af1d826a33cc"}, + {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fada8396bc739d958d0b81d291cfd201126ed5e7913cb73de6bc606befc30226"}, + {file = "pyarrow-14.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:2a145dab9ed7849fc1101bf03bcdc69913547f10513fdf70fc3ab6c0a50c7eee"}, + {file = "pyarrow-14.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:05fe7994745b634c5fb16ce5717e39a1ac1fac3e2b0795232841660aa76647cd"}, + {file = "pyarrow-14.0.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:a8eeef015ae69d104c4c3117a6011e7e3ecd1abec79dc87fd2fac6e442f666ee"}, + {file = "pyarrow-14.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3c76807540989fe8fcd02285dd15e4f2a3da0b09d27781abec3adc265ddbeba1"}, + {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:450e4605e3c20e558485f9161a79280a61c55efe585d51513c014de9ae8d393f"}, + {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323cbe60210173ffd7db78bfd50b80bdd792c4c9daca8843ef3cd70b186649db"}, + {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0140c7e2b740e08c5a459439d87acd26b747fc408bde0a8806096ee0baaa0c15"}, + {file = "pyarrow-14.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:e592e482edd9f1ab32f18cd6a716c45b2c0f2403dc2af782f4e9674952e6dd27"}, + {file = "pyarrow-14.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:d264ad13605b61959f2ae7c1d25b1a5b8505b112715c961418c8396433f213ad"}, + {file = "pyarrow-14.0.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:01e44de9749cddc486169cb632f3c99962318e9dacac7778315a110f4bf8a450"}, + {file = "pyarrow-14.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d0351fecf0e26e152542bc164c22ea2a8e8c682726fce160ce4d459ea802d69c"}, + {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33c1f6110c386464fd2e5e4ea3624466055bbe681ff185fd6c9daa98f30a3f9a"}, + {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11e045dfa09855b6d3e7705a37c42e2dc2c71d608fab34d3c23df2e02df9aec3"}, + {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:097828b55321897db0e1dbfc606e3ff8101ae5725673498cbfa7754ee0da80e4"}, + {file = "pyarrow-14.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1daab52050a1c48506c029e6fa0944a7b2436334d7e44221c16f6f1b2cc9c510"}, + {file = "pyarrow-14.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:3f6d5faf4f1b0d5a7f97be987cf9e9f8cd39902611e818fe134588ee99bf0283"}, + {file = "pyarrow-14.0.1.tar.gz", hash = "sha256:b8b3f4fe8d4ec15e1ef9b599b94683c5216adaed78d5cb4c606180546d1e2ee1"}, ] [package.dependencies] @@ -3392,53 +2961,6 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" -[[package]] -name = "scikit-learn" -version = "1.3.2" -description = "A set of python modules for machine learning and data mining" -optional = true -python-versions = ">=3.8" -files = [ - {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"}, - {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"}, - {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"}, - {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"}, - {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"}, - {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"}, - {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"}, - {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"}, - {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"}, - {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"}, - {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"}, - {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"}, - {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"}, - {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"}, - {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"}, - {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"}, - {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"}, - {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"}, - {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"}, - {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"}, - {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"}, - {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"}, - {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"}, - {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"}, - {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"}, - {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"}, -] - -[package.dependencies] -joblib = ">=1.1.1" -numpy = ">=1.17.3,<2.0" -scipy = ">=1.5.0" -threadpoolctl = ">=2.0.0" - -[package.extras] -benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"] -docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] -examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] -tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"] - [[package]] name = "scipy" version = "1.10.1" @@ -3504,28 +3026,6 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] -[[package]] -name = "setuptools-scm" -version = "8.0.4" -description = "the blessed package to manage your versions by scm tags" -optional = true -python-versions = ">=3.8" -files = [ - {file = "setuptools-scm-8.0.4.tar.gz", hash = "sha256:b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"}, - {file = "setuptools_scm-8.0.4-py3-none-any.whl", hash = "sha256:b47844cd2a84b83b3187a5782c71128c28b4c94cad8bfb871da2784a5cb54c4f"}, -] - -[package.dependencies] -packaging = ">=20" -setuptools = "*" -tomli = {version = ">=1", markers = "python_version < \"3.11\""} -typing-extensions = "*" - -[package.extras] -docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] -rich = ["rich"] -test = ["build", "pytest", "rich", "wheel"] - [[package]] name = "six" version = "1.16.0" @@ -3703,17 +3203,6 @@ files = [ {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, ] -[[package]] -name = "threadpoolctl" -version = "3.2.0" -description = "threadpoolctl" -optional = true -python-versions = ">=3.8" -files = [ - {file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"}, - {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"}, -] - [[package]] name = "toml" version = "0.10.2" @@ -4122,4 +3611,4 @@ mlflow = ["kedro-mlflow"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.11" -content-hash = "ac8076a1f32c945ebf19d702454fabd2a166869da28ec71e232c884cd9760500" +content-hash = "34cea1de56556e002ad82e79af443ba877b382a13724157db731b15e970df45c" diff --git a/pyproject.toml b/pyproject.toml index 5c8bb62..9fcea5b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,6 +38,7 @@ click = ">=8.0.4" kfp = ">=1.8.21,<2.0" tabulate = ">=0.8.7" semver = ">=2.10,<4.0.0" +pyarrow = ">=14.0.1" # Stating explicitly for dependency dependency due to critical vulnerability pydantic = ">=1.9.0,<2.0.0" google-auth = "<3" google-cloud-scheduler = ">=2.3.2" From 21d8d95c382fc565531be1b30cc71fbdf97c55f1 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Thu, 16 Nov 2023 14:19:47 +0100 Subject: [PATCH 08/37] wip: implementing node grouping classes and config changes draft --- kedro_vertexai/config.py | 20 +++-- kedro_vertexai/generator.py | 161 +++++++++++++++++++++++++++++++++++- tests/test_config.py | 2 + 3 files changed, 172 insertions(+), 11 deletions(-) diff --git a/kedro_vertexai/config.py b/kedro_vertexai/config.py index 56cdf9f..13d64f5 100644 --- a/kedro_vertexai/config.py +++ b/kedro_vertexai/config.py @@ -31,6 +31,9 @@ # Optional pipeline description # description: "Very Important Pipeline" + # Optional config for node execution grouping based on tags. Specifying tag prefix enables this feature + # grouping_tag_prefix: "group:" + # How long to keep underlying Argo workflow (together with pods and data # volume after pipeline finishes) [in seconds]. Default: 1 week ttl: 604800 @@ -52,7 +55,8 @@ # on_exit_pipeline: notify_via_slack # Optional section allowing adjustment of the resources, reservations and limits - # for the nodes. When not provided they're set to 500m cpu and 1024Mi memory. + # for the nodes. You can specify node names or tags to select which nodes the requirements + # apply to (also in node selectors). When not provided they're set to 500m cpu and 1024Mi memory. # If you don't want to specify pipeline resources set both to None in __default__. resources: @@ -127,6 +131,7 @@ class RunConfig(BaseModel): description: Optional[str] experiment_name: str scheduled_run_name: Optional[str] + grouping_tag_prefix: Optional[str] service_account: Optional[str] network: Optional[NetworkConfig] = NetworkConfig() ttl: int = 3600 * 24 * 7 @@ -152,14 +157,11 @@ def _config_for( names = [*tags, node] filled_names = [x for x in names if x in params.keys()] results = default_config or {} - if filled_names: - for name in filled_names: - configs = ( - params[name] - if isinstance(params[name], dict) - else params[name].dict() - ) - results.update({k: v for k, v in configs.items() if v is not None}) + for name in filled_names: + configs = ( + params[name] if isinstance(params[name], dict) else params[name].dict() + ) + results.update({k: v for k, v in configs.items() if v is not None}) return results diff --git a/kedro_vertexai/generator.py b/kedro_vertexai/generator.py index 046295f..210d816 100644 --- a/kedro_vertexai/generator.py +++ b/kedro_vertexai/generator.py @@ -4,8 +4,10 @@ import json import logging import os +from abc import ABC +from dataclasses import dataclass, field from tempfile import NamedTemporaryFile -from typing import Dict, Set +from typing import Dict, List, Set, Tuple import kfp from kedro.framework.context import KedroContext @@ -18,6 +20,7 @@ OutputSpec, ) from kfp.v2 import dsl +from toposort import CircularDependencyError, toposort from kedro_vertexai.config import KedroVertexAIRunnerConfig, RunConfig from kedro_vertexai.constants import ( @@ -30,6 +33,160 @@ from kedro_vertexai.vertex_ai.io import generate_mlflow_inputs from kedro_vertexai.vertex_ai.runner import VertexAIPipelinesRunner +TagsDict = Dict[str, Set[str]] + + +@dataclass +class Grouping: + nodes_mapping: Dict[str, Set[Node]] = field(default_factory=dict) + dependencies: Dict[str, Set[str]] = field(default_factory=dict) + # tags: TagsDict = field(default_factory=dict) + + # not sure if this is good idea to hook it to initialization, but for our limited + # usage it should be fine + def __post_init__(self): + self.validate() + + def validate(self): + try: + [_ for _ in toposort(self.dependencies)] + except CircularDependencyError as e: + raise GroupingException( + "Grouping has failed because of cyclic depedency after merging nodes. " + f"Check your group settings. {str(e)}" + ) + # visited_nodes = set() + # # This representation is not optimal, but does not need to be as these DAGs are small graphs + # def find_cycle(node : str, dfs_visit_history : set) -> Optional[str]: + # visited_nodes.add(node) + # dfs_visit_history.add(node) + # if node in self.dependencies: + # for child in self.dependencies[node]: + # if child == node: + # return node + # if child not in dfs_visit_history: + # ret = find_cycle(child, dfs_visit_history) + # if ret is not None: + # return ret + # else: + # return child + # dfs_visit_history.remove(node) + # return None + # history = set() + + # start_node = "__start__" + # while start_node in self.dependencies: + # start_node = "_" + start_node + "_" + # # Adding artificial node that points to all non terminating nodes + # self.dependencies[start_node] = { node for node in self.dependencies.keys() } + + # # Alternative solution - try to build a new superficial graph and use kedro to validate it + # result, cycle = find_cycle(start_node, history), history + # if result: + # raise GroupingException(f"Invalid grouping detected that creates a cycle in its grouping" + # " tags regarding nodes: {str(cycle)}") + + +class GroupingException(Exception): + ... + + +class NodeGrouper(ABC): + """Abstract base class for node grouping functions: grouping and validating the grouping + The main argument to base grouping on is node_dependencies from kedro.pipeline.Pipeline + For each node it tells which set of nodes are parents of them, based on nodes outputs + """ + + def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: + ... + + def _get_tagging( + self, node_dependencies: Dict[Node, Set[Node]] + ) -> Tuple[Dict[str, Set[str]], TagsDict]: + tagging = dict() + # TODO make sure that node.name s are unique within pipeline + for node in node_dependencies: + tagging[node.name] = node.tags + return tagging + + +class IdentityNodeGrouper(NodeGrouper): + def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: + return Grouping( + nodes_mapping={k.name: {k} for k in node_dependencies.keys()}, + dependencies={k.name: v for k, v in node_dependencies.items()}, + ) + + +class TagNodeGrouper(NodeGrouper): + def __init__(self, grouping_prefix="group:") -> None: + self.tag_prefix = grouping_prefix + + def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: + group_mapping = {k.name: {k} for k in node_dependencies.keys()} + group_belonging = {k.name: k.name for k in node_dependencies.keys()} + node_names = [k for k in group_mapping.keys()] + node_tagging = self._get_tagging(node_dependencies) + + # iterating over copy as we will modify group_mapping to reflect new state + for name in node_names: + node_tags = node_tagging[name] + grouping_tags = [ + t for t in filter(lambda x: x.startswith(self.tag_prefix), node_tags) + ] + if len(grouping_tags) > 1: + raise GroupingException( + f"Inconsistent tagging for grouping, multiple tags with grouping prefix found in node {name}" + ) + # 1 or 0 loop + for tag in grouping_tags: + group_name = tag.removeprefix(self.tag_prefix) + if group_name not in group_mapping: + group_mapping[group_name] = set() + group_mapping[group_name].union(group_mapping[name]) + del group_mapping[name] + group_belonging[name] = group_name + + group_dependencies: Dict[str, Set[str]] = dict() + for child, parents in node_dependencies: + group_name = group_belonging[child.name] + # deduplication after gropuing thanks to sets and dicts properties + if group_name not in group_dependencies: + group_dependencies[group_name] = set() + for parent in parents: + group_dependencies[group_name].add(group_belonging[parent.name]) + + return Grouping( + nodes_mapping=group_mapping, + dependencies=group_dependencies, + ) + + # # Dict of groups and nodes they consist of + # tag_groups = defaultdict(set) + # for node_name, tagset in node_tagging.items(): + # for tag in tagset: + # if tag.startswith(self.tag_prefix): + # group_name = tag.removeprefix(self.tag_prefix) + # tag_groups[group_name].add(node_name) + # if group_translator[node_name] != node_name and group_translator[node_name] != group_name: + # raise GroupingException(f"Inconsistent tagging for grouping, multiple tags with grouping" + # " prefix found in node {node_name}") + # group_translator[node_name] = group_name + + # group_dependencies = {} + # for child, parents in deps.items(): + # if group_translator[child] not in group_dependencies: + # group_dependencies[group_translator[child]] = set() + # this_group_deps = group_dependencies[group_translator[child]] + # for parent in parents: + # # deduplication after grouping + # if group_translator[parent] != group_translator[child]: + # this_group_deps.add(group_translator[parent]) + + # # Updating node tag dictionary with group tags + # node_tagging.update({ group : set([tag for node in tag_groups[group] for tag in node_tagging[node]]) + # for group in tag_groups}) + class PipelineGenerator: """ @@ -133,7 +290,7 @@ def _create_mlflow_op(self, image, should_add_params) -> dsl.ContainerOp: def _build_kfp_ops( self, - node_dependencies: Dict[Node, Set[Node]], + node_dependencies: Dict[str, List[str]], image, pipeline, tracking_token=None, diff --git a/tests/test_config.py b/tests/test_config.py index d227581..949eae1 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -15,6 +15,8 @@ scheduled_run_name: "scheduled run" description: "My awesome pipeline" service_account: test@pipelines.gserviceaccount.com + grouping: + tag_prefix: "group:" ttl: 300 network: vpc: my-vpc From c6a481d1f05138843a242ff8ff3edc63a235b3ca Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 15:43:42 +0100 Subject: [PATCH 09/37] feature: grouping moved to other file, adjusted config and added test for config refactor: moved dynamic class loading to separate fnuc --- kedro_vertexai/config.py | 61 ++++++++++++++++- kedro_vertexai/dynamic_config.py | 22 +++---- kedro_vertexai/grouping.py | 110 +++++++++++++++++++++++++++++++ tests/test_config.py | 53 ++++++++++++++- tests/test_config_providers.py | 2 +- 5 files changed, 228 insertions(+), 20 deletions(-) create mode 100644 kedro_vertexai/grouping.py diff --git a/kedro_vertexai/config.py b/kedro_vertexai/config.py index 13d64f5..3dcc252 100644 --- a/kedro_vertexai/config.py +++ b/kedro_vertexai/config.py @@ -1,7 +1,9 @@ +import logging import os +from importlib import import_module from typing import Dict, List, Optional -from pydantic import BaseModel +from pydantic import BaseModel, validator from pydantic.networks import IPvAnyAddress DEFAULT_CONFIG_TEMPLATE = """ @@ -32,7 +34,11 @@ # description: "Very Important Pipeline" # Optional config for node execution grouping based on tags. Specifying tag prefix enables this feature - # grouping_tag_prefix: "group:" + grouping: + cls: kedro_vertexai.grouping.IdentityNodeGrouper + # cls: kedro_vertexai.grouping.TagNodeGrouper + # params: + # tag_prefix: "group:" # How long to keep underlying Argo workflow (together with pods and data # volume after pipeline finishes) [in seconds]. Default: 1 week @@ -99,6 +105,55 @@ """ +logger = logging.getLogger(__name__) + + +# the only place to put it to avoid circular dependencies +def dynamic_load_class( + load_class, args: Optional[list] = None, kwargs: Optional[dict] = None +): + if args is None: + args = [] + if kwargs is None: + kwargs = {} + try: + module_name, class_name = load_class.rsplit(".", 1) + logger.info(f"Initializing {class_name}") + cls = getattr(import_module(module_name), class_name) + return cls(*args, **kwargs) + except: # noqa: E722 + logger.error( + f"Could not dynamically load class {load_class} with it init params, " + f"make sure it's valid and accessible from the current Python interpreter", + exc_info=True, + ) + + +class GroupingConfig(BaseModel): + cls: str = "kedro_vertexai.grouping.IdentityNodeGrouper" + params: Optional[dict] = {} + + @validator("cls") + def class_valid(cls, v, values, **kwargs): + c = dynamic_load_class(v) + if c is None: + raise ValueError(f"Could not validate grouping class {v} with its params.") + try: + if "params" in values: + c(**values["params"]) + except: # noqa: E722 + raise ValueError(f"Invalid parameters for grouping class {v}.") + return v + + # @computed_field + # @cached_property + # def used_provider(self): + # load_class = dynamic_load_class(self.cls) + # # fail gracefully here if wrong params are provided here? + # self._grouping_object = load_class(**self.params) + # return self._grouping_object + + class HostAliasConfig(BaseModel): ip: IPvAnyAddress hostnames: List[str] @@ -131,7 +186,7 @@ class RunConfig(BaseModel): description: Optional[str] experiment_name: str scheduled_run_name: Optional[str] - grouping_tag_prefix: Optional[str] + grouping: Optional[GroupingConfig] = GroupingConfig() service_account: Optional[str] network: Optional[NetworkConfig] = NetworkConfig() ttl: int = 3600 * 24 * 7 diff --git a/kedro_vertexai/dynamic_config.py b/kedro_vertexai/dynamic_config.py index 7d2f2b7..40786c3 100644 --- a/kedro_vertexai/dynamic_config.py +++ b/kedro_vertexai/dynamic_config.py @@ -1,8 +1,11 @@ import logging from abc import ABC, abstractmethod -from importlib import import_module -from kedro_vertexai.config import DynamicConfigProviderConfig, PluginConfig +from kedro_vertexai.config import ( + DynamicConfigProviderConfig, + PluginConfig, + dynamic_load_class, +) logger = logging.getLogger(__name__) @@ -17,18 +20,9 @@ def build( config: PluginConfig, provider_config: DynamicConfigProviderConfig, ) -> "DynamicConfigProvider": - module_name, class_name = provider_config.cls.rsplit(".", 1) - logger.info(f"Initializing {class_name}") - - try: - cls = getattr(import_module(module_name), class_name) - return cls(config, **provider_config.params) - except: # noqa: E722 - logger.error( - f"Could not load dynamic config loader class {provider_config.cls}, " - f"make sure it's accessible from the current Python interpreter", - exc_info=True, - ) + return dynamic_load_class( + provider_config.cls, args=[config], kwargs=provider_config.params + ) def __init__(self, config: PluginConfig, **kwargs): self.config = config diff --git a/kedro_vertexai/grouping.py b/kedro_vertexai/grouping.py new file mode 100644 index 0000000..e5aa782 --- /dev/null +++ b/kedro_vertexai/grouping.py @@ -0,0 +1,110 @@ +from abc import ABC +from dataclasses import dataclass, field +from typing import Dict, Set, Tuple + +from kedro.pipeline.node import Node +from toposort import CircularDependencyError, toposort + +TagsDict = Dict[str, Set[str]] + + +@dataclass +class Grouping: + nodes_mapping: Dict[str, Set[Node]] = field(default_factory=dict) + dependencies: Dict[str, Set[str]] = field(default_factory=dict) + # tags: TagsDict = field(default_factory=dict) + + # not sure if this is good idea to hook it to initialization, but for our limited + # usage it should be fine + def __post_init__(self): + self.validate() + + def validate(self): + try: + [_ for _ in toposort(self.dependencies)] + except CircularDependencyError as e: + raise GroupingException( + "Grouping has failed because of cyclic depedency after merging nodes. " + f"Check your group settings. {str(e)}" + ) + + +class GroupingException(Exception): + ... + + +class NodeGrouper(ABC): + """Abstract base class for node grouping functions: grouping and validating the grouping + The main argument to base grouping on is node_dependencies from kedro.pipeline.Pipeline + For each node it tells which set of nodes are parents of them, based on nodes outputs + """ + + def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: + raise NotImplementedError + + def _get_tagging( + self, node_dependencies: Dict[Node, Set[Node]] + ) -> Tuple[Dict[str, Set[str]], TagsDict]: + tagging = dict() + # TODO make sure that node.name s are unique within pipeline + for node in node_dependencies: + tagging[node.name] = node.tags + return tagging + + +class IdentityNodeGrouper(NodeGrouper): + """Default class for grouping which puts each node into its own group, + effectively not grouping anything at all.""" + + def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: + return Grouping( + nodes_mapping={k.name: {k} for k in node_dependencies.keys()}, + dependencies={k.name: v for k, v in node_dependencies.items()}, + ) + + +class TagNodeGrouper(NodeGrouper): + """Grouping class that uses special tag prefix convention to aggregate + nodes together. Only one such tag is allowed per node.""" + + def __init__(self, tag_prefix="group:") -> None: + self.tag_prefix = tag_prefix + + def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: + group_mapping = {k.name: {k} for k in node_dependencies.keys()} + group_belonging = {k.name: k.name for k in node_dependencies.keys()} + node_names = [k for k in group_mapping.keys()] + node_tagging = self._get_tagging(node_dependencies) + + # iterating over copy as we will modify group_mapping to reflect new state + for name in node_names: + node_tags = node_tagging[name] + grouping_tags = [ + t for t in filter(lambda x: x.startswith(self.tag_prefix), node_tags) + ] + if len(grouping_tags) > 1: + raise GroupingException( + f"Inconsistent tagging for grouping, multiple tags with grouping prefix found in node {name}" + ) + # 1 or 0 loop + for tag in grouping_tags: + group_name = tag.removeprefix(self.tag_prefix) + if group_name not in group_mapping: + group_mapping[group_name] = set() + group_mapping[group_name].union(group_mapping[name]) + del group_mapping[name] + group_belonging[name] = group_name + + group_dependencies: Dict[str, Set[str]] = dict() + for child, parents in node_dependencies: + group_name = group_belonging[child.name] + # deduplication after gropuing thanks to sets and dicts properties + if group_name not in group_dependencies: + group_dependencies[group_name] = set() + for parent in parents: + group_dependencies[group_name].add(group_belonging[parent.name]) + + return Grouping( + nodes_mapping=group_mapping, + dependencies=group_dependencies, + ) diff --git a/tests/test_config.py b/tests/test_config.py index 949eae1..58c2a11 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -3,7 +3,8 @@ import yaml from pydantic import ValidationError -from kedro_vertexai.config import PluginConfig +from kedro_vertexai.config import PluginConfig, dynamic_load_class +from kedro_vertexai.grouping import IdentityNodeGrouper, TagNodeGrouper CONFIG_FULL = """ project_id: test-project-id @@ -16,7 +17,7 @@ description: "My awesome pipeline" service_account: test@pipelines.gserviceaccount.com grouping: - tag_prefix: "group:" + cls: kedro_vertexai.grouping.IdentityNodeGrouper ttl: 300 network: vpc: my-vpc @@ -46,6 +47,54 @@ class TestPluginConfig(unittest.TestCase): + def test_grouping_config(self): + cfg = PluginConfig.parse_obj(yaml.safe_load(CONFIG_MINIMAL)) + assert cfg.run_config.grouping is not None + assert ( + cfg.run_config.grouping.cls == "kedro_vertexai.grouping.IdentityNodeGrouper" + ) + c_obj = dynamic_load_class(cfg.run_config.grouping.cls) + assert isinstance(c_obj, IdentityNodeGrouper) + + cfg_tag_group = """ +project_id: some-project +region: some-region +run_config: + image: test + experiment_name: test + grouping: + cls: "kedro_vertexai.grouping.TagNodeGrouper" + params: + tag_prefix: "group:" +""" + cfg = PluginConfig.parse_obj(yaml.safe_load(cfg_tag_group)) + assert cfg.run_config.grouping is not None + c_obj = dynamic_load_class( + cfg.run_config.grouping.cls, kwargs=cfg.run_config.grouping.params + ) + assert isinstance(c_obj, TagNodeGrouper) + assert c_obj.tag_prefix == "group:" + + @unittest.mock.patch("kedro_vertexai.config.logger.error") + def test_grouping_config_error(self, log_error): + cfg_tag_group = """ +project_id: some-project +region: some-region +run_config: + image: test + experiment_name: test + grouping: + cls: "kedro_vertexai.grouping.TagNodeGrouper" + params: + foo: "bar:" +""" + cfg = PluginConfig.parse_obj(yaml.safe_load(cfg_tag_group)) + c = dynamic_load_class( + cfg.run_config.grouping.cls, kwargs=cfg.run_config.grouping.params + ) + assert c is None + log_error.assert_called_once() + def test_plugin_config(self): obj = yaml.safe_load(CONFIG_FULL) cfg = PluginConfig.parse_obj(obj) diff --git a/tests/test_config_providers.py b/tests/test_config_providers.py index 7273c86..0588b2c 100644 --- a/tests/test_config_providers.py +++ b/tests/test_config_providers.py @@ -89,7 +89,7 @@ def test_initialization_from_config(self): {"unit_tests_param_key": "unit_tests_param_value"}, ) - @patch("kedro_vertexai.dynamic_config.logger.error") + @patch("kedro_vertexai.config.logger.error") @_disable_logging def test_create_provider_from_invalid_config(self, log_error): config = self._get_test_config_with_dynamic_provider( From 796501b5e46dab12a23fe70068ff3edc54a44379 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 16:54:37 +0100 Subject: [PATCH 10/37] wip: making progress to finish grouping reorganization and testing --- kedro_vertexai/generator.py | 170 +++--------------------------------- 1 file changed, 10 insertions(+), 160 deletions(-) diff --git a/kedro_vertexai/generator.py b/kedro_vertexai/generator.py index 210d816..77932b6 100644 --- a/kedro_vertexai/generator.py +++ b/kedro_vertexai/generator.py @@ -4,14 +4,11 @@ import json import logging import os -from abc import ABC -from dataclasses import dataclass, field from tempfile import NamedTemporaryFile -from typing import Dict, List, Set, Tuple +from typing import Dict, List import kfp from kedro.framework.context import KedroContext -from kedro.pipeline.node import Node from kfp.components.structures import ( ComponentSpec, ContainerImplementation, @@ -20,9 +17,12 @@ OutputSpec, ) from kfp.v2 import dsl -from toposort import CircularDependencyError, toposort -from kedro_vertexai.config import KedroVertexAIRunnerConfig, RunConfig +from kedro_vertexai.config import ( + KedroVertexAIRunnerConfig, + RunConfig, + dynamic_load_class, +) from kedro_vertexai.constants import ( KEDRO_CONFIG_JOB_NAME, KEDRO_CONFIG_RUN_ID, @@ -33,160 +33,6 @@ from kedro_vertexai.vertex_ai.io import generate_mlflow_inputs from kedro_vertexai.vertex_ai.runner import VertexAIPipelinesRunner -TagsDict = Dict[str, Set[str]] - - -@dataclass -class Grouping: - nodes_mapping: Dict[str, Set[Node]] = field(default_factory=dict) - dependencies: Dict[str, Set[str]] = field(default_factory=dict) - # tags: TagsDict = field(default_factory=dict) - - # not sure if this is good idea to hook it to initialization, but for our limited - # usage it should be fine - def __post_init__(self): - self.validate() - - def validate(self): - try: - [_ for _ in toposort(self.dependencies)] - except CircularDependencyError as e: - raise GroupingException( - "Grouping has failed because of cyclic depedency after merging nodes. " - f"Check your group settings. {str(e)}" - ) - # visited_nodes = set() - # # This representation is not optimal, but does not need to be as these DAGs are small graphs - # def find_cycle(node : str, dfs_visit_history : set) -> Optional[str]: - # visited_nodes.add(node) - # dfs_visit_history.add(node) - # if node in self.dependencies: - # for child in self.dependencies[node]: - # if child == node: - # return node - # if child not in dfs_visit_history: - # ret = find_cycle(child, dfs_visit_history) - # if ret is not None: - # return ret - # else: - # return child - # dfs_visit_history.remove(node) - # return None - # history = set() - - # start_node = "__start__" - # while start_node in self.dependencies: - # start_node = "_" + start_node + "_" - # # Adding artificial node that points to all non terminating nodes - # self.dependencies[start_node] = { node for node in self.dependencies.keys() } - - # # Alternative solution - try to build a new superficial graph and use kedro to validate it - # result, cycle = find_cycle(start_node, history), history - # if result: - # raise GroupingException(f"Invalid grouping detected that creates a cycle in its grouping" - # " tags regarding nodes: {str(cycle)}") - - -class GroupingException(Exception): - ... - - -class NodeGrouper(ABC): - """Abstract base class for node grouping functions: grouping and validating the grouping - The main argument to base grouping on is node_dependencies from kedro.pipeline.Pipeline - For each node it tells which set of nodes are parents of them, based on nodes outputs - """ - - def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: - ... - - def _get_tagging( - self, node_dependencies: Dict[Node, Set[Node]] - ) -> Tuple[Dict[str, Set[str]], TagsDict]: - tagging = dict() - # TODO make sure that node.name s are unique within pipeline - for node in node_dependencies: - tagging[node.name] = node.tags - return tagging - - -class IdentityNodeGrouper(NodeGrouper): - def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: - return Grouping( - nodes_mapping={k.name: {k} for k in node_dependencies.keys()}, - dependencies={k.name: v for k, v in node_dependencies.items()}, - ) - - -class TagNodeGrouper(NodeGrouper): - def __init__(self, grouping_prefix="group:") -> None: - self.tag_prefix = grouping_prefix - - def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: - group_mapping = {k.name: {k} for k in node_dependencies.keys()} - group_belonging = {k.name: k.name for k in node_dependencies.keys()} - node_names = [k for k in group_mapping.keys()] - node_tagging = self._get_tagging(node_dependencies) - - # iterating over copy as we will modify group_mapping to reflect new state - for name in node_names: - node_tags = node_tagging[name] - grouping_tags = [ - t for t in filter(lambda x: x.startswith(self.tag_prefix), node_tags) - ] - if len(grouping_tags) > 1: - raise GroupingException( - f"Inconsistent tagging for grouping, multiple tags with grouping prefix found in node {name}" - ) - # 1 or 0 loop - for tag in grouping_tags: - group_name = tag.removeprefix(self.tag_prefix) - if group_name not in group_mapping: - group_mapping[group_name] = set() - group_mapping[group_name].union(group_mapping[name]) - del group_mapping[name] - group_belonging[name] = group_name - - group_dependencies: Dict[str, Set[str]] = dict() - for child, parents in node_dependencies: - group_name = group_belonging[child.name] - # deduplication after gropuing thanks to sets and dicts properties - if group_name not in group_dependencies: - group_dependencies[group_name] = set() - for parent in parents: - group_dependencies[group_name].add(group_belonging[parent.name]) - - return Grouping( - nodes_mapping=group_mapping, - dependencies=group_dependencies, - ) - - # # Dict of groups and nodes they consist of - # tag_groups = defaultdict(set) - # for node_name, tagset in node_tagging.items(): - # for tag in tagset: - # if tag.startswith(self.tag_prefix): - # group_name = tag.removeprefix(self.tag_prefix) - # tag_groups[group_name].add(node_name) - # if group_translator[node_name] != node_name and group_translator[node_name] != group_name: - # raise GroupingException(f"Inconsistent tagging for grouping, multiple tags with grouping" - # " prefix found in node {node_name}") - # group_translator[node_name] = group_name - - # group_dependencies = {} - # for child, parents in deps.items(): - # if group_translator[child] not in group_dependencies: - # group_dependencies[group_translator[child]] = set() - # this_group_deps = group_dependencies[group_translator[child]] - # for parent in parents: - # # deduplication after grouping - # if group_translator[parent] != group_translator[child]: - # this_group_deps.add(group_translator[parent]) - - # # Updating node tag dictionary with group tags - # node_tagging.update({ group : set([tag for node in tag_groups[group] for tag in node_tagging[node]]) - # for group in tag_groups}) - class PipelineGenerator: """ @@ -203,6 +49,9 @@ def __init__(self, config, project_name, context, run_name: str): self.context: KedroContext = context self.run_config: RunConfig = config.run_config self.catalog = context.config_loader.get("catalog*") + self.grouping = dynamic_load_class( + self.run_config.grouping.cls, kwargs=self.run_config.grouping.params + ) def get_pipeline_name(self): """ @@ -235,6 +84,7 @@ def convert_kedro_pipeline_to_kfp() -> None: from kedro.framework.project import pipelines node_dependencies = pipelines[pipeline].node_dependencies + kfp_ops = self._build_kfp_ops(node_dependencies, image, pipeline, token) for node, dependencies in node_dependencies.items(): set_dependencies(node, dependencies, kfp_ops) From 582d77fddd5de1acc072c3769be260e8a499f4b5 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 17:48:47 +0100 Subject: [PATCH 11/37] fix: fixed errors introduced in generator class adding grouping --- kedro_vertexai/generator.py | 30 ++++++++++++++++-------------- kedro_vertexai/grouping.py | 5 ++++- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/kedro_vertexai/generator.py b/kedro_vertexai/generator.py index 77932b6..4cad28c 100644 --- a/kedro_vertexai/generator.py +++ b/kedro_vertexai/generator.py @@ -5,7 +5,7 @@ import logging import os from tempfile import NamedTemporaryFile -from typing import Dict, List +from typing import Dict import kfp from kedro.framework.context import KedroContext @@ -29,6 +29,7 @@ KEDRO_GLOBALS_PATTERN, KEDRO_VERTEXAI_RUNNER_CONFIG, ) +from kedro_vertexai.grouping import Grouping, NodeGrouper from kedro_vertexai.utils import clean_name, is_mlflow_enabled from kedro_vertexai.vertex_ai.io import generate_mlflow_inputs from kedro_vertexai.vertex_ai.runner import VertexAIPipelinesRunner @@ -49,7 +50,7 @@ def __init__(self, config, project_name, context, run_name: str): self.context: KedroContext = context self.run_config: RunConfig = config.run_config self.catalog = context.config_loader.get("catalog*") - self.grouping = dynamic_load_class( + self.grouping: NodeGrouper = dynamic_load_class( self.run_config.grouping.cls, kwargs=self.run_config.grouping.params ) @@ -70,10 +71,10 @@ def generate_pipeline(self, pipeline, image, image_pull_policy, token): :return: kfp pipeline function """ - def set_dependencies(node, dependencies, kfp_ops): - for dependency in dependencies: - name = clean_name(node.name) - dependency_name = clean_name(dependency.name) + def set_dependencies(node_name, dependencies, kfp_ops): + for dependency_group in dependencies: + name = clean_name(node_name) + dependency_name = clean_name(dependency_group) kfp_ops[name].after(kfp_ops[dependency_name]) @dsl.pipeline( @@ -84,10 +85,11 @@ def convert_kedro_pipeline_to_kfp() -> None: from kedro.framework.project import pipelines node_dependencies = pipelines[pipeline].node_dependencies + grouping = self.grouping.group(node_dependencies) - kfp_ops = self._build_kfp_ops(node_dependencies, image, pipeline, token) - for node, dependencies in node_dependencies.items(): - set_dependencies(node, dependencies, kfp_ops) + kfp_ops = self._build_kfp_ops(grouping, image, pipeline, token) + for group_name, dependencies in grouping.dependencies.items(): + set_dependencies(group_name, dependencies, kfp_ops) for operator in kfp_ops.values(): operator.container.set_image_pull_policy(image_pull_policy) @@ -140,7 +142,7 @@ def _create_mlflow_op(self, image, should_add_params) -> dsl.ContainerOp: def _build_kfp_ops( self, - node_dependencies: Dict[str, List[str]], + node_grouping: Grouping, image, pipeline, tracking_token=None, @@ -156,9 +158,9 @@ def _build_kfp_ops( image, should_add_params ) - for node in node_dependencies: - name = clean_name(node.name) - tags = node.tags + for group_name, nodes_group in node_grouping.nodes_mapping.items(): + name = clean_name(group_name) + tags = {tag for tagging in nodes_group for tag in tagging.tags} mlflow_inputs, mlflow_envs = generate_mlflow_inputs() component_params = ( @@ -175,7 +177,7 @@ def _build_kfp_ops( self._globals_env(), f"kedro run -e {self.context.env}", f"--pipeline {pipeline}", - f'--node "{node.name}"', + f'--nodes "{",".join([n.name for n in nodes_group])}"', f"--runner {VertexAIPipelinesRunner.runner_name()}", "--config config.yaml" if should_add_params else "", ] diff --git a/kedro_vertexai/grouping.py b/kedro_vertexai/grouping.py index e5aa782..bcaffc6 100644 --- a/kedro_vertexai/grouping.py +++ b/kedro_vertexai/grouping.py @@ -59,7 +59,10 @@ class IdentityNodeGrouper(NodeGrouper): def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: return Grouping( nodes_mapping={k.name: {k} for k in node_dependencies.keys()}, - dependencies={k.name: v for k, v in node_dependencies.items()}, + dependencies={ + k.name: {dep.name for dep in deps} + for k, deps in node_dependencies.items() + }, ) From 7af75a5a1695dfd44001ee79b9be9542f0317bfc Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 17:49:06 +0100 Subject: [PATCH 12/37] tests: fixed tests for new version --- tests/test_vertex_ai_generator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_vertex_ai_generator.py b/tests/test_vertex_ai_generator.py index c64a943..2e947cd 100644 --- a/tests/test_vertex_ai_generator.py +++ b/tests/test_vertex_ai_generator.py @@ -191,7 +191,7 @@ def test_should_add_env_and_pipeline_in_the_invocations(self): in dsl_pipeline.ops["mlflow-start-run"].container.args[0] ) assert ( - 'kedro run -e unittests --pipeline pipeline --node "node1"' + 'kedro run -e unittests --pipeline pipeline --nodes "node1"' in dsl_pipeline.ops["node1"].container.args[0] ) @@ -241,7 +241,7 @@ def test_should_dump_params_and_add_config_if_params_are_set(self): ) assert ( - 'kedro run -e unittests --pipeline pipeline --node "node1"' + 'kedro run -e unittests --pipeline pipeline --nodes "node1"' in (args := dsl_pipeline.ops["node1"].container.args[0]) ) and args.endswith("--config config.yaml") From 7499e8f854be6731add568985b4eaa92abaad9c0 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 21:41:57 +0100 Subject: [PATCH 13/37] fixup! feature: grouping moved to other file, adjusted config and added test for config --- kedro_vertexai/grouping.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/kedro_vertexai/grouping.py b/kedro_vertexai/grouping.py index bcaffc6..fb6a0d6 100644 --- a/kedro_vertexai/grouping.py +++ b/kedro_vertexai/grouping.py @@ -94,18 +94,21 @@ def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: group_name = tag.removeprefix(self.tag_prefix) if group_name not in group_mapping: group_mapping[group_name] = set() - group_mapping[group_name].union(group_mapping[name]) + group_mapping[group_name] = group_mapping[group_name].union( + group_mapping[name] + ) del group_mapping[name] group_belonging[name] = group_name group_dependencies: Dict[str, Set[str]] = dict() - for child, parents in node_dependencies: + for child, parents in node_dependencies.items(): group_name = group_belonging[child.name] # deduplication after gropuing thanks to sets and dicts properties if group_name not in group_dependencies: group_dependencies[group_name] = set() for parent in parents: - group_dependencies[group_name].add(group_belonging[parent.name]) + if group_belonging[parent.name] != group_name: + group_dependencies[group_name].add(group_belonging[parent.name]) return Grouping( nodes_mapping=group_mapping, From 796bed55eca261ca52372c92af2c0297724b55e4 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 21:42:48 +0100 Subject: [PATCH 14/37] tests: implementing grouping tests and fixing minor issues in other tests --- tests/test_config.py | 3 +- tests/test_grouping.py | 122 ++++++++++++++++++++++++++++++ tests/test_vertex_ai_generator.py | 58 +++++++++++--- 3 files changed, 172 insertions(+), 11 deletions(-) create mode 100644 tests/test_grouping.py diff --git a/tests/test_config.py b/tests/test_config.py index 58c2a11..2c9b952 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -1,4 +1,5 @@ import unittest +from unittest.mock import patch import yaml from pydantic import ValidationError @@ -75,7 +76,7 @@ def test_grouping_config(self): assert isinstance(c_obj, TagNodeGrouper) assert c_obj.tag_prefix == "group:" - @unittest.mock.patch("kedro_vertexai.config.logger.error") + @patch("kedro_vertexai.config.logger.error") def test_grouping_config_error(self, log_error): cfg_tag_group = """ project_id: some-project diff --git a/tests/test_grouping.py b/tests/test_grouping.py new file mode 100644 index 0000000..ea3c2ef --- /dev/null +++ b/tests/test_grouping.py @@ -0,0 +1,122 @@ +"""Test generator""" + +import unittest + +from kedro.pipeline import Pipeline, node + +from kedro_vertexai.grouping import ( + GroupingException, + IdentityNodeGrouper, + TagNodeGrouper, +) + + +def identity(input1: str): + return input1 # pragma: no cover + + +class TestGenerator(unittest.TestCase): + legal_groups = ["g1", "g2", "g3", "g4", "g5", "group"] + illegal_groups = ["ig1"] + node_names = ["node1", "node1a", "node2", "node3"] + + def create_pipeline_deps(self): + return Pipeline( + [ + node( + identity, + "A", + "B", + name="node1", + tags=[ + "foo", + "group:group", + "g1:group", + "g2:group", + "ig1:group", + "g5:group", + ], + ), + node( + identity, + "B", + "B2", + name="node1a", + tags=[ + "bar", + "group:group", + "g1:group", + "g3:group", + "g4:group", + "g5:group", + ], + ), + node( + identity, + "B", + "C", + name="node2", + tags=["baz", "group:group", "g2:group", "g4:group", "g5:group2"], + ), + node( + identity, + "C", + "D", + name="node3", + tags=["wag", "group:group", "g3:group", "ig1:group", "g5:group2"], + ), + ] + ).node_dependencies + + def test_identity_grouping(self): + # given + deps = self.create_pipeline_deps() + grouper = IdentityNodeGrouper() + # when + group = grouper.group(deps) + for name in self.node_names: + assert name in group.nodes_mapping + assert name in group.dependencies + assert ( + len(group.nodes_mapping[name]) == 1 + and next(i for i in group.nodes_mapping[name]).name == name + ) + self.assertSetEqual(group.dependencies["node1"], set()) + self.assertSetEqual(group.dependencies["node1a"], {"node1"}) + assert group.dependencies["node2"] == {"node1"} + assert group.dependencies["node3"] == {"node2"} + + def test_legal_tag_groups(self): + # given + deps = self.create_pipeline_deps() + for prefix in self.legal_groups: + with self.subTest(msg=f"test_{prefix}", group_prefix=prefix): + grouper = TagNodeGrouper(prefix + ":") + # when + group = grouper.group(deps) + # assert + assert len(group.dependencies) < 4 + assert "group" in group.dependencies + + if prefix == "group": + assert len(group.dependencies) == 1 + assert group.dependencies["group"] == set() + assert len(group.nodes_mapping["group"]) == 4 + else: + assert len(group.nodes_mapping["group"]) == 2 + + # verify dependencies + if prefix == "g1": + self.assertSetEqual(group.dependencies["group"], set()) + self.assertSetEqual(group.dependencies["node2"], {"group"}) + self.assertSetEqual(group.dependencies["node3"], {"node2"}) + + def test_illegal_tag_groups(self): + # given + deps = self.create_pipeline_deps() + for prefix in self.illegal_groups: + with self.subTest(msg=f"test_{prefix}", group_prefix=prefix): + grouper = TagNodeGrouper(prefix + ":") + # when + with self.assertRaises(GroupingException): + grouper.group(deps) diff --git a/tests/test_vertex_ai_generator.py b/tests/test_vertex_ai_generator.py index 2e947cd..f810657 100644 --- a/tests/test_vertex_ai_generator.py +++ b/tests/test_vertex_ai_generator.py @@ -1,6 +1,7 @@ """Test generator""" import unittest +from copy import deepcopy from unittest.mock import MagicMock, patch import kfp @@ -25,11 +26,55 @@ class TestGenerator(unittest.TestCase): def create_pipeline(self): return Pipeline( [ - node(identity, "A", "B", name="node1"), - node(identity, "B", "C", name="node2"), + node(identity, "A", "B", name="node1", tags=["foo", "group:nodegroup"]), + node(identity, "B", "C", name="node2", tags=["bar", "group:nodegroup"]), ] ) + def test_should_group_when_enabled(self): + # given + expected1 = {"cpu": "100m"} + expected2 = {"cpu": "400m", "memory": "64Gi"} + base = { + "grouping": {"cls": "kedro_vertexai.grouping.TagNodeGrouper"}, + "resources": {"__default__": expected1}, + } + tags = ["node1", "nodegroup", "foo", "bar", "group:nodegroup"] + + configs = [] + for tag in tags: + testcfg = deepcopy(base) + testcfg["resources"][tag] = expected2 + configs.append(testcfg) + + expected = [expected1] + 4 * [expected2] + for cfg, exp in zip(configs, expected): + with self.subTest( + msg=str(next(key for key in cfg["resources"] if key != "__default__")) + ): + self.create_generator(config=cfg) + # when + with patch( + "kedro.framework.project.pipelines", + new=self.pipelines_under_test, + ): + pipeline = self.generator_under_test.generate_pipeline( + "pipeline", "unittest-image", "Never", "MLFLOW_TRACKING_TOKEN" + ) + with kfp.dsl.Pipeline(None) as dsl_pipeline: + pipeline() + + # then + assert ( + '--nodes "node1,node2"' + in dsl_pipeline.ops["nodegroup"].container.args[0] + or '--nodes "node2,node1"' + in dsl_pipeline.ops["nodegroup"].container.args[0] + ) + self.assertDictEqual( + dsl_pipeline.ops["nodegroup"].container.resources.requests, exp + ) + def test_support_modification_of_pull_policy(self): # given self.create_generator() @@ -338,14 +383,7 @@ def create_generator(self, config={}, params={}, catalog={}): }, ) - self.pipelines_under_test = { - "pipeline": Pipeline( - [ - node(identity, "A", "B", name="node1"), - node(identity, "B", "C", name="node2"), - ] - ) - } + self.pipelines_under_test = {"pipeline": self.create_pipeline()} config_with_defaults = { "image": "test", From 43d56a2cc7ad039dfae137a722290aa874f1e03d Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 21:44:45 +0100 Subject: [PATCH 15/37] docs: added comment on dependencies blockers --- pyproject.toml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 9fcea5b..40e2589 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,14 +32,15 @@ exclude_lines = [ known_third_party = ["click","google","kedro","kfp","kubernetes","tabulate", "pydantic","semver","setuptools"] [tool.poetry.dependencies] -python = ">=3.8,<3.11" # waiting for newest kedro-mlflow to bump to <3.12 +python = ">=3.8,<3.11" # so far blocked by kedro-mlflow at 0.11.10 kedro = ">=0.18.8,<0.19.0" click = ">=8.0.4" kfp = ">=1.8.21,<2.0" tabulate = ">=0.8.7" semver = ">=2.10,<4.0.0" -pyarrow = ">=14.0.1" # Stating explicitly for dependency dependency due to critical vulnerability -pydantic = ">=1.9.0,<2.0.0" +toposort = ">1.0,<2.0" +pyarrow = ">=14.0.1" # Stating explicitly for sub-dependency due to critical vulnerability +pydantic = ">=1.9.0,<2.0.0" # so far blocked by kedro-mlflow at 0.11.10 google-auth = "<3" google-cloud-scheduler = ">=2.3.2" google-cloud-iam = "<3" From b4fba774bd7e66896c8601179ca292ca058b9d98 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 21:52:28 +0100 Subject: [PATCH 16/37] updated changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a94f58..6178ee1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Added explicite pyarrow dependency to avoid critical vulnerability - Updated dependencies and tested for kedro `0.18.14` +- Feature: added option to group kedro some nodes together at execution in single vertex process to allow better optimization - less steps, delays at running images for vertex nodes and less wasted time of data serialization thanks to possibility to use InMemoryDataset at grouped nodes ## [0.9.1] - 2023-08-16 From 8ae0c498524f156246e0f28621e74a00517f8a78 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 22:32:01 +0100 Subject: [PATCH 17/37] docs: wrote docs about grouping feature, reenabled pyspelling check --- .pre-commit-config.yaml | 4 +++ .../02_installation/02_configuration.md | 32 +++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5bb94b6..f25ac2a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,3 +13,7 @@ repos: hooks: - id: flake8 args: ['--ignore=E203,W503', '--max-line-length=120'] # see https://github.com/psf/black/issues/315 https://github.com/psf/black/issues/52 +- repo: https://github.com/getindata/py-pre-commit-hooks + rev: v0.1.3 + hooks: + - id: pyspelling-docker diff --git a/docs/source/02_installation/02_configuration.md b/docs/source/02_installation/02_configuration.md index 58eebc9..1b842f7 100644 --- a/docs/source/02_installation/02_configuration.md +++ b/docs/source/02_installation/02_configuration.md @@ -26,6 +26,13 @@ run_config: # Optional pipeline description #description: "Very Important Pipeline" + # Optional config for node execution grouping based on tags. Specifying tag prefix enables this feature + grouping: + cls: kedro_vertexai.grouping.IdentityNodeGrouper + # cls: kedro_vertexai.grouping.TagNodeGrouper + # params: + # tag_prefix: "group:" + # How long to keep underlying Argo workflow (together with pods and data # volume after pipeline finishes) [in seconds]. Default: 1 week ttl: 604800 @@ -34,8 +41,10 @@ run_config: # pipeline status. Used to send notifications or raise the alerts # on_exit_pipeline: notify_via_slack - # Optional section allowing adjustment of the resources - # reservations and limits for the nodes + # Optional section allowing adjustment of the resources, reservations and limits + # for the nodes. You can specify node names or tags to select which nodes the requirements + # apply to (also in node selectors). When not provided they're set to 500m cpu and 1024Mi memory. + # If you don't want to specify pipeline resources set both to None in __default__. resources: # For nodes that require more RAM you can increase the "memory" @@ -170,6 +179,25 @@ def generate_config(self) -> dict: First one - `target_config_file` should return the name of the configuration file to be generated (e.g. `credentials.yml`) and the `generate_config` should return a dictionary, which will be then serialized into the target file as YAML. If the target file already exists during the invocation, it will be merged (see method `kedro_vertexai.dynamic_config.DynamicConfigProvider.merge_with_existing` ) with the existing one and then saved again. Note that the `generate_config` has access to an initialized plugin config via `self.config` property, so any values from the `vertexai.yml` configuration is accessible. + +## Grouping feature + +Optional `grouping` section allows to enable grouping feature that aggregates many kedro nodes execution to single VertexAI node. Using it gives you freedom to subdivide kedro pipelines to as many steps as logically makes sense and still have advantages of in memory data transmission via data catalog. It also saves you a lot of time on delays of docker container running at Vertex nodes which can take around 2 minutes for each node. + +API allows implementation of your own aggregation method. You can provide aggregating class and its init params `kwargs` dictionary of arguments. Default class is `IdentitiyNodeGrouper` which "groups" each node into separate group, effectively being transparent operation that does not change anything. Class that implements grouping by provided tag prefix is called `TagNodeGrouper`. The default prefix is `"group:"`. It uses what follows after tag the prefix as a name of group of nodes. Only one tag with this grouping prefix is allowed per node; more than that results in `GroupingException`. Example configuration: +```yaml + grouping: + cls: kedro_vertexai.grouping.TagNodeGrouper + params: + tag_prefix: "group:" +``` + +This grouping class is used at pipeline translation generator. It implements interface of `NodeGrouper` class with `group` function, that accepts `pipeline.node_dependencies` and returns `Grouping`. `Grouping` is a `dataclass` with two dictionaries: +- `node_mapping` - which defines names of groups and says which sets of nodes are part of a given group +- `dependencies` - which defines child-parent relation of all groups in `node_mapping`. +`Grouping` class also validates its dependencies upon creation to check whether grouping is valid - does not introduce a cycle after inconsistent grouping. + + ## Resources configuration Optional `resources` and `node_selectors` sections enable adjustment of the resources reservations and limits for the From aa60e1f1dad904bfa4d5d36a7a2d6cbc288dfe42 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 22:33:00 +0100 Subject: [PATCH 18/37] gitignore - added dictionary --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 198447e..c615b7b 100644 --- a/.gitignore +++ b/.gitignore @@ -174,3 +174,5 @@ terraform/terraform.tfstate .idea conf/azure/credentials.yml +# pyspelling +dictionary.dic From d2bb2580c009c2ce0669c303e1cb47083cce5c35 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 22:46:11 +0100 Subject: [PATCH 19/37] deps: fresh dependency update --- poetry.lock | 963 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 726 insertions(+), 237 deletions(-) diff --git a/poetry.lock b/poetry.lock index 2242b6e..ce3e53b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -461,6 +461,77 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "contourpy" +version = "1.1.1" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = true +python-versions = ">=3.8" +files = [ + {file = "contourpy-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:46e24f5412c948d81736509377e255f6040e94216bf1a9b5ea1eaa9d29f6ec1b"}, + {file = "contourpy-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e48694d6a9c5a26ee85b10130c77a011a4fedf50a7279fa0bdaf44bafb4299d"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66045af6cf00e19d02191ab578a50cb93b2028c3eefed999793698e9ea768ae"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ebf42695f75ee1a952f98ce9775c873e4971732a87334b099dde90b6af6a916"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6aec19457617ef468ff091669cca01fa7ea557b12b59a7908b9474bb9674cf0"}, + {file = "contourpy-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:462c59914dc6d81e0b11f37e560b8a7c2dbab6aca4f38be31519d442d6cde1a1"}, + {file = "contourpy-1.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d0a8efc258659edc5299f9ef32d8d81de8b53b45d67bf4bfa3067f31366764d"}, + {file = "contourpy-1.1.1-cp310-cp310-win32.whl", hash = "sha256:d6ab42f223e58b7dac1bb0af32194a7b9311065583cc75ff59dcf301afd8a431"}, + {file = "contourpy-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:549174b0713d49871c6dee90a4b499d3f12f5e5f69641cd23c50a4542e2ca1eb"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:407d864db716a067cc696d61fa1ef6637fedf03606e8417fe2aeed20a061e6b2"}, + {file = "contourpy-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe80c017973e6a4c367e037cb31601044dd55e6bfacd57370674867d15a899b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e30aaf2b8a2bac57eb7e1650df1b3a4130e8d0c66fc2f861039d507a11760e1b"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3de23ca4f381c3770dee6d10ead6fff524d540c0f662e763ad1530bde5112532"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:566f0e41df06dfef2431defcfaa155f0acfa1ca4acbf8fd80895b1e7e2ada40e"}, + {file = "contourpy-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b04c2f0adaf255bf756cf08ebef1be132d3c7a06fe6f9877d55640c5e60c72c5"}, + {file = "contourpy-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d0c188ae66b772d9d61d43c6030500344c13e3f73a00d1dc241da896f379bb62"}, + {file = "contourpy-1.1.1-cp311-cp311-win32.whl", hash = "sha256:0683e1ae20dc038075d92e0e0148f09ffcefab120e57f6b4c9c0f477ec171f33"}, + {file = "contourpy-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:8636cd2fc5da0fb102a2504fa2c4bea3cbc149533b345d72cdf0e7a924decc45"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:560f1d68a33e89c62da5da4077ba98137a5e4d3a271b29f2f195d0fba2adcb6a"}, + {file = "contourpy-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24216552104ae8f3b34120ef84825400b16eb6133af2e27a190fdc13529f023e"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56de98a2fb23025882a18b60c7f0ea2d2d70bbbcfcf878f9067234b1c4818442"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:07d6f11dfaf80a84c97f1a5ba50d129d9303c5b4206f776e94037332e298dda8"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1eaac5257a8f8a047248d60e8f9315c6cff58f7803971170d952555ef6344a7"}, + {file = "contourpy-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19557fa407e70f20bfaba7d55b4d97b14f9480856c4fb65812e8a05fe1c6f9bf"}, + {file = "contourpy-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:081f3c0880712e40effc5f4c3b08feca6d064cb8cfbb372ca548105b86fd6c3d"}, + {file = "contourpy-1.1.1-cp312-cp312-win32.whl", hash = "sha256:059c3d2a94b930f4dafe8105bcdc1b21de99b30b51b5bce74c753686de858cb6"}, + {file = "contourpy-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:f44d78b61740e4e8c71db1cf1fd56d9050a4747681c59ec1094750a658ceb970"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:70e5a10f8093d228bb2b552beeb318b8928b8a94763ef03b858ef3612b29395d"}, + {file = "contourpy-1.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8394e652925a18ef0091115e3cc191fef350ab6dc3cc417f06da66bf98071ae9"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bd5680f844c3ff0008523a71949a3ff5e4953eb7701b28760805bc9bcff217"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66544f853bfa85c0d07a68f6c648b2ec81dafd30f272565c37ab47a33b220684"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0c02b75acfea5cab07585d25069207e478d12309557f90a61b5a3b4f77f46ce"}, + {file = "contourpy-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41339b24471c58dc1499e56783fedc1afa4bb018bcd035cfb0ee2ad2a7501ef8"}, + {file = "contourpy-1.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f29fb0b3f1217dfe9362ec55440d0743fe868497359f2cf93293f4b2701b8251"}, + {file = "contourpy-1.1.1-cp38-cp38-win32.whl", hash = "sha256:f9dc7f933975367251c1b34da882c4f0e0b2e24bb35dc906d2f598a40b72bfc7"}, + {file = "contourpy-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:498e53573e8b94b1caeb9e62d7c2d053c263ebb6aa259c81050766beb50ff8d9"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba42e3810999a0ddd0439e6e5dbf6d034055cdc72b7c5c839f37a7c274cb4eba"}, + {file = "contourpy-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c06e4c6e234fcc65435223c7b2a90f286b7f1b2733058bdf1345d218cc59e34"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca6fab080484e419528e98624fb5c4282148b847e3602dc8dbe0cb0669469887"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93df44ab351119d14cd1e6b52a5063d3336f0754b72736cc63db59307dabb718"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eafbef886566dc1047d7b3d4b14db0d5b7deb99638d8e1be4e23a7c7ac59ff0f"}, + {file = "contourpy-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efe0fab26d598e1ec07d72cf03eaeeba8e42b4ecf6b9ccb5a356fde60ff08b85"}, + {file = "contourpy-1.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f08e469821a5e4751c97fcd34bcb586bc243c39c2e39321822060ba902eac49e"}, + {file = "contourpy-1.1.1-cp39-cp39-win32.whl", hash = "sha256:bfc8a5e9238232a45ebc5cb3bfee71f1167064c8d382cadd6076f0d51cff1da0"}, + {file = "contourpy-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:c84fdf3da00c2827d634de4fcf17e3e067490c4aea82833625c4c8e6cdea0887"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:229a25f68046c5cf8067d6d6351c8b99e40da11b04d8416bf8d2b1d75922521e"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a10dab5ea1bd4401c9483450b5b0ba5416be799bbd50fc7a6cc5e2a15e03e8a3"}, + {file = "contourpy-1.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4f9147051cb8fdb29a51dc2482d792b3b23e50f8f57e3720ca2e3d438b7adf23"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a75cc163a5f4531a256f2c523bd80db509a49fc23721b36dd1ef2f60ff41c3cb"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b53d5769aa1f2d4ea407c65f2d1d08002952fac1d9e9d307aa2e1023554a163"}, + {file = "contourpy-1.1.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11b836b7dbfb74e049c302bbf74b4b8f6cb9d0b6ca1bf86cfa8ba144aedadd9c"}, + {file = "contourpy-1.1.1.tar.gz", hash = "sha256:96ba37c2e24b7212a77da85004c38e7c4d155d3e72a45eeaf22c1f03f607e8ab"}, +] + +[package.dependencies] +numpy = {version = ">=1.16,<2.0", markers = "python_version <= \"3.11\""} + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.4.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "wurlitzer"] + [[package]] name = "cookiecutter" version = "2.4.0" @@ -549,6 +620,21 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1 [package.extras] toml = ["tomli"] +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = true +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "databricks-cli" version = "0.18.0" @@ -739,6 +825,71 @@ Werkzeug = ">=3.0.0" async = ["asgiref (>=3.2)"] dotenv = ["python-dotenv"] +[[package]] +name = "fonttools" +version = "4.44.3" +description = "Tools to manipulate font files" +optional = true +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.44.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:192ebdb3bb1882b7ed3ad4b949a106ddd8b428d046ddce64df2d459f7a2db31b"}, + {file = "fonttools-4.44.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20898476cf9c61795107b91409f4b1cf86de6e92b41095bbe900c05b5b117c96"}, + {file = "fonttools-4.44.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:437204780611f9f80f74cd4402fa451e920d1c4b6cb474a0818a734b4affc477"}, + {file = "fonttools-4.44.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50152205ed3e16c5878a006ee53ecc402acac9af68357343be1e5c36f66ccb24"}, + {file = "fonttools-4.44.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ba9c407d8bd63b21910b98399aeec87e24ca9c3e62ea60c246e505c4a4df6c27"}, + {file = "fonttools-4.44.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:79a6babb87d7f70f8aed88f157bbdc5d2f01ad8b01e9535ff07e43e96ad25548"}, + {file = "fonttools-4.44.3-cp310-cp310-win32.whl", hash = "sha256:32e8a5cebfe8f797461b02084104053b2690ebf0cc38eda5beb9ba24ce43c349"}, + {file = "fonttools-4.44.3-cp310-cp310-win_amd64.whl", hash = "sha256:c26649a6ce6f1ce4dd6748f64b18f70e39c618c6188286ab9534a949da28164c"}, + {file = "fonttools-4.44.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5cd114cb20b491f6812aa397040b06a469563c1a01ec94c8c5d96b76d84916db"}, + {file = "fonttools-4.44.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e84084cc325f888c3495df7ec25f6133be0f606efb80a9c9e072ea6064ede9ac"}, + {file = "fonttools-4.44.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:877e36afce69cfdbd0453a4f44b16e865ac29f06df29f10f0b822a68ab858e86"}, + {file = "fonttools-4.44.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c2cb1e2a7cfeaeb40b8823f238d7e02929b3a0b53e133e757dec5e99c327c9"}, + {file = "fonttools-4.44.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dd752b778b37863cf5146d0112aafcd5693235831f09303809ab9c1e564c236b"}, + {file = "fonttools-4.44.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8f4e22c5128cb604d3b0b869eb8d3092a1c10cbe6def402ff46bb920f7169374"}, + {file = "fonttools-4.44.3-cp311-cp311-win32.whl", hash = "sha256:4831d948bc3cea9cd8bf0c92a087f4392068bcac3b584a61a4c837c48a012337"}, + {file = "fonttools-4.44.3-cp311-cp311-win_amd64.whl", hash = "sha256:948b35e54b0c1b6acf9d63c70515051b7d400d69b61c91377cf0e8742d71c44d"}, + {file = "fonttools-4.44.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:fad1c74aa10b77764d3cdf3481bd181d4949e0b46f2da6f9e57543d4adbda177"}, + {file = "fonttools-4.44.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b6a77e3b994649f72fb46b0b8cfe64481b5640e5aecc2d77961300a34fe1dc4f"}, + {file = "fonttools-4.44.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bff4f9d5edc10b29d2a2daeefd78a47289ba2f751c9bf247925b9d43c6efd79"}, + {file = "fonttools-4.44.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3302998e02a854a41c930f9f1366eb8092dbc5fe7ff636d86aeb28d232f4610a"}, + {file = "fonttools-4.44.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8c7985017e7fb2c2613fa5c440457cd45a6ea808f8d08ed70c27e02e6862cbbe"}, + {file = "fonttools-4.44.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:35d88af2b63060ed2b50aa00d38f60edf4c0b9275a77ae1a98e8d2c03540c617"}, + {file = "fonttools-4.44.3-cp312-cp312-win32.whl", hash = "sha256:5478a77a15d01a21c569fc4ab6f2faba852a21d0932eef02ac4c4a4b50af8070"}, + {file = "fonttools-4.44.3-cp312-cp312-win_amd64.whl", hash = "sha256:979fc845703e0d9b35bc65379fcf34d050e04c3e0b3381a0f66b0be33183da1c"}, + {file = "fonttools-4.44.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7a8b9f22d3c147ecdc7be46f9f1e1df0523541df0535fac5bdd653726218d068"}, + {file = "fonttools-4.44.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb0fde94374ba00c118d632b0b5f1f4447401313166bcb14d737322928e358f"}, + {file = "fonttools-4.44.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eb365cd8ae4765973fa036aed0077ac26f37b2f8240a72c4a29cd9d8a31027f"}, + {file = "fonttools-4.44.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c329e21502c894fe4c800e32bc3ce37c6b5ca95778d32dff17d7ebf5cac94efa"}, + {file = "fonttools-4.44.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:345a30db8adfbb868221234fb434dd2fc5bfe27baafbaf418528f6c5a5a95584"}, + {file = "fonttools-4.44.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2fe4eed749de2e6bf3aa05d18df04231a712a16c08974af5e67bb9f75a25d10f"}, + {file = "fonttools-4.44.3-cp38-cp38-win32.whl", hash = "sha256:3b179a284b73802edd6d910e6384f28098cb03bd263fd87db6abb31679f68863"}, + {file = "fonttools-4.44.3-cp38-cp38-win_amd64.whl", hash = "sha256:4c805a0b0545fd9becf6dfe8d57e45a7c1af7fdbfd0a7d776c5e999e4edec9f5"}, + {file = "fonttools-4.44.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f647d270ee90f70acbf5b31a53d486ba0897624236f9056d624c4e436386a14e"}, + {file = "fonttools-4.44.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ba82ee938bd7ea16762124a650bf2529f67dfe9999f64e0ebe1ef0a04baceafd"}, + {file = "fonttools-4.44.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3bbca4f873d96c20757c24c70a903251a8998e1931bd888b49956f21d94b441"}, + {file = "fonttools-4.44.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50b43fd55089ae850a050f0c382f13fc9586279a540b646b28b9e93fbc05b8a3"}, + {file = "fonttools-4.44.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cde83f83919ae7569a0316e093e04022dbb8ae5217f41cf591f125dd35d4dc0d"}, + {file = "fonttools-4.44.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:72ec91b85391dd4b06991c0919215ecf910554df2842df32e928155ea5b74aef"}, + {file = "fonttools-4.44.3-cp39-cp39-win32.whl", hash = "sha256:367aa3e81a096e9a95dfc0d5afcbd0a299d857bac6d0fe5f1614c6f3e53f447f"}, + {file = "fonttools-4.44.3-cp39-cp39-win_amd64.whl", hash = "sha256:718599de63b337518bfa5ce67e4ae462da3dd582a74fbe805f56b3704eb334a1"}, + {file = "fonttools-4.44.3-py3-none-any.whl", hash = "sha256:42eefbb1babf81de40ab4a6ace6018c8c5a0d79ece0f986f73a9904b26ee511b"}, + {file = "fonttools-4.44.3.tar.gz", hash = "sha256:f77b6c0add23a3f1ec8eda40015bcb8e92796f7d06a074de102a31c7d007c05b"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "scipy"] +lxml = ["lxml (>=4.0,<5)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + [[package]] name = "frozenlist" version = "1.4.0" @@ -1034,13 +1185,13 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 [[package]] name = "google-cloud-scheduler" -version = "2.11.2" +version = "2.11.3" description = "Google Cloud Scheduler API client library" optional = false python-versions = ">=3.7" files = [ - {file = "google-cloud-scheduler-2.11.2.tar.gz", hash = "sha256:8ccc66f4d52453f4c927894646ef6c8f1913cfa5479d15aa96e90f558a4256b7"}, - {file = "google_cloud_scheduler-2.11.2-py2.py3-none-any.whl", hash = "sha256:911d0018132365cb160ca2ee248e56e3b83951f57586223463ad85c07386e53b"}, + {file = "google-cloud-scheduler-2.11.3.tar.gz", hash = "sha256:c44e0ed172087317dda7d66152fbd1832331df2554169d4eb46e22cfbaa7cda2"}, + {file = "google_cloud_scheduler-2.11.3-py2.py3-none-any.whl", hash = "sha256:57fdff27e2f778f84ccd5a1e161f9c49949402bb4e76bd34060513dcef1ca5c7"}, ] [package.dependencies] @@ -1257,69 +1408,69 @@ test = ["objgraph", "psutil"] [[package]] name = "grpcio" -version = "1.59.2" +version = "1.59.3" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.7" files = [ - {file = "grpcio-1.59.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:d2fa68a96a30dd240be80bbad838a0ac81a61770611ff7952b889485970c4c71"}, - {file = "grpcio-1.59.2-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cf0dead5a2c5a3347af2cfec7131d4f2a2e03c934af28989c9078f8241a491fa"}, - {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:e420ced29b5904cdf9ee5545e23f9406189d8acb6750916c2db4793dada065c6"}, - {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b230028a008ae1d0f430acb227d323ff8a619017415cf334c38b457f814119f"}, - {file = "grpcio-1.59.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a4a3833c0e067f3558538727235cd8a49709bff1003200bbdefa2f09334e4b1"}, - {file = "grpcio-1.59.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6b25ed37c27e652db01be341af93fbcea03d296c024d8a0e680017a268eb85dd"}, - {file = "grpcio-1.59.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73abb8584b0cf74d37f5ef61c10722adc7275502ab71789a8fe3cb7ef04cf6e2"}, - {file = "grpcio-1.59.2-cp310-cp310-win32.whl", hash = "sha256:d6f70406695e3220f09cd7a2f879333279d91aa4a8a1d34303b56d61a8180137"}, - {file = "grpcio-1.59.2-cp310-cp310-win_amd64.whl", hash = "sha256:3c61d641d4f409c5ae46bfdd89ea42ce5ea233dcf69e74ce9ba32b503c727e29"}, - {file = "grpcio-1.59.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:3059668df17627f0e0fa680e9ef8c995c946c792612e9518f5cc1503be14e90b"}, - {file = "grpcio-1.59.2-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:72ca2399097c0b758198f2ff30f7178d680de8a5cfcf3d9b73a63cf87455532e"}, - {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c978f864b35f2261e0819f5cd88b9830b04dc51bcf055aac3c601e525a10d2ba"}, - {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9411e24328a2302e279e70cae6e479f1fddde79629fcb14e03e6d94b3956eabf"}, - {file = "grpcio-1.59.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb7e0fe6ad73b7f06d7e2b689c19a71cf5cc48f0c2bf8608469e51ffe0bd2867"}, - {file = "grpcio-1.59.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c2504eed520958a5b77cc99458297cb7906308cb92327f35fb7fbbad4e9b2188"}, - {file = "grpcio-1.59.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2171c39f355ba5b551c5d5928d65aa6c69807fae195b86ef4a7d125bcdb860a9"}, - {file = "grpcio-1.59.2-cp311-cp311-win32.whl", hash = "sha256:d2794f0e68b3085d99b4f6ff9c089f6fdd02b32b9d3efdfbb55beac1bf22d516"}, - {file = "grpcio-1.59.2-cp311-cp311-win_amd64.whl", hash = "sha256:2067274c88bc6de89c278a672a652b4247d088811ece781a4858b09bdf8448e3"}, - {file = "grpcio-1.59.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:535561990e075fa6bd4b16c4c3c1096b9581b7bb35d96fac4650f1181e428268"}, - {file = "grpcio-1.59.2-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:a213acfbf186b9f35803b52e4ca9addb153fc0b67f82a48f961be7000ecf6721"}, - {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:6959fb07e8351e20501ffb8cc4074c39a0b7ef123e1c850a7f8f3afdc3a3da01"}, - {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e82c5cf1495244adf5252f925ac5932e5fd288b3e5ab6b70bec5593074b7236c"}, - {file = "grpcio-1.59.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:023088764012411affe7db183d1ada3ad9daf2e23ddc719ff46d7061de661340"}, - {file = "grpcio-1.59.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:da2d94c15f88cd40d7e67f7919d4f60110d2b9d5b1e08cf354c2be773ab13479"}, - {file = "grpcio-1.59.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:6009386a2df66159f64ac9f20425ae25229b29b9dd0e1d3dd60043f037e2ad7e"}, - {file = "grpcio-1.59.2-cp312-cp312-win32.whl", hash = "sha256:75c6ecb70e809cf1504465174343113f51f24bc61e22a80ae1c859f3f7034c6d"}, - {file = "grpcio-1.59.2-cp312-cp312-win_amd64.whl", hash = "sha256:cbe946b3e6e60a7b4618f091e62a029cb082b109a9d6b53962dd305087c6e4fd"}, - {file = "grpcio-1.59.2-cp37-cp37m-linux_armv7l.whl", hash = "sha256:f8753a6c88d1d0ba64302309eecf20f70d2770f65ca02d83c2452279085bfcd3"}, - {file = "grpcio-1.59.2-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:f1ef0d39bc1feb420caf549b3c657c871cad4ebbcf0580c4d03816b0590de0cf"}, - {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:4c93f4abbb54321ee6471e04a00139c80c754eda51064187963ddf98f5cf36a4"}, - {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08d77e682f2bf730a4961eea330e56d2f423c6a9b91ca222e5b1eb24a357b19f"}, - {file = "grpcio-1.59.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff16d68bf453275466a9a46739061a63584d92f18a0f5b33d19fc97eb69867c"}, - {file = "grpcio-1.59.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4abb717e320e74959517dc8e84a9f48fbe90e9abe19c248541e9418b1ce60acd"}, - {file = "grpcio-1.59.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:36f53c2b3449c015880e7d55a89c992c357f176327b0d2873cdaaf9628a37c69"}, - {file = "grpcio-1.59.2-cp37-cp37m-win_amd64.whl", hash = "sha256:cc3e4cd087f07758b16bef8f31d88dbb1b5da5671d2f03685ab52dece3d7a16e"}, - {file = "grpcio-1.59.2-cp38-cp38-linux_armv7l.whl", hash = "sha256:27f879ae604a7fcf371e59fba6f3ff4635a4c2a64768bd83ff0cac503142fef4"}, - {file = "grpcio-1.59.2-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:7cf05053242f61ba94014dd3a986e11a083400a32664058f80bf4cf817c0b3a1"}, - {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:e1727c1c0e394096bb9af185c6923e8ea55a5095b8af44f06903bcc0e06800a2"}, - {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d573e70a6fe77555fb6143c12d3a7d3fa306632a3034b4e7c59ca09721546f8"}, - {file = "grpcio-1.59.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31176aa88f36020055ace9adff2405a33c8bdbfa72a9c4980e25d91b2f196873"}, - {file = "grpcio-1.59.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:11168ef43e4a43ff1b1a65859f3e0ef1a173e277349e7fb16923ff108160a8cd"}, - {file = "grpcio-1.59.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:53c9aa5ddd6857c0a1cd0287225a2a25873a8e09727c2e95c4aebb1be83a766a"}, - {file = "grpcio-1.59.2-cp38-cp38-win32.whl", hash = "sha256:3b4368b33908f683a363f376dfb747d40af3463a6e5044afee07cf9436addf96"}, - {file = "grpcio-1.59.2-cp38-cp38-win_amd64.whl", hash = "sha256:0a754aff9e3af63bdc4c75c234b86b9d14e14a28a30c4e324aed1a9b873d755f"}, - {file = "grpcio-1.59.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:1f9524d1d701e399462d2c90ba7c193e49d1711cf429c0d3d97c966856e03d00"}, - {file = "grpcio-1.59.2-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:f93dbf58f03146164048be5426ffde298b237a5e059144847e4940f5b80172c3"}, - {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:6da6dea3a1bacf99b3c2187e296db9a83029ed9c38fd4c52b7c9b7326d13c828"}, - {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5f09cffa619adfb44799fa4a81c2a1ad77c887187613fb0a8f201ab38d89ba1"}, - {file = "grpcio-1.59.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c35aa9657f5d5116d23b934568e0956bd50c615127810fffe3ac356a914c176a"}, - {file = "grpcio-1.59.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:74100fecaec8a535e380cf5f2fb556ff84957d481c13e54051c52e5baac70541"}, - {file = "grpcio-1.59.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:128e20f57c5f27cb0157e73756d1586b83c1b513ebecc83ea0ac37e4b0e4e758"}, - {file = "grpcio-1.59.2-cp39-cp39-win32.whl", hash = "sha256:686e975a5d16602dc0982c7c703948d17184bd1397e16c8ee03511ecb8c4cdda"}, - {file = "grpcio-1.59.2-cp39-cp39-win_amd64.whl", hash = "sha256:242adc47725b9a499ee77c6a2e36688fa6c96484611f33b1be4c57ab075a92dd"}, - {file = "grpcio-1.59.2.tar.gz", hash = "sha256:d8f9cd4ad1be90b0cf350a2f04a38a36e44a026cac1e036ac593dc48efe91d52"}, -] - -[package.extras] -protobuf = ["grpcio-tools (>=1.59.2)"] + {file = "grpcio-1.59.3-cp310-cp310-linux_armv7l.whl", hash = "sha256:aca028a6c7806e5b61e5f9f4232432c52856f7fcb98e330b20b6bc95d657bdcc"}, + {file = "grpcio-1.59.3-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:19ad26a7967f7999c8960d2b9fe382dae74c55b0c508c613a6c2ba21cddf2354"}, + {file = "grpcio-1.59.3-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:72b71dad2a3d1650e69ad42a5c4edbc59ee017f08c32c95694172bc501def23c"}, + {file = "grpcio-1.59.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c0f0a11d82d0253656cc42e04b6a149521e02e755fe2e4edd21123de610fd1d4"}, + {file = "grpcio-1.59.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60cddafb70f9a2c81ba251b53b4007e07cca7389e704f86266e22c4bffd8bf1d"}, + {file = "grpcio-1.59.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6c75a1fa0e677c1d2b6d4196ad395a5c381dfb8385f07ed034ef667cdcdbcc25"}, + {file = "grpcio-1.59.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e1d8e01438d5964a11167eec1edb5f85ed8e475648f36c834ed5db4ffba24ac8"}, + {file = "grpcio-1.59.3-cp310-cp310-win32.whl", hash = "sha256:c4b0076f0bf29ee62335b055a9599f52000b7941f577daa001c7ef961a1fbeab"}, + {file = "grpcio-1.59.3-cp310-cp310-win_amd64.whl", hash = "sha256:b1f00a3e6e0c3dccccffb5579fc76ebfe4eb40405ba308505b41ef92f747746a"}, + {file = "grpcio-1.59.3-cp311-cp311-linux_armv7l.whl", hash = "sha256:3996aaa21231451161dc29df6a43fcaa8b332042b6150482c119a678d007dd86"}, + {file = "grpcio-1.59.3-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:cb4e9cbd9b7388fcb06412da9f188c7803742d06d6f626304eb838d1707ec7e3"}, + {file = "grpcio-1.59.3-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8022ca303d6c694a0d7acfb2b472add920217618d3a99eb4b14edc7c6a7e8fcf"}, + {file = "grpcio-1.59.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b36683fad5664283755a7f4e2e804e243633634e93cd798a46247b8e54e3cb0d"}, + {file = "grpcio-1.59.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8239b853226e4824e769517e1b5232e7c4dda3815b200534500338960fcc6118"}, + {file = "grpcio-1.59.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0511af8653fbda489ff11d542a08505d56023e63cafbda60e6e00d4e0bae86ea"}, + {file = "grpcio-1.59.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e78dc982bda74cef2ddfce1c91d29b96864c4c680c634e279ed204d51e227473"}, + {file = "grpcio-1.59.3-cp311-cp311-win32.whl", hash = "sha256:6a5c3a96405966c023e139c3bcccb2c7c776a6f256ac6d70f8558c9041bdccc3"}, + {file = "grpcio-1.59.3-cp311-cp311-win_amd64.whl", hash = "sha256:ed26826ee423b11477297b187371cdf4fa1eca874eb1156422ef3c9a60590dd9"}, + {file = "grpcio-1.59.3-cp312-cp312-linux_armv7l.whl", hash = "sha256:45dddc5cb5227d30fa43652d8872dc87f086d81ab4b500be99413bad0ae198d7"}, + {file = "grpcio-1.59.3-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:1736496d74682e53dd0907fd515f2694d8e6a96c9a359b4080b2504bf2b2d91b"}, + {file = "grpcio-1.59.3-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:ddbd1a16138e52e66229047624de364f88a948a4d92ba20e4e25ad7d22eef025"}, + {file = "grpcio-1.59.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcfa56f8d031ffda902c258c84c4b88707f3a4be4827b4e3ab8ec7c24676320d"}, + {file = "grpcio-1.59.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2eb8f0c7c0c62f7a547ad7a91ba627a5aa32a5ae8d930783f7ee61680d7eb8d"}, + {file = "grpcio-1.59.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8d993399cc65e3a34f8fd48dd9ad7a376734564b822e0160dd18b3d00c1a33f9"}, + {file = "grpcio-1.59.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0bd141f4f41907eb90bda74d969c3cb21c1c62779419782a5b3f5e4b5835718"}, + {file = "grpcio-1.59.3-cp312-cp312-win32.whl", hash = "sha256:33b8fd65d4e97efa62baec6171ce51f9cf68f3a8ba9f866f4abc9d62b5c97b79"}, + {file = "grpcio-1.59.3-cp312-cp312-win_amd64.whl", hash = "sha256:0e735ed002f50d4f3cb9ecfe8ac82403f5d842d274c92d99db64cfc998515e07"}, + {file = "grpcio-1.59.3-cp37-cp37m-linux_armv7l.whl", hash = "sha256:ea40ce4404e7cca0724c91a7404da410f0144148fdd58402a5942971e3469b94"}, + {file = "grpcio-1.59.3-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:83113bcc393477b6f7342b9f48e8a054330c895205517edc66789ceea0796b53"}, + {file = "grpcio-1.59.3-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:73afbac602b8f1212a50088193601f869b5073efa9855b3e51aaaec97848fc8a"}, + {file = "grpcio-1.59.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:575d61de1950b0b0699917b686b1ca108690702fcc2df127b8c9c9320f93e069"}, + {file = "grpcio-1.59.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cd76057b5c9a4d68814610ef9226925f94c1231bbe533fdf96f6181f7d2ff9e"}, + {file = "grpcio-1.59.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:95d6fd804c81efe4879e38bfd84d2b26e339a0a9b797e7615e884ef4686eb47b"}, + {file = "grpcio-1.59.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0d42048b8a3286ea4134faddf1f9a59cf98192b94aaa10d910a25613c5eb5bfb"}, + {file = "grpcio-1.59.3-cp37-cp37m-win_amd64.whl", hash = "sha256:4619fea15c64bcdd9d447cdbdde40e3d5f1da3a2e8ae84103d94a9c1df210d7e"}, + {file = "grpcio-1.59.3-cp38-cp38-linux_armv7l.whl", hash = "sha256:95b5506e70284ac03b2005dd9ffcb6708c9ae660669376f0192a710687a22556"}, + {file = "grpcio-1.59.3-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:9e17660947660ccfce56c7869032910c179a5328a77b73b37305cd1ee9301c2e"}, + {file = "grpcio-1.59.3-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:00912ce19914d038851be5cd380d94a03f9d195643c28e3ad03d355cc02ce7e8"}, + {file = "grpcio-1.59.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e58b3cadaa3c90f1efca26ba33e0d408b35b497307027d3d707e4bcd8de862a6"}, + {file = "grpcio-1.59.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d787ecadea865bdf78f6679f6f5bf4b984f18f659257ba612979df97a298b3c3"}, + {file = "grpcio-1.59.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0814942ba1bba269db4e760a34388640c601dece525c6a01f3b4ff030cc0db69"}, + {file = "grpcio-1.59.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fb111aa99d3180c361a35b5ae1e2c63750220c584a1344229abc139d5c891881"}, + {file = "grpcio-1.59.3-cp38-cp38-win32.whl", hash = "sha256:eb8ba504c726befe40a356ecbe63c6c3c64c9a439b3164f5a718ec53c9874da0"}, + {file = "grpcio-1.59.3-cp38-cp38-win_amd64.whl", hash = "sha256:cdbc6b32fadab9bebc6f49d3e7ec4c70983c71e965497adab7f87de218e84391"}, + {file = "grpcio-1.59.3-cp39-cp39-linux_armv7l.whl", hash = "sha256:c82ca1e4be24a98a253d6dbaa216542e4163f33f38163fc77964b0f0d255b552"}, + {file = "grpcio-1.59.3-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:36636babfda14f9e9687f28d5b66d349cf88c1301154dc71c6513de2b6c88c59"}, + {file = "grpcio-1.59.3-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:5f9b2e591da751ac7fdd316cc25afafb7a626dededa9b414f90faad7f3ccebdb"}, + {file = "grpcio-1.59.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a93a82876a4926bf451db82ceb725bd87f42292bacc94586045261f501a86994"}, + {file = "grpcio-1.59.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce31fa0bfdd1f2bb15b657c16105c8652186eab304eb512e6ae3b99b2fdd7d13"}, + {file = "grpcio-1.59.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:16da0e40573962dab6cba16bec31f25a4f468e6d05b658e589090fe103b03e3d"}, + {file = "grpcio-1.59.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d1d1a17372fd425addd5812049fa7374008ffe689585f27f802d0935522cf4b7"}, + {file = "grpcio-1.59.3-cp39-cp39-win32.whl", hash = "sha256:52cc38a7241b5f7b4a91aaf9000fdd38e26bb00d5e8a71665ce40cfcee716281"}, + {file = "grpcio-1.59.3-cp39-cp39-win_amd64.whl", hash = "sha256:b491e5bbcad3020a96842040421e508780cade35baba30f402df9d321d1c423e"}, + {file = "grpcio-1.59.3.tar.gz", hash = "sha256:7800f99568a74a06ebdccd419dd1b6e639b477dcaf6da77ea702f8fb14ce5f80"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.59.3)"] [[package]] name = "grpcio-status" @@ -1483,15 +1634,26 @@ files = [ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] +[[package]] +name = "joblib" +version = "1.3.2" +description = "Lightweight pipelining with Python functions" +optional = true +python-versions = ">=3.7" +files = [ + {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, + {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, +] + [[package]] name = "jsonschema" -version = "4.19.2" +version = "4.20.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.19.2-py3-none-any.whl", hash = "sha256:eee9e502c788e89cb166d4d37f43084e3b64ab405c795c03d343a4dbc2c810fc"}, - {file = "jsonschema-4.19.2.tar.gz", hash = "sha256:c9ff4d7447eed9592c23a12ccee508baf0dd0d59650615e847feb6cdca74f392"}, + {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"}, + {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"}, ] [package.dependencies] @@ -1508,18 +1670,18 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.7.1" +version = "2023.11.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, - {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, + {file = "jsonschema_specifications-2023.11.1-py3-none-any.whl", hash = "sha256:f596778ab612b3fd29f72ea0d990393d0540a5aab18bf0407a46632eab540779"}, + {file = "jsonschema_specifications-2023.11.1.tar.gz", hash = "sha256:c9b234904ffe02f079bf91b14d79987faa685fd4b39c377a0996954c0090b9ca"}, ] [package.dependencies] importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -referencing = ">=0.28.0" +referencing = ">=0.31.0" [[package]] name = "kedro" @@ -1698,6 +1860,119 @@ python-dateutil = "*" six = ">=1.10" urllib3 = ">=1.15" +[[package]] +name = "kiwisolver" +version = "1.4.5" +description = "A fast implementation of the Cassowary constraint solver" +optional = true +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:05703cf211d585109fcd72207a31bb170a0f22144d68298dc5e61b3c946518af"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:146d14bebb7f1dc4d5fbf74f8a6cb15ac42baadee8912eb84ac0b3b2a3dc6ac3"}, + {file = "kiwisolver-1.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ef7afcd2d281494c0a9101d5c571970708ad911d028137cd558f02b851c08b4"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9eaa8b117dc8337728e834b9c6e2611f10c79e38f65157c4c38e9400286f5cb1"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec20916e7b4cbfb1f12380e46486ec4bcbaa91a9c448b97023fde0d5bbf9e4ff"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39b42c68602539407884cf70d6a480a469b93b81b7701378ba5e2328660c847a"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa12042de0171fad672b6c59df69106d20d5596e4f87b5e8f76df757a7c399aa"}, + {file = "kiwisolver-1.4.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a40773c71d7ccdd3798f6489aaac9eee213d566850a9533f8d26332d626b82c"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:19df6e621f6d8b4b9c4d45f40a66839294ff2bb235e64d2178f7522d9170ac5b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:83d78376d0d4fd884e2c114d0621624b73d2aba4e2788182d286309ebdeed770"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e391b1f0a8a5a10ab3b9bb6afcfd74f2175f24f8975fb87ecae700d1503cdee0"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:852542f9481f4a62dbb5dd99e8ab7aedfeb8fb6342349a181d4036877410f525"}, + {file = "kiwisolver-1.4.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59edc41b24031bc25108e210c0def6f6c2191210492a972d585a06ff246bb79b"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win32.whl", hash = "sha256:a6aa6315319a052b4ee378aa171959c898a6183f15c1e541821c5c59beaa0238"}, + {file = "kiwisolver-1.4.5-cp310-cp310-win_amd64.whl", hash = "sha256:d0ef46024e6a3d79c01ff13801cb19d0cad7fd859b15037aec74315540acc276"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:11863aa14a51fd6ec28688d76f1735f8f69ab1fabf388851a595d0721af042f5"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ab3919a9997ab7ef2fbbed0cc99bb28d3c13e6d4b1ad36e97e482558a91be90"}, + {file = "kiwisolver-1.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fcc700eadbbccbf6bc1bcb9dbe0786b4b1cb91ca0dcda336eef5c2beed37b797"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dfdd7c0b105af050eb3d64997809dc21da247cf44e63dc73ff0fd20b96be55a9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c6a5964640638cdeaa0c359382e5703e9293030fe730018ca06bc2010c4437"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bbea0db94288e29afcc4c28afbf3a7ccaf2d7e027489c449cf7e8f83c6346eb9"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ceec1a6bc6cab1d6ff5d06592a91a692f90ec7505d6463a88a52cc0eb58545da"}, + {file = "kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:040c1aebeda72197ef477a906782b5ab0d387642e93bda547336b8957c61022e"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f91de7223d4c7b793867797bacd1ee53bfe7359bd70d27b7b58a04efbb9436c8"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:faae4860798c31530dd184046a900e652c95513796ef51a12bc086710c2eec4d"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:b0157420efcb803e71d1b28e2c287518b8808b7cf1ab8af36718fd0a2c453eb0"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:06f54715b7737c2fecdbf140d1afb11a33d59508a47bf11bb38ecf21dc9ab79f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fdb7adb641a0d13bdcd4ef48e062363d8a9ad4a182ac7647ec88f695e719ae9f"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win32.whl", hash = "sha256:bb86433b1cfe686da83ce32a9d3a8dd308e85c76b60896d58f082136f10bffac"}, + {file = "kiwisolver-1.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c08e1312a9cf1074d17b17728d3dfce2a5125b2d791527f33ffbe805200a355"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:32d5cf40c4f7c7b3ca500f8985eb3fb3a7dfc023215e876f207956b5ea26632a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f846c260f483d1fd217fe5ed7c173fb109efa6b1fc8381c8b7552c5781756192"}, + {file = "kiwisolver-1.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff5cf3571589b6d13bfbfd6bcd7a3f659e42f96b5fd1c4830c4cf21d4f5ef45"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7269d9e5f1084a653d575c7ec012ff57f0c042258bf5db0954bf551c158466e7"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da802a19d6e15dffe4b0c24b38b3af68e6c1a68e6e1d8f30148c83864f3881db"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3aba7311af82e335dd1e36ffff68aaca609ca6290c2cb6d821a39aa075d8e3ff"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:763773d53f07244148ccac5b084da5adb90bfaee39c197554f01b286cf869228"}, + {file = "kiwisolver-1.4.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2270953c0d8cdab5d422bee7d2007f043473f9d2999631c86a223c9db56cbd16"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d099e745a512f7e3bbe7249ca835f4d357c586d78d79ae8f1dcd4d8adeb9bda9"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:74db36e14a7d1ce0986fa104f7d5637aea5c82ca6326ed0ec5694280942d1162"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e5bab140c309cb3a6ce373a9e71eb7e4873c70c2dda01df6820474f9889d6d4"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0f114aa76dc1b8f636d077979c0ac22e7cd8f3493abbab152f20eb8d3cda71f3"}, + {file = "kiwisolver-1.4.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:88a2df29d4724b9237fc0c6eaf2a1adae0cdc0b3e9f4d8e7dc54b16812d2d81a"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win32.whl", hash = "sha256:72d40b33e834371fd330fb1472ca19d9b8327acb79a5821d4008391db8e29f20"}, + {file = "kiwisolver-1.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:2c5674c4e74d939b9d91dda0fae10597ac7521768fec9e399c70a1f27e2ea2d9"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2b053a0ab7a3960c98725cfb0bf5b48ba82f64ec95fe06f1d06c99b552e130"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cd32d6c13807e5c66a7cbb79f90b553642f296ae4518a60d8d76243b0ad2898"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59ec7b7c7e1a61061850d53aaf8e93db63dce0c936db1fda2658b70e4a1be709"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da4cfb373035def307905d05041c1d06d8936452fe89d464743ae7fb8371078b"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2400873bccc260b6ae184b2b8a4fec0e4082d30648eadb7c3d9a13405d861e89"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1b04139c4236a0f3aff534479b58f6f849a8b351e1314826c2d230849ed48985"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:4e66e81a5779b65ac21764c295087de82235597a2293d18d943f8e9e32746265"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7931d8f1f67c4be9ba1dd9c451fb0eeca1a25b89e4d3f89e828fe12a519b782a"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b3f7e75f3015df442238cca659f8baa5f42ce2a8582727981cbfa15fee0ee205"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:bbf1d63eef84b2e8c89011b7f2235b1e0bf7dacc11cac9431fc6468e99ac77fb"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4c380469bd3f970ef677bf2bcba2b6b0b4d5c75e7a020fb863ef75084efad66f"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win32.whl", hash = "sha256:9408acf3270c4b6baad483865191e3e582b638b1654a007c62e3efe96f09a9a3"}, + {file = "kiwisolver-1.4.5-cp37-cp37m-win_amd64.whl", hash = "sha256:5b94529f9b2591b7af5f3e0e730a4e0a41ea174af35a4fd067775f9bdfeee01a"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11c7de8f692fc99816e8ac50d1d1aef4f75126eefc33ac79aac02c099fd3db71"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:53abb58632235cd154176ced1ae8f0d29a6657aa1aa9decf50b899b755bc2b93"}, + {file = "kiwisolver-1.4.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:88b9f257ca61b838b6f8094a62418421f87ac2a1069f7e896c36a7d86b5d4c29"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3195782b26fc03aa9c6913d5bad5aeb864bdc372924c093b0f1cebad603dd712"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc579bf0f502e54926519451b920e875f433aceb4624a3646b3252b5caa9e0b6"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a580c91d686376f0f7c295357595c5a026e6cbc3d77b7c36e290201e7c11ecb"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cfe6ab8da05c01ba6fbea630377b5da2cd9bcbc6338510116b01c1bc939a2c18"}, + {file = "kiwisolver-1.4.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d2e5a98f0ec99beb3c10e13b387f8db39106d53993f498b295f0c914328b1333"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a51a263952b1429e429ff236d2f5a21c5125437861baeed77f5e1cc2d2c7c6da"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3edd2fa14e68c9be82c5b16689e8d63d89fe927e56debd6e1dbce7a26a17f81b"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:74d1b44c6cfc897df648cc9fdaa09bc3e7679926e6f96df05775d4fb3946571c"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:76d9289ed3f7501012e05abb8358bbb129149dbd173f1f57a1bf1c22d19ab7cc"}, + {file = "kiwisolver-1.4.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:92dea1ffe3714fa8eb6a314d2b3c773208d865a0e0d35e713ec54eea08a66250"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win32.whl", hash = "sha256:5c90ae8c8d32e472be041e76f9d2f2dbff4d0b0be8bd4041770eddb18cf49a4e"}, + {file = "kiwisolver-1.4.5-cp38-cp38-win_amd64.whl", hash = "sha256:c7940c1dc63eb37a67721b10d703247552416f719c4188c54e04334321351ced"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9407b6a5f0d675e8a827ad8742e1d6b49d9c1a1da5d952a67d50ef5f4170b18d"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15568384086b6df3c65353820a4473575dbad192e35010f622c6ce3eebd57af9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0dc9db8e79f0036e8173c466d21ef18e1befc02de8bf8aa8dc0813a6dc8a7046"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cdc8a402aaee9a798b50d8b827d7ecf75edc5fb35ea0f91f213ff927c15f4ff0"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6c3bd3cde54cafb87d74d8db50b909705c62b17c2099b8f2e25b461882e544ff"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:955e8513d07a283056b1396e9a57ceddbd272d9252c14f154d450d227606eb54"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:346f5343b9e3f00b8db8ba359350eb124b98c99efd0b408728ac6ebf38173958"}, + {file = "kiwisolver-1.4.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9098e0049e88c6a24ff64545cdfc50807818ba6c1b739cae221bbbcbc58aad3"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7b8b454bac16428b22560d0a1cf0a09875339cab69df61d7805bf48919415901"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:f1d072c2eb0ad60d4c183f3fb44ac6f73fb7a8f16a2694a91f988275cbf352f9"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:31a82d498054cac9f6d0b53d02bb85811185bcb477d4b60144f915f3b3126342"}, + {file = "kiwisolver-1.4.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6512cb89e334e4700febbffaaa52761b65b4f5a3cf33f960213d5656cea36a77"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win32.whl", hash = "sha256:9db8ea4c388fdb0f780fe91346fd438657ea602d58348753d9fb265ce1bca67f"}, + {file = "kiwisolver-1.4.5-cp39-cp39-win_amd64.whl", hash = "sha256:59415f46a37f7f2efeec758353dd2eae1b07640d8ca0f0c42548ec4125492635"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5c7b3b3a728dc6faf3fc372ef24f21d1e3cee2ac3e9596691d746e5a536de920"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:620ced262a86244e2be10a676b646f29c34537d0d9cc8eb26c08f53d98013390"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:378a214a1e3bbf5ac4a8708304318b4f890da88c9e6a07699c4ae7174c09a68d"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf7be1207676ac608a50cd08f102f6742dbfc70e8d60c4db1c6897f62f71523"}, + {file = "kiwisolver-1.4.5-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ba55dce0a9b8ff59495ddd050a0225d58bd0983d09f87cfe2b6aec4f2c1234e4"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd32ea360bcbb92d28933fc05ed09bffcb1704ba3fc7942e81db0fd4f81a7892"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7139af55d1688f8b960ee9ad5adafc4ac17c1c473fe07133ac092310d76544"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dced8146011d2bc2e883f9bd68618b8247387f4bbec46d7392b3c3b032640126"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9bf3325c47b11b2e51bca0824ea217c7cd84491d8ac4eefd1e409705ef092bd"}, + {file = "kiwisolver-1.4.5-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5794cf59533bc3f1b1c821f7206a3617999db9fbefc345360aafe2e067514929"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e368f200bbc2e4f905b8e71eb38b3c04333bddaa6a2464a6355487b02bb7fb09"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d706eba36b4c4d5bc6c6377bb6568098765e990cfc21ee16d13963fab7b3e7"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85267bd1aa8880a9c88a8cb71e18d3d64d2751a790e6ca6c27b8ccc724bcd5ad"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210ef2c3a1f03272649aff1ef992df2e724748918c4bc2d5a90352849eb40bea"}, + {file = "kiwisolver-1.4.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:11d011a7574eb3b82bcc9c1a1d35c1d7075677fdd15de527d91b46bd35e935ee"}, + {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, +] + [[package]] name = "kubernetes" version = "25.3.0" @@ -1743,6 +2018,24 @@ babel = ["Babel"] lingua = ["lingua"] testing = ["pytest"] +[[package]] +name = "markdown" +version = "3.5.1" +description = "Python implementation of John Gruber's Markdown." +optional = true +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.5.1-py3-none-any.whl", hash = "sha256:5874b47d4ee3f0b14d764324d2c94c03ea66bee56f2d929da9f2508d65e722dc"}, + {file = "Markdown-3.5.1.tar.gz", hash = "sha256:b65d7beb248dc22f2e8a31fb706d93798093c308dc1aba295aedeb9d41a813bd"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -1826,6 +2119,75 @@ files = [ {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] +[[package]] +name = "matplotlib" +version = "3.7.3" +description = "Python plotting package" +optional = true +python-versions = ">=3.8" +files = [ + {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:085c33b27561d9c04386789d5aa5eb4a932ddef43cfcdd0e01735f9a6e85ce0c"}, + {file = "matplotlib-3.7.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c568e80e1c17f68a727f30f591926751b97b98314d8e59804f54f86ae6fa6a22"}, + {file = "matplotlib-3.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7baf98c5ad59c5c4743ea884bb025cbffa52dacdfdac0da3e6021a285a90377e"}, + {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:236024f582e40dac39bca592258888b38ae47a9fed7b8de652d68d3d02d47d2b"}, + {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12b4f6795efea037ce2d41e7c417ad8bd02d5719c6ad4a8450a0708f4a1cfb89"}, + {file = "matplotlib-3.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b2136cc6c5415b78977e0e8c608647d597204b05b1d9089ccf513c7d913733"}, + {file = "matplotlib-3.7.3-cp310-cp310-win32.whl", hash = "sha256:122dcbf9be0086e2a95d9e5e0632dbf3bd5b65eaa68c369363310a6c87753059"}, + {file = "matplotlib-3.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:4aab27d9e33293389e3c1d7c881d414a72bdfda0fedc3a6bf46c6fa88d9b8015"}, + {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:d5adc743de91e8e0b13df60deb1b1c285b8effea3d66223afceb14b63c9b05de"}, + {file = "matplotlib-3.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:55de4cf7cd0071b8ebf203981b53ab64f988a0a1f897a2dff300a1124e8bcd8b"}, + {file = "matplotlib-3.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ac03377fd908aaee2312d0b11735753e907adb6f4d1d102de5e2425249693f6c"}, + {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:755bafc10a46918ce9a39980009b54b02dd249594e5adf52f9c56acfddb5d0b7"}, + {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a6094c6f8e8d18db631754df4fe9a34dec3caf074f6869a7db09f18f9b1d6b2"}, + {file = "matplotlib-3.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:272dba2f1b107790ed78ebf5385b8d14b27ad9e90419de340364b49fe549a993"}, + {file = "matplotlib-3.7.3-cp311-cp311-win32.whl", hash = "sha256:591c123bed1cb4b9996fb60b41a6d89c2ec4943244540776c5f1283fb6960a53"}, + {file = "matplotlib-3.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:3bf3a178c6504694cee8b88b353df0051583f2f6f8faa146f67115c27c856881"}, + {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_universal2.whl", hash = "sha256:edf54cac8ee3603f3093616b40a931e8c063969756a4d78a86e82c2fea9659f7"}, + {file = "matplotlib-3.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:91e36a85ea639a1ba9f91427041eac064b04829945fe331a92617b6cb21d27e5"}, + {file = "matplotlib-3.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:caf5eaaf7c68f8d7df269dfbcaf46f48a70ff482bfcebdcc97519671023f2a7d"}, + {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74bf57f505efea376097e948b7cdd87191a7ce8180616390aef496639edf601f"}, + {file = "matplotlib-3.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee152a88a0da527840a426535514b6ed8ac4240eb856b1da92cf48124320e346"}, + {file = "matplotlib-3.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:67a410a9c9e07cbc83581eeea144bbe298870bf0ac0ee2f2e10a015ab7efee19"}, + {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:259999c05285cb993d7f2a419cea547863fa215379eda81f7254c9e932963729"}, + {file = "matplotlib-3.7.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3f4e7fd5a6157e1d018ce2166ec8e531a481dd4a36f035b5c23edfe05a25419a"}, + {file = "matplotlib-3.7.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:faa3d12d8811d08d14080a8b7b9caea9a457dc495350166b56df0db4b9909ef5"}, + {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:336e88900c11441e458da01c8414fc57e04e17f9d3bb94958a76faa2652bcf6b"}, + {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:12f4c0dd8aa280d796c8772ea8265a14f11a04319baa3a16daa5556065e8baea"}, + {file = "matplotlib-3.7.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1990955b11e7918d256cf3b956b10997f405b7917a3f1c7d8e69c1d15c7b1930"}, + {file = "matplotlib-3.7.3-cp38-cp38-win32.whl", hash = "sha256:e78707b751260b42b721507ad7aa60fe4026d7f51c74cca6b9cd8b123ebb633a"}, + {file = "matplotlib-3.7.3-cp38-cp38-win_amd64.whl", hash = "sha256:e594ee43c59ea39ca5c6244667cac9d017a3527febc31f5532ad9135cf7469ec"}, + {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:6eaa1cf0e94c936a26b78f6d756c5fbc12e0a58c8a68b7248a2a31456ce4e234"}, + {file = "matplotlib-3.7.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0a97af9d22e8ebedc9f00b043d9bbd29a375e9e10b656982012dded44c10fd77"}, + {file = "matplotlib-3.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1f9c6c16597af660433ab330b59ee2934b832ee1fabcaf5cbde7b2add840f31e"}, + {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7240259b4b9cbc62381f6378cff4d57af539162a18e832c1e48042fabc40b6b"}, + {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:747c6191d2e88ae854809e69aa358dbf852ff1a5738401b85c1cc9012309897a"}, + {file = "matplotlib-3.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec726b08a5275d827aa91bb951e68234a4423adb91cf65bc0fcdc0f2777663f7"}, + {file = "matplotlib-3.7.3-cp39-cp39-win32.whl", hash = "sha256:40e3b9b450c6534f07278310c4e34caff41c2a42377e4b9d47b0f8d3ac1083a2"}, + {file = "matplotlib-3.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:dfc118642903a23e309b1da32886bb39a4314147d013e820c86b5fb4cb2e36d0"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:165c8082bf8fc0360c24aa4724a22eaadbfd8c28bf1ccf7e94d685cad48261e4"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebd8470cc2a3594746ff0513aecbfa2c55ff6f58e6cef2efb1a54eb87c88ffa2"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7153453669c9672b52095119fd21dd032d19225d48413a2871519b17db4b0fde"}, + {file = "matplotlib-3.7.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:498a08267dc69dd8f24c4b5d7423fa584d7ce0027ba71f7881df05fc09b89bb7"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48999c4b19b5a0c058c9cd828ff6fc7748390679f6cf9a2ad653a3e802c87d3"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22d65d18b4ee8070a5fea5761d59293f1f9e2fac37ec9ce090463b0e629432fd"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c40cde976c36693cc0767e27cf5f443f91c23520060bd9496678364adfafe9c"}, + {file = "matplotlib-3.7.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:39018a2b17592448fbfdf4b8352955e6c3905359939791d4ff429296494d1a0c"}, + {file = "matplotlib-3.7.3.tar.gz", hash = "sha256:f09b3dd6bdeb588de91f853bbb2d6f0ff8ab693485b0c49035eaa510cb4f142e"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} +kiwisolver = ">=1.0.1" +numpy = ">=1.20,<2" +packaging = ">=20.0" +pillow = ">=6.2.0" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" +setuptools_scm = ">=7" + [[package]] name = "mdurl" version = "0.1.2" @@ -1839,45 +2201,54 @@ files = [ [[package]] name = "mlflow" -version = "1.27.0" +version = "2.8.1" description = "MLflow: A Platform for ML Development and Productionization" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mlflow-1.27.0-py3-none-any.whl", hash = "sha256:d759f3eefad2ff509a0fbc10507224204c6f6bb8d7f437bbf0bb9961cf74ff95"}, - {file = "mlflow-1.27.0.tar.gz", hash = "sha256:6a1e34d6be266725e41d4547572a8425d86d6623e1c8888cf3f22b90019be0aa"}, + {file = "mlflow-2.8.1-py3-none-any.whl", hash = "sha256:c14716f2b328cc4a649394013035f8326d4408b9a7c8f378b8f0cb3e0e741af9"}, + {file = "mlflow-2.8.1.tar.gz", hash = "sha256:e4e5bdd2d9efb0b386ecbce2df7e43f04c46a32080208414dc53b5fd71559678"}, ] [package.dependencies] -alembic = "*" -click = ">=7.0" -cloudpickle = "*" -databricks-cli = ">=0.8.7" -docker = ">=4.0.0" -entrypoints = "*" -Flask = "*" -gitpython = ">=2.1.0" -gunicorn = {version = "*", markers = "platform_system != \"Windows\""} -importlib-metadata = ">=3.7.0,<4.7.0 || >4.7.0" -numpy = "*" -packaging = "*" -pandas = "*" -prometheus-flask-exporter = "*" -protobuf = ">=3.12.0" -pytz = "*" -pyyaml = ">=5.1" -querystring-parser = "*" -requests = ">=2.17.3" -scipy = "*" -sqlalchemy = ">=1.4.0" -sqlparse = ">=0.3.1" -waitress = {version = "*", markers = "platform_system == \"Windows\""} +alembic = "<1.10.0 || >1.10.0,<2" +click = ">=7.0,<9" +cloudpickle = "<3" +databricks-cli = ">=0.8.7,<1" +docker = ">=4.0.0,<7" +entrypoints = "<1" +Flask = "<4" +gitpython = ">=2.1.0,<4" +gunicorn = {version = "<22", markers = "platform_system != \"Windows\""} +importlib-metadata = ">=3.7.0,<4.7.0 || >4.7.0,<7" +Jinja2 = [ + {version = ">=2.11,<4", markers = "platform_system != \"Windows\""}, + {version = ">=3.0,<4", markers = "platform_system == \"Windows\""}, +] +markdown = ">=3.3,<4" +matplotlib = "<4" +numpy = "<2" +packaging = "<24" +pandas = "<3" +protobuf = ">=3.12.0,<5" +pyarrow = ">=4.0.0,<15" +pytz = "<2024" +pyyaml = ">=5.1,<7" +querystring-parser = "<2" +requests = ">=2.17.3,<3" +scikit-learn = "<2" +scipy = "<2" +sqlalchemy = ">=1.4.0,<3" +sqlparse = ">=0.4.0,<1" +waitress = {version = "<3", markers = "platform_system == \"Windows\""} [package.extras] aliyun-oss = ["aliyunstoreplugin"] -extras = ["azureml-core (>=1.2.0)", "boto3", "google-cloud-storage (>=1.30.0)", "kubernetes", "mlserver (>=0.5.3)", "mlserver-mlflow (>=0.5.3)", "pyarrow", "pysftp", "scikit-learn", "virtualenv"] -pipelines = ["Jinja2 (>=3.0)", "ipython (>=7.0)", "markdown (>=3.3)", "pandas-profiling (>=3.1)", "pyarrow (>=7.0)", "scikit-learn (>=1.0)", "shap (>=0.40)"] +databricks = ["azure-storage-file-datalake (>12)", "boto3 (>1)", "google-cloud-storage (>=1.30.0)"] +extras = ["azureml-core (>=1.2.0)", "boto3", "google-cloud-storage (>=1.30.0)", "kubernetes", "mlserver (>=1.2.0,!=1.3.1)", "mlserver-mlflow (>=1.2.0,!=1.3.1)", "prometheus-flask-exporter", "pyarrow", "pysftp", "requests-auth-aws-sigv4", "virtualenv"] +gateway = ["aiohttp (<4)", "boto3 (>=1.28.56,<2)", "fastapi (<1)", "pydantic (>=1.0,<3)", "uvicorn[standard] (<1)", "watchfiles (<1)"] sqlserver = ["mlflow-dbstore"] +xethub = ["mlflow-xethub"] [[package]] name = "more-itertools" @@ -2143,6 +2514,73 @@ files = [ {file = "parse-1.19.1.tar.gz", hash = "sha256:cc3a47236ff05da377617ddefa867b7ba983819c664e1afe46249e5b469be464"}, ] +[[package]] +name = "pillow" +version = "10.1.0" +description = "Python Imaging Library (Fork)" +optional = true +python-versions = ">=3.8" +files = [ + {file = "Pillow-10.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1ab05f3db77e98f93964697c8efc49c7954b08dd61cff526b7f2531a22410106"}, + {file = "Pillow-10.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6932a7652464746fcb484f7fc3618e6503d2066d853f68a4bd97193a3996e273"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f63b5a68daedc54c7c3464508d8c12075e56dcfbd42f8c1bf40169061ae666"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0949b55eb607898e28eaccb525ab104b2d86542a85c74baf3a6dc24002edec2"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ae88931f93214777c7a3aa0a8f92a683f83ecde27f65a45f95f22d289a69e593"}, + {file = "Pillow-10.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b0eb01ca85b2361b09480784a7931fc648ed8b7836f01fb9241141b968feb1db"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d27b5997bdd2eb9fb199982bb7eb6164db0426904020dc38c10203187ae2ff2f"}, + {file = "Pillow-10.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7df5608bc38bd37ef585ae9c38c9cd46d7c81498f086915b0f97255ea60c2818"}, + {file = "Pillow-10.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:41f67248d92a5e0a2076d3517d8d4b1e41a97e2df10eb8f93106c89107f38b57"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1fb29c07478e6c06a46b867e43b0bcdb241b44cc52be9bc25ce5944eed4648e7"}, + {file = "Pillow-10.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2cdc65a46e74514ce742c2013cd4a2d12e8553e3a2563c64879f7c7e4d28bce7"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50d08cd0a2ecd2a8657bd3d82c71efd5a58edb04d9308185d66c3a5a5bed9610"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:062a1610e3bc258bff2328ec43f34244fcec972ee0717200cb1425214fe5b839"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:61f1a9d247317fa08a308daaa8ee7b3f760ab1809ca2da14ecc88ae4257d6172"}, + {file = "Pillow-10.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a646e48de237d860c36e0db37ecaecaa3619e6f3e9d5319e527ccbc8151df061"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:47e5bf85b80abc03be7455c95b6d6e4896a62f6541c1f2ce77a7d2bb832af262"}, + {file = "Pillow-10.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a92386125e9ee90381c3369f57a2a50fa9e6aa8b1cf1d9c4b200d41a7dd8e992"}, + {file = "Pillow-10.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f7c276c05a9767e877a0b4c5050c8bee6a6d960d7f0c11ebda6b99746068c2a"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:a89b8312d51715b510a4fe9fc13686283f376cfd5abca8cd1c65e4c76e21081b"}, + {file = "Pillow-10.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00f438bb841382b15d7deb9a05cc946ee0f2c352653c7aa659e75e592f6fa17d"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d929a19f5469b3f4df33a3df2983db070ebb2088a1e145e18facbc28cae5b27"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a92109192b360634a4489c0c756364c0c3a2992906752165ecb50544c251312"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:0248f86b3ea061e67817c47ecbe82c23f9dd5d5226200eb9090b3873d3ca32de"}, + {file = "Pillow-10.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:9882a7451c680c12f232a422730f986a1fcd808da0fd428f08b671237237d651"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1c3ac5423c8c1da5928aa12c6e258921956757d976405e9467c5f39d1d577a4b"}, + {file = "Pillow-10.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:806abdd8249ba3953c33742506fe414880bad78ac25cc9a9b1c6ae97bedd573f"}, + {file = "Pillow-10.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:eaed6977fa73408b7b8a24e8b14e59e1668cfc0f4c40193ea7ced8e210adf996"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:fe1e26e1ffc38be097f0ba1d0d07fcade2bcfd1d023cda5b29935ae8052bd793"}, + {file = "Pillow-10.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7a7e3daa202beb61821c06d2517428e8e7c1aab08943e92ec9e5755c2fc9ba5e"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24fadc71218ad2b8ffe437b54876c9382b4a29e030a05a9879f615091f42ffc2"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1d323703cfdac2036af05191b969b910d8f115cf53093125e4058f62012c9a"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:912e3812a1dbbc834da2b32299b124b5ddcb664ed354916fd1ed6f193f0e2d01"}, + {file = "Pillow-10.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7dbaa3c7de82ef37e7708521be41db5565004258ca76945ad74a8e998c30af8d"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9d7bc666bd8c5a4225e7ac71f2f9d12466ec555e89092728ea0f5c0c2422ea80"}, + {file = "Pillow-10.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baada14941c83079bf84c037e2d8b7506ce201e92e3d2fa0d1303507a8538212"}, + {file = "Pillow-10.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:2ef6721c97894a7aa77723740a09547197533146fba8355e86d6d9a4a1056b14"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0a026c188be3b443916179f5d04548092e253beb0c3e2ee0a4e2cdad72f66099"}, + {file = "Pillow-10.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04f6f6149f266a100374ca3cc368b67fb27c4af9f1cc8cb6306d849dcdf12616"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb40c011447712d2e19cc261c82655f75f32cb724788df315ed992a4d65696bb"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a8413794b4ad9719346cd9306118450b7b00d9a15846451549314a58ac42219"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c9aeea7b63edb7884b031a35305629a7593272b54f429a9869a4f63a1bf04c34"}, + {file = "Pillow-10.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b4005fee46ed9be0b8fb42be0c20e79411533d1fd58edabebc0dd24626882cfd"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4d0152565c6aa6ebbfb1e5d8624140a440f2b99bf7afaafbdbf6430426497f28"}, + {file = "Pillow-10.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d921bc90b1defa55c9917ca6b6b71430e4286fc9e44c55ead78ca1a9f9eba5f2"}, + {file = "Pillow-10.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cfe96560c6ce2f4c07d6647af2d0f3c54cc33289894ebd88cfbb3bcd5391e256"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:937bdc5a7f5343d1c97dc98149a0be7eb9704e937fe3dc7140e229ae4fc572a7"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c25762197144e211efb5f4e8ad656f36c8d214d390585d1d21281f46d556ba"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:afc8eef765d948543a4775f00b7b8c079b3321d6b675dde0d02afa2ee23000b4"}, + {file = "Pillow-10.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:883f216eac8712b83a63f41b76ddfb7b2afab1b74abbb413c5df6680f071a6b9"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:b920e4d028f6442bea9a75b7491c063f0b9a3972520731ed26c83e254302eb1e"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c41d960babf951e01a49c9746f92c5a7e0d939d1652d7ba30f6b3090f27e412"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1fafabe50a6977ac70dfe829b2d5735fd54e190ab55259ec8aea4aaea412fa0b"}, + {file = "Pillow-10.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3b834f4b16173e5b92ab6566f0473bfb09f939ba14b23b8da1f54fa63e4b623f"}, + {file = "Pillow-10.1.0.tar.gz", hash = "sha256:e6bf8de6c36ed96c86ea3b6e1d5273c53f46ef518a062464cd7ef5dd2cf92e38"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + [[package]] name = "pip" version = "23.3.1" @@ -2237,35 +2675,6 @@ pyyaml = ">=5.1" toml = "*" virtualenv = ">=20.0.8" -[[package]] -name = "prometheus-client" -version = "0.18.0" -description = "Python client for the Prometheus monitoring system." -optional = true -python-versions = ">=3.8" -files = [ - {file = "prometheus_client-0.18.0-py3-none-any.whl", hash = "sha256:8de3ae2755f890826f4b6479e5571d4f74ac17a81345fe69a6778fdb92579184"}, - {file = "prometheus_client-0.18.0.tar.gz", hash = "sha256:35f7a8c22139e2bb7ca5a698e92d38145bc8dc74c1c0bf56f25cca886a764e17"}, -] - -[package.extras] -twisted = ["twisted"] - -[[package]] -name = "prometheus-flask-exporter" -version = "0.23.0" -description = "Prometheus metrics exporter for Flask" -optional = true -python-versions = "*" -files = [ - {file = "prometheus_flask_exporter-0.23.0-py3-none-any.whl", hash = "sha256:7a026b4fdd54ebeddb77589333efe3a1ec43c7c717468825b0b3e9b6c33f7e9e"}, - {file = "prometheus_flask_exporter-0.23.0.tar.gz", hash = "sha256:e4e6beb1b8e1e164da6d70fe1edefc95ef184f113b5047f66f4b7262233da9c0"}, -] - -[package.dependencies] -flask = "*" -prometheus-client = "*" - [[package]] name = "proto-plus" version = "1.22.3" @@ -2716,13 +3125,13 @@ six = "*" [[package]] name = "referencing" -version = "0.30.2" +version = "0.31.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.30.2-py3-none-any.whl", hash = "sha256:449b6669b6121a9e96a7f9e410b245d471e8d48964c67113ce9afe50c8dd7bdf"}, - {file = "referencing-0.30.2.tar.gz", hash = "sha256:794ad8003c65938edcdbc027f1933215e0d0ccc0291e3ce20a4d87432b59efc0"}, + {file = "referencing-0.31.0-py3-none-any.whl", hash = "sha256:381b11e53dd93babb55696c71cf42aef2d36b8a150c49bf0bc301e36d536c882"}, + {file = "referencing-0.31.0.tar.gz", hash = "sha256:cc28f2c88fbe7b961a7817a0abc034c09a1e36358f82fedb4ffdf29a25398863"}, ] [package.dependencies] @@ -2784,13 +3193,13 @@ requests = ">=2.0.1,<3.0.0" [[package]] name = "responses" -version = "0.24.0" +version = "0.24.1" description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=3.8" files = [ - {file = "responses-0.24.0-py3-none-any.whl", hash = "sha256:060be153c270c06fa4d22c1ef8865fdef43902eb595204deeef736cddb62d353"}, - {file = "responses-0.24.0.tar.gz", hash = "sha256:3df82f7d4dcd3e5f61498181aadb4381f291da25c7506c47fe8cb68ce29203e7"}, + {file = "responses-0.24.1-py3-none-any.whl", hash = "sha256:a2b43f4c08bfb9c9bd242568328c65a34b318741d3fab884ac843c5ceeb543f9"}, + {file = "responses-0.24.1.tar.gz", hash = "sha256:b127c6ca3f8df0eb9cc82fd93109a3007a86acb24871834c47b77765152ecf8c"}, ] [package.dependencies] @@ -2803,13 +3212,13 @@ tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asy [[package]] name = "rich" -version = "13.6.0" +version = "13.7.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.7.0" files = [ - {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, - {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, + {file = "rich-13.7.0-py3-none-any.whl", hash = "sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235"}, + {file = "rich-13.7.0.tar.gz", hash = "sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa"}, ] [package.dependencies] @@ -2841,110 +3250,110 @@ release = ["pip-tools (>=6.12.1)", "toml (>=0.10.2)", "twine (>=4.0.2)"] [[package]] name = "rpds-py" -version = "0.12.0" +version = "0.13.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.12.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:c694bee70ece3b232df4678448fdda245fd3b1bb4ba481fb6cd20e13bb784c46"}, - {file = "rpds_py-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:30e5ce9f501fb1f970e4a59098028cf20676dee64fc496d55c33e04bbbee097d"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d72a4315514e5a0b9837a086cb433b004eea630afb0cc129de76d77654a9606f"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eebaf8c76c39604d52852366249ab807fe6f7a3ffb0dd5484b9944917244cdbe"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a239303acb0315091d54c7ff36712dba24554993b9a93941cf301391d8a997ee"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced40cdbb6dd47a032725a038896cceae9ce267d340f59508b23537f05455431"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c8c0226c71bd0ce9892eaf6afa77ae8f43a3d9313124a03df0b389c01f832de"}, - {file = "rpds_py-0.12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8e11715178f3608874508f08e990d3771e0b8c66c73eb4e183038d600a9b274"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5210a0018c7e09c75fa788648617ebba861ae242944111d3079034e14498223f"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:171d9a159f1b2f42a42a64a985e4ba46fc7268c78299272ceba970743a67ee50"}, - {file = "rpds_py-0.12.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57ec6baec231bb19bb5fd5fc7bae21231860a1605174b11585660236627e390e"}, - {file = "rpds_py-0.12.0-cp310-none-win32.whl", hash = "sha256:7188ddc1a8887194f984fa4110d5a3d5b9b5cd35f6bafdff1b649049cbc0ce29"}, - {file = "rpds_py-0.12.0-cp310-none-win_amd64.whl", hash = "sha256:1e04581c6117ad9479b6cfae313e212fe0dfa226ac727755f0d539cd54792963"}, - {file = "rpds_py-0.12.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:0a38612d07a36138507d69646c470aedbfe2b75b43a4643f7bd8e51e52779624"}, - {file = "rpds_py-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f12d69d568f5647ec503b64932874dade5a20255736c89936bf690951a5e79f5"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8a1d990dc198a6c68ec3d9a637ba1ce489b38cbfb65440a27901afbc5df575"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c567c664fc2f44130a20edac73e0a867f8e012bf7370276f15c6adc3586c37c"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e9e976e0dbed4f51c56db10831c9623d0fd67aac02853fe5476262e5a22acb7"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efddca2d02254a52078c35cadad34762adbae3ff01c6b0c7787b59d038b63e0d"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9e7f29c00577aff6b318681e730a519b235af292732a149337f6aaa4d1c5e31"}, - {file = "rpds_py-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:389c0e38358fdc4e38e9995e7291269a3aead7acfcf8942010ee7bc5baee091c"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33ab498f9ac30598b6406e2be1b45fd231195b83d948ebd4bd77f337cb6a2bff"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d56b1cd606ba4cedd64bb43479d56580e147c6ef3f5d1c5e64203a1adab784a2"}, - {file = "rpds_py-0.12.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1fa73ed22c40a1bec98d7c93b5659cd35abcfa5a0a95ce876b91adbda170537c"}, - {file = "rpds_py-0.12.0-cp311-none-win32.whl", hash = "sha256:dbc25baa6abb205766fb8606f8263b02c3503a55957fcb4576a6bb0a59d37d10"}, - {file = "rpds_py-0.12.0-cp311-none-win_amd64.whl", hash = "sha256:c6b52b7028b547866c2413f614ee306c2d4eafdd444b1ff656bf3295bf1484aa"}, - {file = "rpds_py-0.12.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:9620650c364c01ed5b497dcae7c3d4b948daeae6e1883ae185fef1c927b6b534"}, - {file = "rpds_py-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2124f9e645a94ab7c853bc0a3644e0ca8ffbe5bb2d72db49aef8f9ec1c285733"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281c8b219d4f4b3581b918b816764098d04964915b2f272d1476654143801aa2"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:27ccc93c7457ef890b0dd31564d2a05e1aca330623c942b7e818e9e7c2669ee4"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1c562a9bb72244fa767d1c1ab55ca1d92dd5f7c4d77878fee5483a22ffac808"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e57919c32ee295a2fca458bb73e4b20b05c115627f96f95a10f9f5acbd61172d"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa35ad36440aaf1ac8332b4a4a433d4acd28f1613f0d480995f5cfd3580e90b7"}, - {file = "rpds_py-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6aea5c0eb5b0faf52c7b5c4a47c8bb64437173be97227c819ffa31801fa4e34"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81cf9d306c04df1b45971c13167dc3bad625808aa01281d55f3cf852dde0e206"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08e6e7ff286254016b945e1ab632ee843e43d45e40683b66dd12b73791366dd1"}, - {file = "rpds_py-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4d0a675a7acbbc16179188d8c6d0afb8628604fc1241faf41007255957335a0b"}, - {file = "rpds_py-0.12.0-cp312-none-win32.whl", hash = "sha256:b2287c09482949e0ca0c0eb68b2aca6cf57f8af8c6dfd29dcd3bc45f17b57978"}, - {file = "rpds_py-0.12.0-cp312-none-win_amd64.whl", hash = "sha256:8015835494b21aa7abd3b43fdea0614ee35ef6b03db7ecba9beb58eadf01c24f"}, - {file = "rpds_py-0.12.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6174d6ad6b58a6bcf67afbbf1723420a53d06c4b89f4c50763d6fa0a6ac9afd2"}, - {file = "rpds_py-0.12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a689e1ded7137552bea36305a7a16ad2b40be511740b80748d3140614993db98"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45321224144c25a62052035ce96cbcf264667bcb0d81823b1bbc22c4addd194"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa32205358a76bf578854bf31698a86dc8b2cb591fd1d79a833283f4a403f04b"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91bd2b7cf0f4d252eec8b7046fa6a43cee17e8acdfc00eaa8b3dbf2f9a59d061"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3acadbab8b59f63b87b518e09c4c64b142e7286b9ca7a208107d6f9f4c393c5c"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:429349a510da82c85431f0f3e66212d83efe9fd2850f50f339341b6532c62fe4"}, - {file = "rpds_py-0.12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:05942656cb2cb4989cd50ced52df16be94d344eae5097e8583966a1d27da73a5"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0c5441b7626c29dbd54a3f6f3713ec8e956b009f419ffdaaa3c80eaf98ddb523"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b6b0e17d39d21698185097652c611f9cf30f7c56ccec189789920e3e7f1cee56"}, - {file = "rpds_py-0.12.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3b7a64d43e2a1fa2dd46b678e00cabd9a49ebb123b339ce799204c44a593ae1c"}, - {file = "rpds_py-0.12.0-cp38-none-win32.whl", hash = "sha256:e5bbe011a2cea9060fef1bb3d668a2fd8432b8888e6d92e74c9c794d3c101595"}, - {file = "rpds_py-0.12.0-cp38-none-win_amd64.whl", hash = "sha256:bec29b801b4adbf388314c0d050e851d53762ab424af22657021ce4b6eb41543"}, - {file = "rpds_py-0.12.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:1096ca0bf2d3426cbe79d4ccc91dc5aaa73629b08ea2d8467375fad8447ce11a"}, - {file = "rpds_py-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48aa98987d54a46e13e6954880056c204700c65616af4395d1f0639eba11764b"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7979d90ee2190d000129598c2b0c82f13053dba432b94e45e68253b09bb1f0f6"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:88857060b690a57d2ea8569bca58758143c8faa4639fb17d745ce60ff84c867e"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4eb74d44776b0fb0782560ea84d986dffec8ddd94947f383eba2284b0f32e35e"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f62581d7e884dd01ee1707b7c21148f61f2febb7de092ae2f108743fcbef5985"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f5dcb658d597410bb7c967c1d24eaf9377b0d621358cbe9d2ff804e5dd12e81"}, - {file = "rpds_py-0.12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bf9acce44e967a5103fcd820fc7580c7b0ab8583eec4e2051aec560f7b31a63"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:240687b5be0f91fbde4936a329c9b7589d9259742766f74de575e1b2046575e4"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:25740fb56e8bd37692ed380e15ec734be44d7c71974d8993f452b4527814601e"}, - {file = "rpds_py-0.12.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a54917b7e9cd3a67e429a630e237a90b096e0ba18897bfb99ee8bd1068a5fea0"}, - {file = "rpds_py-0.12.0-cp39-none-win32.whl", hash = "sha256:b92aafcfab3d41580d54aca35a8057341f1cfc7c9af9e8bdfc652f83a20ced31"}, - {file = "rpds_py-0.12.0-cp39-none-win_amd64.whl", hash = "sha256:cd316dbcc74c76266ba94eb021b0cc090b97cca122f50bd7a845f587ff4bf03f"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0853da3d5e9bc6a07b2486054a410b7b03f34046c123c6561b535bb48cc509e1"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:cb41ad20064e18a900dd427d7cf41cfaec83bcd1184001f3d91a1f76b3fcea4e"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bf7e7ae61957d5c4026b486be593ed3ec3dca3e5be15e0f6d8cf5d0a4990"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a952ae3eb460c6712388ac2ec706d24b0e651b9396d90c9a9e0a69eb27737fdc"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bedd91ae1dd142a4dc15970ed2c729ff6c73f33a40fa84ed0cdbf55de87c777"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:761531076df51309075133a6bc1db02d98ec7f66e22b064b1d513bc909f29743"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2baa6be130e8a00b6cbb9f18a33611ec150b4537f8563bddadb54c1b74b8193"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f05450fa1cd7c525c0b9d1a7916e595d3041ac0afbed2ff6926e5afb6a781b7f"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:81c4d1a3a564775c44732b94135d06e33417e829ff25226c164664f4a1046213"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e888be685fa42d8b8a3d3911d5604d14db87538aa7d0b29b1a7ea80d354c732d"}, - {file = "rpds_py-0.12.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6f8d7fe73d1816eeb5378409adc658f9525ecbfaf9e1ede1e2d67a338b0c7348"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0831d3ecdea22e4559cc1793f22e77067c9d8c451d55ae6a75bf1d116a8e7f42"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:513ccbf7420c30e283c25c82d5a8f439d625a838d3ba69e79a110c260c46813f"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:301bd744a1adaa2f6a5e06c98f1ac2b6f8dc31a5c23b838f862d65e32fca0d4b"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f8832a4f83d4782a8f5a7b831c47e8ffe164e43c2c148c8160ed9a6d630bc02a"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b2416ed743ec5debcf61e1242e012652a4348de14ecc7df3512da072b074440"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35585a8cb5917161f42c2104567bb83a1d96194095fc54a543113ed5df9fa436"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d389ff1e95b6e46ebedccf7fd1fadd10559add595ac6a7c2ea730268325f832c"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b007c2444705a2dc4a525964fd4dd28c3320b19b3410da6517cab28716f27d3"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:188912b22b6c8225f4c4ffa020a2baa6ad8fabb3c141a12dbe6edbb34e7f1425"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b4cf9ab9a0ae0cb122685209806d3f1dcb63b9fccdf1424fb42a129dc8c2faa"}, - {file = "rpds_py-0.12.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2d34a5450a402b00d20aeb7632489ffa2556ca7b26f4a63c35f6fccae1977427"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:466030a42724780794dea71eb32db83cc51214d66ab3fb3156edd88b9c8f0d78"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:68172622a5a57deb079a2c78511c40f91193548e8ab342c31e8cb0764d362459"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54cdfcda59251b9c2f87a05d038c2ae02121219a04d4a1e6fc345794295bdc07"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b75b912a0baa033350367a8a07a8b2d44fd5b90c890bfbd063a8a5f945f644b"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:47aeceb4363851d17f63069318ba5721ae695d9da55d599b4d6fb31508595278"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0525847f83f506aa1e28eb2057b696fe38217e12931c8b1b02198cfe6975e142"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efbe0b5e0fd078ed7b005faa0170da4f72666360f66f0bb2d7f73526ecfd99f9"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0fadfdda275c838cba5102c7f90a20f2abd7727bf8f4a2b654a5b617529c5c18"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:56dd500411d03c5e9927a1eb55621e906837a83b02350a9dc401247d0353717c"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:6915fc9fa6b3ec3569566832e1bb03bd801c12cea030200e68663b9a87974e76"}, - {file = "rpds_py-0.12.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5f1519b080d8ce0a814f17ad9fb49fb3a1d4d7ce5891f5c85fc38631ca3a8dc4"}, - {file = "rpds_py-0.12.0.tar.gz", hash = "sha256:7036316cc26b93e401cedd781a579be606dad174829e6ad9e9c5a0da6e036f80"}, + {file = "rpds_py-0.13.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1758197cc8d7ff383c07405f188253535b4aa7fa745cbc54d221ae84b18e0702"}, + {file = "rpds_py-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:715df74cbcef4387d623c917f295352127f4b3e0388038d68fa577b4e4c6e540"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a9cec0f49df9bac252d92f138c0d7708d98828e21fd57db78087d8f50b5656"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5c2545bba02f68abdf398ef4990dc77592cc1e5d29438b35b3a3ca34d171fb4b"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95375c44ffb9ea2bc25d67fb66e726ea266ff1572df50b9556fe28a5f3519cd7"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54e513df45a8a9419e7952ffd26ac9a5b7b1df97fe72530421794b0de29f9d72"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a25f514a53927b6b4bd04a9a6a13b55209df54f548660eeed673336c0c946d14"}, + {file = "rpds_py-0.13.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c1a920fa679ec2758411d66bf68840b0a21317b9954ab0e973742d723bb67709"}, + {file = "rpds_py-0.13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f9339d1404b87e6d8cb35e485945753be57a99ab9bb389f42629215b2f6bda0f"}, + {file = "rpds_py-0.13.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c99f9dda2c959f7bb69a7125e192c74fcafb7a534a95ccf49313ae3a04807804"}, + {file = "rpds_py-0.13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bad6758df5f1042b35683bd1811d5432ac1b17700a5a2a51fdc293f7df5f7827"}, + {file = "rpds_py-0.13.0-cp310-none-win32.whl", hash = "sha256:2a29ec68fa9655ce9501bc6ae074b166e8b45c2dfcd2d71d90d1a61758ed8c73"}, + {file = "rpds_py-0.13.0-cp310-none-win_amd64.whl", hash = "sha256:244be953f13f148b0071d67a610f89cd72eb5013a147e517d6ca3f3f3b7e0380"}, + {file = "rpds_py-0.13.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:240279ca0b2afd6d4710afce1c94bf9e75fc161290bf62c0feba64d64780d80b"}, + {file = "rpds_py-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:25c9727da2dabc93664a18eda7a70feedf478f0c4c8294e4cdba7f60a479a246"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:981e46e1e5064f95460381bff4353783b4b5ce351c930e5b507ebe0278c61dac"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6052bb47ea583646b8ff562acacb9a2ec5ec847267049cbae3919671929e94c6"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87f591ff8cc834fa01ca5899ab5edcd7ee590492a9cdcf43424ac142e731ce3e"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62772259b3381e2aabf274c74fd1e1ac03b0524de0a6593900684becfa8cfe4b"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4de9d20fe68c16b4d97f551a09920745add0c86430262230528b83c2ed2fe90"}, + {file = "rpds_py-0.13.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b70a54fb628c1d6400e351674a31ba63d2912b8c5b707f99b408674a5d8b69ab"}, + {file = "rpds_py-0.13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2063ab9cd1be7ef6b5ed0f408e2bdf32c060b6f40c097a468f32864731302636"}, + {file = "rpds_py-0.13.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:84f7f3f18d29a1c645729634003d21d84028bd9c2fd78eba9d028998f46fa5aa"}, + {file = "rpds_py-0.13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7c7ddc8d1a64623068da5a15e28001fbd0f0aff754aae7a75a4be5042191638"}, + {file = "rpds_py-0.13.0-cp311-none-win32.whl", hash = "sha256:8a33d2b6340261191bb59adb5a453fa6c7d99de85552bd4e8196411f0509c9bf"}, + {file = "rpds_py-0.13.0-cp311-none-win_amd64.whl", hash = "sha256:8b9c1dd90461940315981499df62a627571c4f0992e8bafc5396d33916224cac"}, + {file = "rpds_py-0.13.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:15a2d542de5cbfc6abddc4846d9412b59f8ee9c8dfa0b9c92a29321297c91745"}, + {file = "rpds_py-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8dd69e01b29ff45a0062cad5c480d8aa9301c3ef09da471f86337a78eb2d3405"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efdd02971a02f98492a72b25484f1f6125fb9f2166e48cc4c9bfa563349c851b"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91ca9aaee7ccdfa66d800b5c4ec634fefca947721bab52d6ad2f6350969a3771"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:afcec1f5b09d0db70aeb2d90528a9164acb61841a3124e28f6ac0137f4c36cb4"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6824673f66c47f7ee759c21e973bfce3ceaf2c25cb940cb45b41105dc914e8"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50b6d80925dfeb573fc5e38582fb9517c6912dc462cc858a11c8177b0837127a"}, + {file = "rpds_py-0.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3a1a38512925829784b5dc38591c757b80cfce115c72c594dc59567dab62b9c4"}, + {file = "rpds_py-0.13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:977c6123c359dcc70ce3161b781ab70b0d342de2666944b776617e01a0a7822a"}, + {file = "rpds_py-0.13.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c472409037e05ed87b99430f97a6b82130328bb977502813547e8ee6a3392502"}, + {file = "rpds_py-0.13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:28bb22019f4a783ea06a6b81437d5996551869e8a722ee8720b744f7684d97f4"}, + {file = "rpds_py-0.13.0-cp312-none-win32.whl", hash = "sha256:46be9c0685cce2ea02151aa8308f2c1b78581be41a5dd239448a941a210ef5dd"}, + {file = "rpds_py-0.13.0-cp312-none-win_amd64.whl", hash = "sha256:3c5b9ad4d3e05dfcf8629f0d534f92610e9805dbce2fcb9b3c801ddb886431d5"}, + {file = "rpds_py-0.13.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:66eb5aa36e857f768c598d2082fafb733eaf53e06e1169c6b4de65636e04ffd0"}, + {file = "rpds_py-0.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9f4c2b7d989426e9fe9b720211172cf10eb5f7aa16c63de2e5dc61457abcf35"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1e37dfffe8959a492b7b331995f291847a41a035b4aad82d6060f38e8378a2b"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8220321f2dccd9d66f72639185247cb7bbdd90753bf0b6bfca0fa31dba8af23c"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8f1d466a9747213d3cf7e1afec849cc51edb70d5b4ae9a82eca0f172bfbb6d0"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c4c4b4ff3de834ec5c1c690e5a18233ca78547d003eb83664668ccf09ef1398"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:525d19ef0a999229ef0f0a7687ab2c9a00d1b6a47a005006f4d8c4b8975fdcec"}, + {file = "rpds_py-0.13.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0982b59d014efb84a57128e7e69399fb29ad8f2da5b0a5bcbfd12e211c00492e"}, + {file = "rpds_py-0.13.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f714dd5b705f1c394d1b361d96486c4981055c434a7eafb1a3147ac75e34a3de"}, + {file = "rpds_py-0.13.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:766b573a964389ef0d91a26bb31e1b59dbc5d06eff7707f3dfcec23d93080ba3"}, + {file = "rpds_py-0.13.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ed65ad3fc5065d13e31e90794e0b52e405b63ae4fab1080caeaadc10a3439c5"}, + {file = "rpds_py-0.13.0-cp38-none-win32.whl", hash = "sha256:9645f7fe10a68b2396d238250b4b264c2632d2eb6ce2cb90aa0fe08adee194be"}, + {file = "rpds_py-0.13.0-cp38-none-win_amd64.whl", hash = "sha256:42d0ad129c102856a364ccc7d356faec017af86b3543a8539795f22b6cabad11"}, + {file = "rpds_py-0.13.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:95c11647fac2a3515ea2614a79e14b7c75025724ad54c91c7db4a6ea5c25ef19"}, + {file = "rpds_py-0.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9435bf4832555c4f769c6be9401664357be33d5f5d8dc58f5c20fb8d21e2c45d"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54b1d671a74395344239ee3adbcd8c496525f6a2b2e54c40fec69620a31a8dcb"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:13c8061115f1468de6ffdfb1d31b446e1bd814f1ff6e556862169aacb9fbbc5d"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a78861123b002725633871a2096c3a4313224aab3d11b953dced87cfba702418"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97c1be5a018cdad54fa7e5f7d36b9ab45ef941a1d185987f18bdab0a42344012"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e33b17915c8e4fb2ea8b91bb4c46cba92242c63dd38b87e869ead5ba217e2970"}, + {file = "rpds_py-0.13.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:153b6d8cf7ae4b9ffd09de6abeda661e351e3e06eaafd18a8c104ea00099b131"}, + {file = "rpds_py-0.13.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da2852201e8e00c86be82c43d6893e6c380ef648ae53f337ffd1eaa35e3dfb8a"}, + {file = "rpds_py-0.13.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a2383f400691fd7bd63347d4d75eb2fd525de9d901799a33a4e896c9885609f8"}, + {file = "rpds_py-0.13.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d5bf560634ea6e9a59ceb2181a6cd6195a03f48cef9a400eb15e197e18f14548"}, + {file = "rpds_py-0.13.0-cp39-none-win32.whl", hash = "sha256:fdaef49055cc0c701fb17b9b34a38ef375e5cdb230b3722d4a12baf9b7cbc6d3"}, + {file = "rpds_py-0.13.0-cp39-none-win_amd64.whl", hash = "sha256:26660c74a20fe249fad75ca00bbfcf60e57c3fdbde92971c88a20e07fea1de64"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:28324f2f0247d407daabf7ff357ad9f36126075c92a0cf5319396d96ff4e1248"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b431c2c0ff1ea56048a2b066d99d0c2d151ae7625b20be159b7e699f3e80390b"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7472bd60a8293217444bdc6a46e516feb8d168da44d5f3fccea0336e88e3b79a"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:169063f346b8fd84f47d986c9c48e6094eb38b839c1287e7cb886b8a2b32195d"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eef7ee7c70f8b8698be468d54f9f5e01804f3a1dd5657e8a96363dbd52b9b5ec"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:762013dd59df12380c5444f61ccbf9ae1297027cabbd7aa25891f724ebf8c8f7"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:152570689a27ae0be1d5f50b21dad38d450b9227d0974f23bd400400ea087e88"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d70a93a40e55da117c511ddc514642bc7d59a95a99137168a5f3f2f876b47962"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e6c6fed07d13b9e0fb689356c40c81f1aa92e3c9d91d8fd5816a0348ccd999f7"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:cdded3cf9e36840b09ccef714d5fa74a03f4eb6cf81e694226ed9cb5e6f90de0"}, + {file = "rpds_py-0.13.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e1f40faf406c52c7ae7d208b9140377c06397248978ccb03fbfbb30a0571e359"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c10326e30c97a95b7e1d75e5200ef0b9827aa0f861e331e43b15dfdfd63e669b"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:afde37e3763c602d0385bce5c12f262e7b1dd2a0f323e239fa9d7b2d4d5d8509"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4084ab6840bd4d79eff3b5f497add847a7db31ce5a0c2d440c90b2d2b7011857"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c9c9cb48ab77ebfa47db25b753f594d4f44959cfe43b713439ca6e3c9329671"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:533d728ea5ad5253af3395102723ca8a77b62de47b2295155650c9a88fcdeec8"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f22cab655b41033d430f20266bf563b35038a7f01c9a099b0ccfd30a7fb9247"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a0507342c37132813449393e6e6f351bbff376031cfff1ee6e616402ac7908"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4eb1faf8e2ee9a2de3cb3ae4c8c355914cdc85f2cd7f27edf76444c9550ce1e7"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a61a152d61e3ae26e0bbba7b2f568f6f25ca0abdeb6553eca7e7c45b59d9b1a9"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:e499bf2200eb74774a6f85a7465e3bc5273fa8ef0055590d97a88c1e7ea02eea"}, + {file = "rpds_py-0.13.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:1e5becd0de924616ca9a12abeb6458568d1dc8fe5c670d5cdb738402a8a8429d"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:70cfe098d915f566eeebcb683f49f9404d2f948432891b6e075354336eda9dfb"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2e73511e88368f93c24efe7c9a20b319eaa828bc7431f8a17713efb9e31a39fa"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c07cb9bcccd08f9bc2fd05bf586479df4272ea5a6a70fbcb59b018ed48a5a84d"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8c4e84016ba225e09df20fed8befe8c68d14fbeff6078f4a0ff907ae2095e17e"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ad465e5a70580ca9c1944f43a9a71bca3a7b74554347fc96ca0479eca8981f9"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:189aebd44a07fa7b7966cf78b85bde8335b0b6c3b1c4ef5589f8c03176830107"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f50ca0460f1f7a89ab9b8355d83ac993d5998ad4218e76654ecf8afe648d8aa"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f6c225011467021879c0482316e42d8a28852fc29f0c15d2a435ff457cadccd4"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1e63b32b856c0f08a56b76967d61b6ad811d8d330a8aebb9d21afadd82a296f6"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e5fbe9800f09c56967fda88c4d9272955e781699a66102bd098f22511a3f260"}, + {file = "rpds_py-0.13.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:fea99967d4a978ce95dd52310bcb4a943b77c61725393bca631b0908047d6e2f"}, + {file = "rpds_py-0.13.0.tar.gz", hash = "sha256:35cc91cbb0b775705e0feb3362490b8418c408e9e3c3b9cb3b02f6e495f03ee7"}, ] [[package]] @@ -2961,6 +3370,53 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" +[[package]] +name = "scikit-learn" +version = "1.3.2" +description = "A set of python modules for machine learning and data mining" +optional = true +python-versions = ">=3.8" +files = [ + {file = "scikit-learn-1.3.2.tar.gz", hash = "sha256:a2f54c76accc15a34bfb9066e6c7a56c1e7235dda5762b990792330b52ccfb05"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e326c0eb5cf4d6ba40f93776a20e9a7a69524c4db0757e7ce24ba222471ee8a1"}, + {file = "scikit_learn-1.3.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:535805c2a01ccb40ca4ab7d081d771aea67e535153e35a1fd99418fcedd1648a"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1215e5e58e9880b554b01187b8c9390bf4dc4692eedeaf542d3273f4785e342c"}, + {file = "scikit_learn-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ee107923a623b9f517754ea2f69ea3b62fc898a3641766cb7deb2f2ce450161"}, + {file = "scikit_learn-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:35a22e8015048c628ad099da9df5ab3004cdbf81edc75b396fd0cff8699ac58c"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6fb6bc98f234fda43163ddbe36df8bcde1d13ee176c6dc9b92bb7d3fc842eb66"}, + {file = "scikit_learn-1.3.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:18424efee518a1cde7b0b53a422cde2f6625197de6af36da0b57ec502f126157"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3271552a5eb16f208a6f7f617b8cc6d1f137b52c8a1ef8edf547db0259b2c9fb"}, + {file = "scikit_learn-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4144a5004a676d5022b798d9e573b05139e77f271253a4703eed295bde0433"}, + {file = "scikit_learn-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:67f37d708f042a9b8d59551cf94d30431e01374e00dc2645fa186059c6c5d78b"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8db94cd8a2e038b37a80a04df8783e09caac77cbe052146432e67800e430c028"}, + {file = "scikit_learn-1.3.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:61a6efd384258789aa89415a410dcdb39a50e19d3d8410bd29be365bcdd512d5"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb06f8dce3f5ddc5dee1715a9b9f19f20d295bed8e3cd4fa51e1d050347de525"}, + {file = "scikit_learn-1.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b2de18d86f630d68fe1f87af690d451388bb186480afc719e5f770590c2ef6c"}, + {file = "scikit_learn-1.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:0402638c9a7c219ee52c94cbebc8fcb5eb9fe9c773717965c1f4185588ad3107"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a19f90f95ba93c1a7f7924906d0576a84da7f3b2282ac3bfb7a08a32801add93"}, + {file = "scikit_learn-1.3.2-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:b8692e395a03a60cd927125eef3a8e3424d86dde9b2370d544f0ea35f78a8073"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15e1e94cc23d04d39da797ee34236ce2375ddea158b10bee3c343647d615581d"}, + {file = "scikit_learn-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:785a2213086b7b1abf037aeadbbd6d67159feb3e30263434139c98425e3dcfcf"}, + {file = "scikit_learn-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:64381066f8aa63c2710e6b56edc9f0894cc7bf59bd71b8ce5613a4559b6145e0"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c43290337f7a4b969d207e620658372ba3c1ffb611f8bc2b6f031dc5c6d1d03"}, + {file = "scikit_learn-1.3.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:dc9002fc200bed597d5d34e90c752b74df516d592db162f756cc52836b38fe0e"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d08ada33e955c54355d909b9c06a4789a729977f165b8bae6f225ff0a60ec4a"}, + {file = "scikit_learn-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:763f0ae4b79b0ff9cca0bf3716bcc9915bdacff3cebea15ec79652d1cc4fa5c9"}, + {file = "scikit_learn-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:ed932ea780517b00dae7431e031faae6b49b20eb6950918eb83bd043237950e0"}, +] + +[package.dependencies] +joblib = ">=1.1.1" +numpy = ">=1.17.3,<2.0" +scipy = ">=1.5.0" +threadpoolctl = ">=2.0.0" + +[package.extras] +benchmark = ["matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "pandas (>=1.0.5)"] +docs = ["Pillow (>=7.1.2)", "matplotlib (>=3.1.3)", "memory-profiler (>=0.57.0)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)", "sphinx (>=6.0.0)", "sphinx-copybutton (>=0.5.2)", "sphinx-gallery (>=0.10.1)", "sphinx-prompt (>=1.3.0)", "sphinxext-opengraph (>=0.4.2)"] +examples = ["matplotlib (>=3.1.3)", "pandas (>=1.0.5)", "plotly (>=5.14.0)", "pooch (>=1.6.0)", "scikit-image (>=0.16.2)", "seaborn (>=0.9.0)"] +tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc (>=1.2.0)", "pandas (>=1.0.5)", "pooch (>=1.6.0)", "pyamg (>=4.0.0)", "pytest (>=7.1.2)", "pytest-cov (>=2.9.0)", "ruff (>=0.0.272)", "scikit-image (>=0.16.2)"] + [[package]] name = "scipy" version = "1.10.1" @@ -3026,6 +3482,28 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +[[package]] +name = "setuptools-scm" +version = "8.0.4" +description = "the blessed package to manage your versions by scm tags" +optional = true +python-versions = ">=3.8" +files = [ + {file = "setuptools-scm-8.0.4.tar.gz", hash = "sha256:b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7"}, + {file = "setuptools_scm-8.0.4-py3-none-any.whl", hash = "sha256:b47844cd2a84b83b3187a5782c71128c28b4c94cad8bfb871da2784a5cb54c4f"}, +] + +[package.dependencies] +packaging = ">=20" +setuptools = "*" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} +typing-extensions = "*" + +[package.extras] +docs = ["entangled-cli[rich]", "mkdocs", "mkdocs-entangled-plugin", "mkdocs-material", "mkdocstrings[python]", "pygments"] +rich = ["rich"] +test = ["build", "pytest", "rich", "wheel"] + [[package]] name = "six" version = "1.16.0" @@ -3203,6 +3681,17 @@ files = [ {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, ] +[[package]] +name = "threadpoolctl" +version = "3.2.0" +description = "threadpoolctl" +optional = true +python-versions = ">=3.8" +files = [ + {file = "threadpoolctl-3.2.0-py3-none-any.whl", hash = "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032"}, + {file = "threadpoolctl-3.2.0.tar.gz", hash = "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355"}, +] + [[package]] name = "toml" version = "0.10.2" @@ -3611,4 +4100,4 @@ mlflow = ["kedro-mlflow"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.11" -content-hash = "34cea1de56556e002ad82e79af443ba877b382a13724157db731b15e970df45c" +content-hash = "d22198aa06c1976773543570c43041d8eae9d4b9565575222f35e562382840e6" From 40c8a4b4934699e6dd1b3e830a6128a472866b28 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Fri, 17 Nov 2023 23:13:33 +0100 Subject: [PATCH 20/37] fix: restored python 3.8 compatibility --- kedro_vertexai/grouping.py | 2 +- tox.ini | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/kedro_vertexai/grouping.py b/kedro_vertexai/grouping.py index fb6a0d6..dcd2b9a 100644 --- a/kedro_vertexai/grouping.py +++ b/kedro_vertexai/grouping.py @@ -91,7 +91,7 @@ def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: ) # 1 or 0 loop for tag in grouping_tags: - group_name = tag.removeprefix(self.tag_prefix) + group_name = tag[len(self.tag_prefix) :] if group_name not in group_mapping: group_mapping[group_name] = set() group_mapping[group_name] = group_mapping[group_name].union( diff --git a/tox.ini b/tox.ini index 95ca777..fce4793 100644 --- a/tox.ini +++ b/tox.ini @@ -8,8 +8,9 @@ python = 3.10: py310 [testenv] -whitelist_externals = - poetry +allowlist_externals = poetry +#whitelist_externals = +# poetry skip_install = true commands= poetry install -v -E mlflow From 46f815eed55a4a7e7b45c74eaf96d82dc0d33424 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Mon, 20 Nov 2023 12:59:05 +0100 Subject: [PATCH 21/37] docs: clarified docs and some comments about grouping and some typing hints --- .gitignore | 3 +++ CHANGELOG.md | 2 +- .../02_installation/02_configuration.md | 22 ++++++++++++++----- kedro_vertexai/config.py | 4 +++- kedro_vertexai/grouping.py | 19 ++++++++-------- tox.ini | 2 -- 6 files changed, 33 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index c615b7b..8f37d62 100644 --- a/.gitignore +++ b/.gitignore @@ -176,3 +176,6 @@ conf/azure/credentials.yml # pyspelling dictionary.dic + +# vs code +.vscode diff --git a/CHANGELOG.md b/CHANGELOG.md index 6178ee1..f32b7ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ - Added explicite pyarrow dependency to avoid critical vulnerability - Updated dependencies and tested for kedro `0.18.14` -- Feature: added option to group kedro some nodes together at execution in single vertex process to allow better optimization - less steps, delays at running images for vertex nodes and less wasted time of data serialization thanks to possibility to use InMemoryDataset at grouped nodes +- [Feature 🚀] Node grouping: added option to group multiple Kedro nodes together at execution in single Vertex AI process to allow better optimization - less steps, shorter delays while running Vertex AI nodes and less wasted time of data serialization thanks to possibility to use the MemoryDataset ## [0.9.1] - 2023-08-16 diff --git a/docs/source/02_installation/02_configuration.md b/docs/source/02_installation/02_configuration.md index 1b842f7..432df4b 100644 --- a/docs/source/02_installation/02_configuration.md +++ b/docs/source/02_installation/02_configuration.md @@ -26,7 +26,9 @@ run_config: # Optional pipeline description #description: "Very Important Pipeline" - # Optional config for node execution grouping based on tags. Specifying tag prefix enables this feature + # Optional config for node execution grouping. - 2 classes are provided: + # - default no-grouping option IdentityNodeGrouper + # - tag based grouping with TagNodeGrouper grouping: cls: kedro_vertexai.grouping.IdentityNodeGrouper # cls: kedro_vertexai.grouping.TagNodeGrouper @@ -182,9 +184,9 @@ Note that the `generate_config` has access to an initialized plugin config via ` ## Grouping feature -Optional `grouping` section allows to enable grouping feature that aggregates many kedro nodes execution to single VertexAI node. Using it gives you freedom to subdivide kedro pipelines to as many steps as logically makes sense and still have advantages of in memory data transmission via data catalog. It also saves you a lot of time on delays of docker container running at Vertex nodes which can take around 2 minutes for each node. +Optional `grouping` section enables grouping feature that aggregates many Kedro nodes execution to single VertexAI node(s). Using it allows you to freely subdivide Kedro pipelines to as many steps as logically makes sense while keeping advantages of in memory data transmission possibilities. It also saves you a lot of time avoiding delays of docker container starting at Vertex nodes which can amount to about 2 minutes for each VertexAI node. -API allows implementation of your own aggregation method. You can provide aggregating class and its init params `kwargs` dictionary of arguments. Default class is `IdentitiyNodeGrouper` which "groups" each node into separate group, effectively being transparent operation that does not change anything. Class that implements grouping by provided tag prefix is called `TagNodeGrouper`. The default prefix is `"group:"`. It uses what follows after tag the prefix as a name of group of nodes. Only one tag with this grouping prefix is allowed per node; more than that results in `GroupingException`. Example configuration: +API allows implementation of your own aggregation method. You can provide aggregating class and its additional init params as `kwargs` dictionary. Default class is `IdentitiyNodeGrouper` which actually does not group the nodes (plugin behaves as in versions before `0.9.1`). Class that implements grouping using configured tag prefix is called `TagNodeGrouper`. The default prefix is `"group:"`. It uses what follows after the tag prefix as a name of group of nodes. Only one tag with this grouping prefix is allowed per node; more than that results in `GroupingException`. Example configuration: ```yaml grouping: cls: kedro_vertexai.grouping.TagNodeGrouper @@ -192,10 +194,20 @@ API allows implementation of your own aggregation method. You can provide aggreg tag_prefix: "group:" ``` -This grouping class is used at pipeline translation generator. It implements interface of `NodeGrouper` class with `group` function, that accepts `pipeline.node_dependencies` and returns `Grouping`. `Grouping` is a `dataclass` with two dictionaries: +The above configuration will result in the following result in this sample pipeline: +```python +Pipeline([ + node(some_operation, "A", "B", name="node1", tags=["foo", "group:nodegroup"]), + node(some_operation, "B", "C", name="node2", tags=["bar", "group:nodegroup"]), + node(some_operation, "C", "D", name="node3", tags=["baz"]), +]) +``` +The result will be 2 VertexAI nodes for this pipeline, first with name `nodegroup` that will run `node1` and `node2` Kedro nodes inside and provide output `C` and second VertexAI node: `node3`. Additional MLflow node can be present if `kedro-mlflow` is used. Right now it is not possible to group it. If you feel you need that functionality search for/create an issue on [github page of the plugin](https://github.com/getindata/kedro-vertexai/issues). + +This grouping class is used during pipeline translation at plugin pipeline generator. It implements interface of `NodeGrouper` class with `group` function, that accepts `pipeline.node_dependencies` and returns `Grouping`. `Grouping` is a `dataclass` with two dictionaries: - `node_mapping` - which defines names of groups and says which sets of nodes are part of a given group - `dependencies` - which defines child-parent relation of all groups in `node_mapping`. -`Grouping` class also validates its dependencies upon creation to check whether grouping is valid - does not introduce a cycle after inconsistent grouping. +`Grouping` class also validates dependencies upon creation to check whether the grouping is valid. That means it does not introduce a cycle in dependencies graph. ## Resources configuration diff --git a/kedro_vertexai/config.py b/kedro_vertexai/config.py index 3dcc252..fd1b7fe 100644 --- a/kedro_vertexai/config.py +++ b/kedro_vertexai/config.py @@ -33,7 +33,9 @@ # Optional pipeline description # description: "Very Important Pipeline" - # Optional config for node execution grouping based on tags. Specifying tag prefix enables this feature + # Optional config for node execution grouping. - 2 classes are provided: + # - default no-grouping option IdentityNodeGrouper + # - tag based grouping with TagNodeGrouper grouping: cls: kedro_vertexai.grouping.IdentityNodeGrouper # cls: kedro_vertexai.grouping.TagNodeGrouper diff --git a/kedro_vertexai/grouping.py b/kedro_vertexai/grouping.py index dcd2b9a..e18b01e 100644 --- a/kedro_vertexai/grouping.py +++ b/kedro_vertexai/grouping.py @@ -1,18 +1,19 @@ from abc import ABC from dataclasses import dataclass, field -from typing import Dict, Set, Tuple +from typing import Dict, Set from kedro.pipeline.node import Node from toposort import CircularDependencyError, toposort TagsDict = Dict[str, Set[str]] +PipelineDependenciesDict = Dict[Node, Set[Node]] +GroupDependenciesDict = Dict[str, Set[str]] @dataclass class Grouping: nodes_mapping: Dict[str, Set[Node]] = field(default_factory=dict) - dependencies: Dict[str, Set[str]] = field(default_factory=dict) - # tags: TagsDict = field(default_factory=dict) + dependencies: GroupDependenciesDict = field(default_factory=dict) # not sure if this is good idea to hook it to initialization, but for our limited # usage it should be fine @@ -39,12 +40,10 @@ class NodeGrouper(ABC): For each node it tells which set of nodes are parents of them, based on nodes outputs """ - def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: + def group(self, node_dependencies: PipelineDependenciesDict) -> Grouping: raise NotImplementedError - def _get_tagging( - self, node_dependencies: Dict[Node, Set[Node]] - ) -> Tuple[Dict[str, Set[str]], TagsDict]: + def _get_tagging(self, node_dependencies: PipelineDependenciesDict) -> TagsDict: tagging = dict() # TODO make sure that node.name s are unique within pipeline for node in node_dependencies: @@ -56,7 +55,7 @@ class IdentityNodeGrouper(NodeGrouper): """Default class for grouping which puts each node into its own group, effectively not grouping anything at all.""" - def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: + def group(self, node_dependencies: PipelineDependenciesDict) -> Grouping: return Grouping( nodes_mapping={k.name: {k} for k in node_dependencies.keys()}, dependencies={ @@ -73,7 +72,7 @@ class TagNodeGrouper(NodeGrouper): def __init__(self, tag_prefix="group:") -> None: self.tag_prefix = tag_prefix - def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: + def group(self, node_dependencies: PipelineDependenciesDict) -> Grouping: group_mapping = {k.name: {k} for k in node_dependencies.keys()} group_belonging = {k.name: k.name for k in node_dependencies.keys()} node_names = [k for k in group_mapping.keys()] @@ -100,7 +99,7 @@ def group(self, node_dependencies: Dict[Node, Set[Node]]) -> Grouping: del group_mapping[name] group_belonging[name] = group_name - group_dependencies: Dict[str, Set[str]] = dict() + group_dependencies: GroupDependenciesDict = dict() for child, parents in node_dependencies.items(): group_name = group_belonging[child.name] # deduplication after gropuing thanks to sets and dicts properties diff --git a/tox.ini b/tox.ini index fce4793..07a0fd7 100644 --- a/tox.ini +++ b/tox.ini @@ -9,8 +9,6 @@ python = [testenv] allowlist_externals = poetry -#whitelist_externals = -# poetry skip_install = true commands= poetry install -v -E mlflow From cad68fbcdfd87194ad71b01abdafba3d1af56ac7 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Mon, 20 Nov 2023 15:54:35 +0100 Subject: [PATCH 22/37] deps: bump spellcheck action version, fixed config --- .github/workflows/spellcheck.yml | 2 +- .pre-commit-config.yaml | 2 +- .spellcheck.yml | 42 ++++++++++++++++---------------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index 5b6139d..c39926b 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -16,5 +16,5 @@ jobs: steps: # Spellcheck - uses: actions/checkout@v4 - - uses: rojopolis/spellcheck-github-actions@0.25.0 + - uses: rojopolis/spellcheck-github-actions@0.35.0 name: Spellcheck diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f25ac2a..f4a2edb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,6 +14,6 @@ repos: - id: flake8 args: ['--ignore=E203,W503', '--max-line-length=120'] # see https://github.com/psf/black/issues/315 https://github.com/psf/black/issues/52 - repo: https://github.com/getindata/py-pre-commit-hooks - rev: v0.1.3 + rev: v0.2.0 hooks: - id: pyspelling-docker diff --git a/.spellcheck.yml b/.spellcheck.yml index 9abf0ea..a2ac66b 100644 --- a/.spellcheck.yml +++ b/.spellcheck.yml @@ -10,26 +10,26 @@ matrix: - "README.md" default_encoding: utf-8 pipeline: - - pyspelling.filters.context: - context_visible_first: true - escapes: \\[\\`~] - delimiters: - # Ignore multiline content between fences (fences can have 3 or more back ticks) - # ``` - # content - # ``` - - open: '^(?s)(?P`{1,3})[^`]' - close: '(?P=open)' - # Ignore text between inline back ticks - - open: '(?P`)[^`]' - close: '(?P=open)' - # Ignore text in brackets [] and () - - open: '\[' - close: '\]' - - open: '\(' - close: '\)' - - open: '\{' - close: '\}' + - pyspelling.filters.context: + context_visible_first: true + escapes: \\[\\`~] + delimiters: + # Ignore multiline content between fences (fences can have 3 or more back ticks) + # ``` + # content + # ``` + - open: '(?s)^(?P`{1,3})[^`]' + close: '(?P=open)' + # Ignore text between inline back ticks + - open: '(?P`)[^`]' + close: '(?P=open)' + # Ignore text in brackets [] and () + - open: '\[' + close: '\]' + - open: '\(' + close: '\)' + - open: '\{' + close: '\}' dictionary: wordlists: - - docs/spellcheck_exceptions.txt \ No newline at end of file + - docs/spellcheck_exceptions.txt From d8fb7f6d713d082ebb179bada19fa4fb5cc8ca62 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Mon, 20 Nov 2023 16:04:47 +0100 Subject: [PATCH 23/37] test: debugging spellcheck GH actions issue --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f4a2edb..8aae7dd 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,6 +14,6 @@ repos: - id: flake8 args: ['--ignore=E203,W503', '--max-line-length=120'] # see https://github.com/psf/black/issues/315 https://github.com/psf/black/issues/52 - repo: https://github.com/getindata/py-pre-commit-hooks - rev: v0.2.0 + rev: v0.2.1 hooks: - id: pyspelling-docker From 45e43c2ac1b4a36ecbec9e4d901cbca7f54b6a48 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Mon, 20 Nov 2023 16:08:28 +0100 Subject: [PATCH 24/37] fix: dictionary is necessary for tox spellcheck hook to work --- .gitignore | 3 --- dictionary.dic | Bin 0 -> 3952 bytes 2 files changed, 3 deletions(-) create mode 100644 dictionary.dic diff --git a/.gitignore b/.gitignore index 8f37d62..ff72416 100644 --- a/.gitignore +++ b/.gitignore @@ -174,8 +174,5 @@ terraform/terraform.tfstate .idea conf/azure/credentials.yml -# pyspelling -dictionary.dic - # vs code .vscode diff --git a/dictionary.dic b/dictionary.dic new file mode 100644 index 0000000000000000000000000000000000000000..6e44ab12a23f77a042fc892562d30fa5f8699b6d GIT binary patch literal 3952 zcmai%U5F%C6@brnb#?Xh^imB7dC?}f6(qPB)uSBh@;Exh5PQg@1*>nU&H^we`(x6 z@*{gFo=l1SAuaNSyhx1b+DQ8lGvhE#9);*?diX2yB=T0Sd?}9b@AA)t}={wcYyBjvJdqT;3 z+@oaQ_d;h;00af=>pt9k5`cm^bpBK`WNBNpZYF2-^JlMlo#E^PvuG@*{{Y$ z3muJ%D4`=)l{or(!m4~Lp(igX*~hC18}dd%SN^C}hY)aOUU&vBpRLF-C4uk}ZRK)BUQXDM-zzJQq*9RiClWexe?nKzD0z=730?V& zlKp=%VO4G@+4qYH7v+_NuDq4dlYb})gkvOJm4mrAVN+I>8#U>`n&-$hSg%#&D+%lJ zijvoU12!t2yraaA?A#IBN!Kd7v^a$d=Pf`m1RmDqVIVO^e0=*aU4UHOR; zd%sX}@NdFq!xNK4ZW8EoO1CCurMD;#C2Yz%bSpKvro=(lm5mMgj2-k7^n@arhHznti zqNuHtsFO<8zb#=+PAUoH3e>oMOxdVP2rp6yo`nDFS2$D_JCh0{vBp#9*QAu90@~TM zKj`m>J!M8oW7Z`8E3Vi_$F<)J;{C7{$k8#6fI<=Hv+iFC8Ck}c+r!V6vQpC<1 zgSf5jx>!YHZK*CF$d&7k=T&NT*A?^j;=_C0{=sS(Ux?a+y}*qIF^2Po=8-*R1f6|3 zY?T|;dV>J7XY+$jE85#*fv~eJ6R3G&Po%?6n5^iCWwVMSlj*Xfo0`m=>js^*RaK>g znUm=yXRRmGCV7Wv>?zCt^dJuQ+Nyv{Z95%>n=P3(G!gBYu}i^@zaO$InKU#f?V@$b zZ|z1~TXHxYV)$znEP zr+517z&6g3EOvojzbgd>*|A+PwcC@!hNgHampK#mcLtX*pV=O^Zcmf+H7Vt@)xo7; zs~uftm)YH$?UGqtZV**wF{k4(*I&?+qM?;x&PsrzcelDSYay%F)TPs72wLq>Pcok( z2ifFy6m4@dRU*@xFwU$v_^e7;TLn6Q-+&MLIEg zrM9M)$Z31RXtjI1yA~eay%lw~I6Zo-IhoOJxSb5^9?U1g&J(^&r`UsS8LjRBp|K67 z(p4=P=9IPK9Q3*5rDRm~#IxxY=X_60JAFnug_IMUu^t(85BfnYxX1Bo%j%wysODeN zH>0rGlj&BBsiH}F*9$;@Pj z64tPpSoiR)l5kH^V2PbQKPI&chL%~okm>A)o1srWQf}>n(HZRV{*+v*k~yDiL~d&* z*c`M2wv0E2TRvJCI`r0-XHBZ|GJ#tf?~)7tcHm!PPQlP3%_`ln9kvdL8;Ug<=Nvd| zGGjVUjap|;Wu1^u!wxYxm7;oE8U4#CcH@A9cbau4<`$Hwf2eBA_Gs{`0p+&UGkt#WYuq+RtfK4dQmt>)|c#9rf^Rw%798iF=P) z+(Dy4VsAv9_g0d;q4yHG)QelVMK337(r{O+GMjNd;#;@M0{ua^A4TNbVaxTJ)g%Fn z`5rZkLu|Eumd+i*0Tae%NEtKq7PAzq#0*!N4g~u$W9ZA9ma!UK(Hh^sqScomvL}sx zzb(fzTyHfBHnqSD_PT99DcAN~u79gn8Y;0`X>248HVH?(L~gqE#A)2;Qe3B2K6Rl^g6oY+RomAq zCU5Ayiv0`D3ii2NHIlLyg18@CS>jeS*S(tR&*t{SxIggQI&0SC*40xgj%!$iQ71X5 z@f4RZ+11=)9q~@?183aY@U6Hhthz{{Q_Ka_3*%9O^jn*il z|21p{JaZ#^KV|$GwHY&!D5a*U(Ykh27T} z|Kv!nve#+r|9vkZKg2V^yyr&xI{r4cd}P Date: Mon, 20 Nov 2023 16:33:45 +0100 Subject: [PATCH 25/37] cicd: disabled spellcheck config for cicd, as it misbehaves --- .github/pre-commit-config.yaml | 15 +++++++++++++++ .github/workflows/test_and_publish.yml | 2 +- .pre-commit-config.yaml | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 .github/pre-commit-config.yaml diff --git a/.github/pre-commit-config.yaml b/.github/pre-commit-config.yaml new file mode 100644 index 0000000..5bb94b6 --- /dev/null +++ b/.github/pre-commit-config.yaml @@ -0,0 +1,15 @@ +repos: +- repo: https://github.com/pycqa/isort + rev: 5.12.0 + hooks: + - id: isort + args: ["--profile", "black", "--line-length=79"] +- repo: https://github.com/psf/black + rev: 22.3.0 + hooks: + - id: black +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v2.3.0 + hooks: + - id: flake8 + args: ['--ignore=E203,W503', '--max-line-length=120'] # see https://github.com/psf/black/issues/315 https://github.com/psf/black/issues/52 diff --git a/.github/workflows/test_and_publish.yml b/.github/workflows/test_and_publish.yml index dbbf3c7..e9aabc9 100644 --- a/.github/workflows/test_and_publish.yml +++ b/.github/workflows/test_and_publish.yml @@ -36,7 +36,7 @@ jobs: - name: Check pre-commit status run: | poetry install -v - poetry run pre-commit run --all-files + poetry run pre-commit run --all-files -c .github/pre-commit-config.yaml - name: Test with tox run: | diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8aae7dd..fab9531 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,3 +1,5 @@ +# THIS IS LOCAL PRE-COMMIT CONFIG +# CICD uses separate config in .github until spellcheck hook gets improved repos: - repo: https://github.com/pycqa/isort rev: 5.12.0 From 857a0f973b64aef060969dddfd8de3def03da3bc Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Mon, 20 Nov 2023 16:35:23 +0100 Subject: [PATCH 26/37] Revert "fix: dictionary is necessary for tox spellcheck hook to work" This reverts commit 45e43c2ac1b4a36ecbec9e4d901cbca7f54b6a48. --- .gitignore | 3 +++ dictionary.dic | Bin 3952 -> 0 bytes 2 files changed, 3 insertions(+) delete mode 100644 dictionary.dic diff --git a/.gitignore b/.gitignore index ff72416..8f37d62 100644 --- a/.gitignore +++ b/.gitignore @@ -174,5 +174,8 @@ terraform/terraform.tfstate .idea conf/azure/credentials.yml +# pyspelling +dictionary.dic + # vs code .vscode diff --git a/dictionary.dic b/dictionary.dic deleted file mode 100644 index 6e44ab12a23f77a042fc892562d30fa5f8699b6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3952 zcmai%U5F%C6@brnb#?Xh^imB7dC?}f6(qPB)uSBh@;Exh5PQg@1*>nU&H^we`(x6 z@*{gFo=l1SAuaNSyhx1b+DQ8lGvhE#9);*?diX2yB=T0Sd?}9b@AA)t}={wcYyBjvJdqT;3 z+@oaQ_d;h;00af=>pt9k5`cm^bpBK`WNBNpZYF2-^JlMlo#E^PvuG@*{{Y$ z3muJ%D4`=)l{or(!m4~Lp(igX*~hC18}dd%SN^C}hY)aOUU&vBpRLF-C4uk}ZRK)BUQXDM-zzJQq*9RiClWexe?nKzD0z=730?V& zlKp=%VO4G@+4qYH7v+_NuDq4dlYb})gkvOJm4mrAVN+I>8#U>`n&-$hSg%#&D+%lJ zijvoU12!t2yraaA?A#IBN!Kd7v^a$d=Pf`m1RmDqVIVO^e0=*aU4UHOR; zd%sX}@NdFq!xNK4ZW8EoO1CCurMD;#C2Yz%bSpKvro=(lm5mMgj2-k7^n@arhHznti zqNuHtsFO<8zb#=+PAUoH3e>oMOxdVP2rp6yo`nDFS2$D_JCh0{vBp#9*QAu90@~TM zKj`m>J!M8oW7Z`8E3Vi_$F<)J;{C7{$k8#6fI<=Hv+iFC8Ck}c+r!V6vQpC<1 zgSf5jx>!YHZK*CF$d&7k=T&NT*A?^j;=_C0{=sS(Ux?a+y}*qIF^2Po=8-*R1f6|3 zY?T|;dV>J7XY+$jE85#*fv~eJ6R3G&Po%?6n5^iCWwVMSlj*Xfo0`m=>js^*RaK>g znUm=yXRRmGCV7Wv>?zCt^dJuQ+Nyv{Z95%>n=P3(G!gBYu}i^@zaO$InKU#f?V@$b zZ|z1~TXHxYV)$znEP zr+517z&6g3EOvojzbgd>*|A+PwcC@!hNgHampK#mcLtX*pV=O^Zcmf+H7Vt@)xo7; zs~uftm)YH$?UGqtZV**wF{k4(*I&?+qM?;x&PsrzcelDSYay%F)TPs72wLq>Pcok( z2ifFy6m4@dRU*@xFwU$v_^e7;TLn6Q-+&MLIEg zrM9M)$Z31RXtjI1yA~eay%lw~I6Zo-IhoOJxSb5^9?U1g&J(^&r`UsS8LjRBp|K67 z(p4=P=9IPK9Q3*5rDRm~#IxxY=X_60JAFnug_IMUu^t(85BfnYxX1Bo%j%wysODeN zH>0rGlj&BBsiH}F*9$;@Pj z64tPpSoiR)l5kH^V2PbQKPI&chL%~okm>A)o1srWQf}>n(HZRV{*+v*k~yDiL~d&* z*c`M2wv0E2TRvJCI`r0-XHBZ|GJ#tf?~)7tcHm!PPQlP3%_`ln9kvdL8;Ug<=Nvd| zGGjVUjap|;Wu1^u!wxYxm7;oE8U4#CcH@A9cbau4<`$Hwf2eBA_Gs{`0p+&UGkt#WYuq+RtfK4dQmt>)|c#9rf^Rw%798iF=P) z+(Dy4VsAv9_g0d;q4yHG)QelVMK337(r{O+GMjNd;#;@M0{ua^A4TNbVaxTJ)g%Fn z`5rZkLu|Eumd+i*0Tae%NEtKq7PAzq#0*!N4g~u$W9ZA9ma!UK(Hh^sqScomvL}sx zzb(fzTyHfBHnqSD_PT99DcAN~u79gn8Y;0`X>248HVH?(L~gqE#A)2;Qe3B2K6Rl^g6oY+RomAq zCU5Ayiv0`D3ii2NHIlLyg18@CS>jeS*S(tR&*t{SxIggQI&0SC*40xgj%!$iQ71X5 z@f4RZ+11=)9q~@?183aY@U6Hhthz{{Q_Ka_3*%9O^jn*il z|21p{JaZ#^KV|$GwHY&!D5a*U(Ykh27T} z|Kv!nve#+r|9vkZKg2V^yyr&xI{r4cd}P Date: Mon, 20 Nov 2023 18:18:00 +0100 Subject: [PATCH 27/37] refactor: added run_config and context as optional arguments of nodegrouper --- kedro_vertexai/config.py | 21 +++++++++++---------- kedro_vertexai/dynamic_config.py | 4 +--- kedro_vertexai/generator.py | 5 ++++- kedro_vertexai/grouping.py | 12 +++++++++++- tests/test_config.py | 6 +++--- tests/test_grouping.py | 6 +++--- 6 files changed, 33 insertions(+), 21 deletions(-) diff --git a/kedro_vertexai/config.py b/kedro_vertexai/config.py index fd1b7fe..3f9bb5e 100644 --- a/kedro_vertexai/config.py +++ b/kedro_vertexai/config.py @@ -111,9 +111,7 @@ # the only place to put it to avoid circular dependencies -def dynamic_load_class( - load_class, args: Optional[list] = None, kwargs: Optional[dict] = None -): +def dynamic_load_class(load_class, *args, **kwargs): if args is None: args = [] if kwargs is None: @@ -121,11 +119,11 @@ def dynamic_load_class( try: module_name, class_name = load_class.rsplit(".", 1) logger.info(f"Initializing {class_name}") - cls = getattr(import_module(module_name), class_name) - return cls(*args, **kwargs) + class_load = getattr(import_module(module_name), class_name) + return class_load(*args, **kwargs) except: # noqa: E722 logger.error( - f"Could not dynamically load class {load_class} with it init params, " + f"Could not dynamically load class {load_class} with its init params, " f"make sure it's valid and accessible from the current Python interpreter", exc_info=True, ) @@ -137,12 +135,15 @@ class GroupingConfig(BaseModel): @validator("cls") def class_valid(cls, v, values, **kwargs): - c = dynamic_load_class(v) - if c is None: - raise ValueError(f"Could not validate grouping class {v} with its params.") try: if "params" in values: - c(**values["params"]) + c = dynamic_load_class(v, None, None, **values["params"]) + else: + c = dynamic_load_class(v, None, None) + if c is None: + raise ValueError( + f"Could not validate grouping class {v} with its params." + ) except: # noqa: E722 raise ValueError(f"Invalid parameters for grouping class {v}.") return v diff --git a/kedro_vertexai/dynamic_config.py b/kedro_vertexai/dynamic_config.py index 40786c3..1aada3e 100644 --- a/kedro_vertexai/dynamic_config.py +++ b/kedro_vertexai/dynamic_config.py @@ -20,9 +20,7 @@ def build( config: PluginConfig, provider_config: DynamicConfigProviderConfig, ) -> "DynamicConfigProvider": - return dynamic_load_class( - provider_config.cls, args=[config], kwargs=provider_config.params - ) + return dynamic_load_class(provider_config.cls, config, **provider_config.params) def __init__(self, config: PluginConfig, **kwargs): self.config = config diff --git a/kedro_vertexai/generator.py b/kedro_vertexai/generator.py index 4cad28c..82e3a87 100644 --- a/kedro_vertexai/generator.py +++ b/kedro_vertexai/generator.py @@ -51,7 +51,10 @@ def __init__(self, config, project_name, context, run_name: str): self.run_config: RunConfig = config.run_config self.catalog = context.config_loader.get("catalog*") self.grouping: NodeGrouper = dynamic_load_class( - self.run_config.grouping.cls, kwargs=self.run_config.grouping.params + self.run_config.grouping.cls, + context, + self.run_config, + **self.run_config.grouping.params, ) def get_pipeline_name(self): diff --git a/kedro_vertexai/grouping.py b/kedro_vertexai/grouping.py index e18b01e..8d23095 100644 --- a/kedro_vertexai/grouping.py +++ b/kedro_vertexai/grouping.py @@ -2,9 +2,12 @@ from dataclasses import dataclass, field from typing import Dict, Set +from kedro.framework.context import KedroContext from kedro.pipeline.node import Node from toposort import CircularDependencyError, toposort +from kedro_vertexai.config import RunConfig + TagsDict = Dict[str, Set[str]] PipelineDependenciesDict = Dict[Node, Set[Node]] GroupDependenciesDict = Dict[str, Set[str]] @@ -40,6 +43,10 @@ class NodeGrouper(ABC): For each node it tells which set of nodes are parents of them, based on nodes outputs """ + def __init__(self, kedro_context: KedroContext, run_config: RunConfig): + self.context = kedro_context + self.run_config = run_config + def group(self, node_dependencies: PipelineDependenciesDict) -> Grouping: raise NotImplementedError @@ -69,7 +76,10 @@ class TagNodeGrouper(NodeGrouper): """Grouping class that uses special tag prefix convention to aggregate nodes together. Only one such tag is allowed per node.""" - def __init__(self, tag_prefix="group:") -> None: + def __init__( + self, kedro_context: KedroContext, run_config: RunConfig, tag_prefix="group:" + ) -> None: + super().__init__(kedro_context, run_config) self.tag_prefix = tag_prefix def group(self, node_dependencies: PipelineDependenciesDict) -> Grouping: diff --git a/tests/test_config.py b/tests/test_config.py index 2c9b952..39b7f0e 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -54,7 +54,7 @@ def test_grouping_config(self): assert ( cfg.run_config.grouping.cls == "kedro_vertexai.grouping.IdentityNodeGrouper" ) - c_obj = dynamic_load_class(cfg.run_config.grouping.cls) + c_obj = dynamic_load_class(cfg.run_config.grouping.cls, None, None) assert isinstance(c_obj, IdentityNodeGrouper) cfg_tag_group = """ @@ -71,7 +71,7 @@ def test_grouping_config(self): cfg = PluginConfig.parse_obj(yaml.safe_load(cfg_tag_group)) assert cfg.run_config.grouping is not None c_obj = dynamic_load_class( - cfg.run_config.grouping.cls, kwargs=cfg.run_config.grouping.params + cfg.run_config.grouping.cls, None, None, **cfg.run_config.grouping.params ) assert isinstance(c_obj, TagNodeGrouper) assert c_obj.tag_prefix == "group:" @@ -91,7 +91,7 @@ def test_grouping_config_error(self, log_error): """ cfg = PluginConfig.parse_obj(yaml.safe_load(cfg_tag_group)) c = dynamic_load_class( - cfg.run_config.grouping.cls, kwargs=cfg.run_config.grouping.params + cfg.run_config.grouping.cls, **cfg.run_config.grouping.params ) assert c is None log_error.assert_called_once() diff --git a/tests/test_grouping.py b/tests/test_grouping.py index ea3c2ef..2f05f60 100644 --- a/tests/test_grouping.py +++ b/tests/test_grouping.py @@ -71,7 +71,7 @@ def create_pipeline_deps(self): def test_identity_grouping(self): # given deps = self.create_pipeline_deps() - grouper = IdentityNodeGrouper() + grouper = IdentityNodeGrouper(None, None) # when group = grouper.group(deps) for name in self.node_names: @@ -91,7 +91,7 @@ def test_legal_tag_groups(self): deps = self.create_pipeline_deps() for prefix in self.legal_groups: with self.subTest(msg=f"test_{prefix}", group_prefix=prefix): - grouper = TagNodeGrouper(prefix + ":") + grouper = TagNodeGrouper(None, None, prefix + ":") # when group = grouper.group(deps) # assert @@ -116,7 +116,7 @@ def test_illegal_tag_groups(self): deps = self.create_pipeline_deps() for prefix in self.illegal_groups: with self.subTest(msg=f"test_{prefix}", group_prefix=prefix): - grouper = TagNodeGrouper(prefix + ":") + grouper = TagNodeGrouper(None, None, prefix + ":") # when with self.assertRaises(GroupingException): grouper.group(deps) From ec50f51d026ba485120bfc896cd159032e2303c1 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Tue, 21 Nov 2023 13:42:10 +0100 Subject: [PATCH 28/37] refactor: removed run_config from Grouper class, improved grp config validation --- kedro_vertexai/config.py | 44 +++++++++++++++++++++----------- kedro_vertexai/dynamic_config.py | 4 +-- kedro_vertexai/generator.py | 5 ++-- kedro_vertexai/grouping.py | 13 +++------- tests/test_config.py | 12 ++++----- tests/test_grouping.py | 6 ++--- 6 files changed, 46 insertions(+), 38 deletions(-) diff --git a/kedro_vertexai/config.py b/kedro_vertexai/config.py index 3f9bb5e..2215759 100644 --- a/kedro_vertexai/config.py +++ b/kedro_vertexai/config.py @@ -1,6 +1,7 @@ import logging import os from importlib import import_module +from inspect import signature from typing import Dict, List, Optional from pydantic import BaseModel, validator @@ -110,25 +111,38 @@ logger = logging.getLogger(__name__) -# the only place to put it to avoid circular dependencies -def dynamic_load_class(load_class, *args, **kwargs): - if args is None: - args = [] - if kwargs is None: - kwargs = {} +def dynamic_load_class(load_class): try: module_name, class_name = load_class.rsplit(".", 1) logger.info(f"Initializing {class_name}") class_load = getattr(import_module(module_name), class_name) - return class_load(*args, **kwargs) + return class_load except: # noqa: E722 logger.error( - f"Could not dynamically load class {load_class} with its init params, " + f"Could not dynamically load class {load_class}, " f"make sure it's valid and accessible from the current Python interpreter", exc_info=True, ) +def dynamic_init_class(load_class, *args, **kwargs): + if load_class is None: + return None + if args is None: + args = [] + if kwargs is None: + kwargs = {} + try: + loaded_class = dynamic_load_class(load_class) + return loaded_class(*args, **kwargs) + except: # noqa: E722 + logger.error( + f"Could not dynamically init class {load_class} with its init params, " + f"make sure the configured params match the ", + exc_info=True, + ) + + class GroupingConfig(BaseModel): cls: str = "kedro_vertexai.grouping.IdentityNodeGrouper" params: Optional[dict] = {} @@ -136,16 +150,16 @@ class GroupingConfig(BaseModel): @validator("cls") def class_valid(cls, v, values, **kwargs): try: + grouper_class = dynamic_load_class(v) + class_sig = signature(grouper_class) if "params" in values: - c = dynamic_load_class(v, None, None, **values["params"]) + class_sig.bind(None, **values["params"]) else: - c = dynamic_load_class(v, None, None) - if c is None: - raise ValueError( - f"Could not validate grouping class {v} with its params." - ) + class_sig.bind(None) except: # noqa: E722 - raise ValueError(f"Invalid parameters for grouping class {v}.") + raise ValueError( + f"Invalid parameters for grouping class {v}, validation failed." + ) return v # @computed_field diff --git a/kedro_vertexai/dynamic_config.py b/kedro_vertexai/dynamic_config.py index 1aada3e..ddea167 100644 --- a/kedro_vertexai/dynamic_config.py +++ b/kedro_vertexai/dynamic_config.py @@ -4,7 +4,7 @@ from kedro_vertexai.config import ( DynamicConfigProviderConfig, PluginConfig, - dynamic_load_class, + dynamic_init_class, ) logger = logging.getLogger(__name__) @@ -20,7 +20,7 @@ def build( config: PluginConfig, provider_config: DynamicConfigProviderConfig, ) -> "DynamicConfigProvider": - return dynamic_load_class(provider_config.cls, config, **provider_config.params) + return dynamic_init_class(provider_config.cls, config, **provider_config.params) def __init__(self, config: PluginConfig, **kwargs): self.config = config diff --git a/kedro_vertexai/generator.py b/kedro_vertexai/generator.py index 82e3a87..65de2d5 100644 --- a/kedro_vertexai/generator.py +++ b/kedro_vertexai/generator.py @@ -21,7 +21,7 @@ from kedro_vertexai.config import ( KedroVertexAIRunnerConfig, RunConfig, - dynamic_load_class, + dynamic_init_class, ) from kedro_vertexai.constants import ( KEDRO_CONFIG_JOB_NAME, @@ -50,10 +50,9 @@ def __init__(self, config, project_name, context, run_name: str): self.context: KedroContext = context self.run_config: RunConfig = config.run_config self.catalog = context.config_loader.get("catalog*") - self.grouping: NodeGrouper = dynamic_load_class( + self.grouping: NodeGrouper = dynamic_init_class( self.run_config.grouping.cls, context, - self.run_config, **self.run_config.grouping.params, ) diff --git a/kedro_vertexai/grouping.py b/kedro_vertexai/grouping.py index 8d23095..a21c3d9 100644 --- a/kedro_vertexai/grouping.py +++ b/kedro_vertexai/grouping.py @@ -1,13 +1,11 @@ from abc import ABC from dataclasses import dataclass, field -from typing import Dict, Set +from typing import Dict, Optional, Set from kedro.framework.context import KedroContext from kedro.pipeline.node import Node from toposort import CircularDependencyError, toposort -from kedro_vertexai.config import RunConfig - TagsDict = Dict[str, Set[str]] PipelineDependenciesDict = Dict[Node, Set[Node]] GroupDependenciesDict = Dict[str, Set[str]] @@ -43,9 +41,8 @@ class NodeGrouper(ABC): For each node it tells which set of nodes are parents of them, based on nodes outputs """ - def __init__(self, kedro_context: KedroContext, run_config: RunConfig): + def __init__(self, kedro_context: Optional[KedroContext]): self.context = kedro_context - self.run_config = run_config def group(self, node_dependencies: PipelineDependenciesDict) -> Grouping: raise NotImplementedError @@ -76,10 +73,8 @@ class TagNodeGrouper(NodeGrouper): """Grouping class that uses special tag prefix convention to aggregate nodes together. Only one such tag is allowed per node.""" - def __init__( - self, kedro_context: KedroContext, run_config: RunConfig, tag_prefix="group:" - ) -> None: - super().__init__(kedro_context, run_config) + def __init__(self, kedro_context: KedroContext, tag_prefix="group:") -> None: + super().__init__(kedro_context) self.tag_prefix = tag_prefix def group(self, node_dependencies: PipelineDependenciesDict) -> Grouping: diff --git a/tests/test_config.py b/tests/test_config.py index 39b7f0e..458c679 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -4,7 +4,7 @@ import yaml from pydantic import ValidationError -from kedro_vertexai.config import PluginConfig, dynamic_load_class +from kedro_vertexai.config import PluginConfig, dynamic_init_class from kedro_vertexai.grouping import IdentityNodeGrouper, TagNodeGrouper CONFIG_FULL = """ @@ -54,7 +54,7 @@ def test_grouping_config(self): assert ( cfg.run_config.grouping.cls == "kedro_vertexai.grouping.IdentityNodeGrouper" ) - c_obj = dynamic_load_class(cfg.run_config.grouping.cls, None, None) + c_obj = dynamic_init_class(cfg.run_config.grouping.cls, None) assert isinstance(c_obj, IdentityNodeGrouper) cfg_tag_group = """ @@ -70,8 +70,8 @@ def test_grouping_config(self): """ cfg = PluginConfig.parse_obj(yaml.safe_load(cfg_tag_group)) assert cfg.run_config.grouping is not None - c_obj = dynamic_load_class( - cfg.run_config.grouping.cls, None, None, **cfg.run_config.grouping.params + c_obj = dynamic_init_class( + cfg.run_config.grouping.cls, None, **cfg.run_config.grouping.params ) assert isinstance(c_obj, TagNodeGrouper) assert c_obj.tag_prefix == "group:" @@ -90,8 +90,8 @@ def test_grouping_config_error(self, log_error): foo: "bar:" """ cfg = PluginConfig.parse_obj(yaml.safe_load(cfg_tag_group)) - c = dynamic_load_class( - cfg.run_config.grouping.cls, **cfg.run_config.grouping.params + c = dynamic_init_class( + cfg.run_config.grouping.cls, None, **cfg.run_config.grouping.params ) assert c is None log_error.assert_called_once() diff --git a/tests/test_grouping.py b/tests/test_grouping.py index 2f05f60..502dca5 100644 --- a/tests/test_grouping.py +++ b/tests/test_grouping.py @@ -71,7 +71,7 @@ def create_pipeline_deps(self): def test_identity_grouping(self): # given deps = self.create_pipeline_deps() - grouper = IdentityNodeGrouper(None, None) + grouper = IdentityNodeGrouper(None) # when group = grouper.group(deps) for name in self.node_names: @@ -91,7 +91,7 @@ def test_legal_tag_groups(self): deps = self.create_pipeline_deps() for prefix in self.legal_groups: with self.subTest(msg=f"test_{prefix}", group_prefix=prefix): - grouper = TagNodeGrouper(None, None, prefix + ":") + grouper = TagNodeGrouper(None, prefix + ":") # when group = grouper.group(deps) # assert @@ -116,7 +116,7 @@ def test_illegal_tag_groups(self): deps = self.create_pipeline_deps() for prefix in self.illegal_groups: with self.subTest(msg=f"test_{prefix}", group_prefix=prefix): - grouper = TagNodeGrouper(None, None, prefix + ":") + grouper = TagNodeGrouper(None, prefix + ":") # when with self.assertRaises(GroupingException): grouper.group(deps) From 59c86969ad1d203b319563d30a81ac15aa303d61 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Tue, 21 Nov 2023 13:42:26 +0100 Subject: [PATCH 29/37] docs: added disclaimer about grouping feature --- docs/source/02_installation/02_configuration.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/source/02_installation/02_configuration.md b/docs/source/02_installation/02_configuration.md index 432df4b..f6b3622 100644 --- a/docs/source/02_installation/02_configuration.md +++ b/docs/source/02_installation/02_configuration.md @@ -181,6 +181,10 @@ def generate_config(self) -> dict: First one - `target_config_file` should return the name of the configuration file to be generated (e.g. `credentials.yml`) and the `generate_config` should return a dictionary, which will be then serialized into the target file as YAML. If the target file already exists during the invocation, it will be merged (see method `kedro_vertexai.dynamic_config.DynamicConfigProvider.merge_with_existing` ) with the existing one and then saved again. Note that the `generate_config` has access to an initialized plugin config via `self.config` property, so any values from the `vertexai.yml` configuration is accessible. +````note +Make sure that all nodes in pipeline have names and their names are unique within the pipeline when using this feature. +```` + ## Grouping feature From 6bbb464d92afba46ced18d175ce4f302e44525f1 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Tue, 21 Nov 2023 14:03:13 +0100 Subject: [PATCH 30/37] docs: added makefile and fixed disclaimer --- docs/Makefile | 20 +++++++++++++++++++ .../02_installation/02_configuration.md | 7 +++---- 2 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 docs/Makefile diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/source/02_installation/02_configuration.md b/docs/source/02_installation/02_configuration.md index f6b3622..02ed058 100644 --- a/docs/source/02_installation/02_configuration.md +++ b/docs/source/02_installation/02_configuration.md @@ -181,10 +181,6 @@ def generate_config(self) -> dict: First one - `target_config_file` should return the name of the configuration file to be generated (e.g. `credentials.yml`) and the `generate_config` should return a dictionary, which will be then serialized into the target file as YAML. If the target file already exists during the invocation, it will be merged (see method `kedro_vertexai.dynamic_config.DynamicConfigProvider.merge_with_existing` ) with the existing one and then saved again. Note that the `generate_config` has access to an initialized plugin config via `self.config` property, so any values from the `vertexai.yml` configuration is accessible. -````note -Make sure that all nodes in pipeline have names and their names are unique within the pipeline when using this feature. -```` - ## Grouping feature @@ -213,6 +209,9 @@ This grouping class is used during pipeline translation at plugin pipeline gener - `dependencies` - which defines child-parent relation of all groups in `node_mapping`. `Grouping` class also validates dependencies upon creation to check whether the grouping is valid. That means it does not introduce a cycle in dependencies graph. +````{note} +Make sure that all nodes in pipeline have names and their names are unique within the pipeline when using this feature. +```` ## Resources configuration From ded9fc7fd4381f1fca8a86acabbef855564bc8c6 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Tue, 21 Nov 2023 16:46:54 +0100 Subject: [PATCH 31/37] tests: cicd: reworked e2e tests to support multiple cases and added config/test for grouping --- .github/workflows/test_and_publish.yml | 22 +++++-- tests/e2e/{ => grouping}/catalog.yml | 0 .../e2e/grouping/pipeline_data_processing.py | 35 ++++++++++++ tests/e2e/grouping/pipeline_data_science.py | 29 ++++++++++ tests/e2e/grouping/starter-config.yml | 3 + tests/e2e/grouping/vertexai.yml | 57 +++++++++++++++++++ tests/e2e/standard/catalog.yml | 16 ++++++ tests/e2e/{ => standard}/starter-config.yml | 0 tests/e2e/{ => standard}/vertexai.yml | 2 +- 9 files changed, 157 insertions(+), 7 deletions(-) rename tests/e2e/{ => grouping}/catalog.yml (100%) create mode 100644 tests/e2e/grouping/pipeline_data_processing.py create mode 100644 tests/e2e/grouping/pipeline_data_science.py create mode 100644 tests/e2e/grouping/starter-config.yml create mode 100644 tests/e2e/grouping/vertexai.yml create mode 100644 tests/e2e/standard/catalog.yml rename tests/e2e/{ => standard}/starter-config.yml (100%) rename tests/e2e/{ => standard}/vertexai.yml (96%) diff --git a/.github/workflows/test_and_publish.yml b/.github/workflows/test_and_publish.yml index e9aabc9..32bd07e 100644 --- a/.github/workflows/test_and_publish.yml +++ b/.github/workflows/test_and_publish.yml @@ -99,6 +99,9 @@ jobs: e2e_tests: runs-on: ubuntu-latest needs: [unit_tests, sonarcloud] + strategy: + matrix: + e2e_case: ["standard", "grouping"] steps: - uses: actions/checkout@v4 @@ -120,7 +123,7 @@ jobs: # kedro 0.18.1 is on purpose here, due to https://github.com/kedro-org/kedro-starters/issues/99 run: | pip install $(find "./dist" -name "*.tar.gz") - kedro new --starter spaceflights --config tests/e2e/starter-config.yml --verbose + kedro new --starter spaceflights --config tests/e2e/${{ matrix.e2e_case }}/starter-config.yml --verbose - name: Install project dependencies working-directory: ./spaceflights @@ -139,8 +142,13 @@ jobs: sed -i 's/\(COPY src\/requirements.txt.*\)$/\1\nCOPY kedro-vertexai.tar.gz ./g' Dockerfile echo "!data/01_raw" >> .dockerignore kedro vertexai init gid-ml-ops-sandbox europe-west4 - mv ../tests/e2e/catalog.yml conf/base/catalog.yml - mv ../tests/e2e/vertexai.yml conf/base/vertexai.yml + cp ../tests/e2e/${{ matrix.e2e_case }}/catalog.yml conf/base/catalog.yml + cp ../tests/e2e/${{ matrix.e2e_case }}/vertexai.yml conf/base/vertexai.yml + # Introducing tagging to pipelines + if [[ "${{ matrix.e2e_case }}" == "grouping" ]]; then + mv ../tests/e2e/${{ matrix.e2e_case }}/pipeline_data_processing.py src/spaceflights/pipelines/data_processing/pipeline.py + mv ../tests/e2e/${{ matrix.e2e_case }}/pipeline_data_science.py src/spaceflights/pipelines/data_science/pipeline.py + fi - name: Prepare docker env uses: docker/setup-buildx-action@v3 @@ -151,14 +159,15 @@ jobs: - name: Build pipeline docker image run: | cd ./spaceflights - docker build --build-arg BASE_IMAGE=python:3.8-buster --tag kedro-vertexai-e2e:latest --load . + docker pull gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:${{ matrix.e2e_case }} || true + docker build --build-arg BASE_IMAGE=python:3.10-buster --tag kedro-vertexai-e2e:${{ matrix.e2e_case }} --load --cache-from=gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:${{ matrix.e2e_case }} . - name: Publish docker image to GCR uses: mattes/gce-docker-push-action@v1 with: creds: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} - src: kedro-vertexai-e2e:latest - dst: gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:latest + src: kedro-vertexai-e2e:${{ matrix.e2e_case }} + dst: gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:${{ matrix.e2e_case }} - name: Set up GCP Credentials uses: google-github-actions/auth@v1.1.1 @@ -172,6 +181,7 @@ jobs: cd ./spaceflights export KEDRO_CONFIG_COMMIT_ID=$GITHUB_SHA kedro vertexai run-once --wait-for-completion + publish: if: github.event.pull_request == null && github.ref == 'refs/heads/master' needs: [ e2e_tests, codeql ] diff --git a/tests/e2e/catalog.yml b/tests/e2e/grouping/catalog.yml similarity index 100% rename from tests/e2e/catalog.yml rename to tests/e2e/grouping/catalog.yml diff --git a/tests/e2e/grouping/pipeline_data_processing.py b/tests/e2e/grouping/pipeline_data_processing.py new file mode 100644 index 0000000..be4fad3 --- /dev/null +++ b/tests/e2e/grouping/pipeline_data_processing.py @@ -0,0 +1,35 @@ +from kedro.pipeline import Pipeline, node, pipeline + +from .nodes import ( + create_model_input_table, + preprocess_companies, + preprocess_shuttles, +) + + +def create_pipeline(**kwargs) -> Pipeline: + return pipeline( + [ + node( + func=preprocess_companies, + inputs="companies", + outputs="preprocessed_companies", + name="preprocess_companies_node", + tags=["grp:preprocessing"], + ), + node( + func=preprocess_shuttles, + inputs="shuttles", + outputs="preprocessed_shuttles", + name="preprocess_shuttles_node", + tags=["grp:preprocessing"], + ), + node( + func=create_model_input_table, + inputs=["preprocessed_shuttles", "preprocessed_companies", "reviews"], + outputs="model_input_table", + name="create_model_input_table_node", + tags=["grp:preprocessing"], + ), + ] + ) diff --git a/tests/e2e/grouping/pipeline_data_science.py b/tests/e2e/grouping/pipeline_data_science.py new file mode 100644 index 0000000..696ad32 --- /dev/null +++ b/tests/e2e/grouping/pipeline_data_science.py @@ -0,0 +1,29 @@ +from kedro.pipeline import Pipeline, node, pipeline + +from .nodes import evaluate_model, split_data, train_model + + +def create_pipeline(**kwargs) -> Pipeline: + return pipeline( + [ + node( + func=split_data, + inputs=["model_input_table", "params:model_options"], + outputs=["X_train", "X_test", "y_train", "y_test"], + name="split_data_node", + tags=["grp:preprocessing"], + ), + node( + func=train_model, + inputs=["X_train", "y_train"], + outputs="regressor", + name="train_model_node", + ), + node( + func=evaluate_model, + inputs=["regressor", "X_test", "y_test"], + outputs=None, + name="evaluate_model_node", + ), + ] + ) diff --git a/tests/e2e/grouping/starter-config.yml b/tests/e2e/grouping/starter-config.yml new file mode 100644 index 0000000..f884da6 --- /dev/null +++ b/tests/e2e/grouping/starter-config.yml @@ -0,0 +1,3 @@ +project_name: Spaceflights VertexAI E2E Test With Grouping +repo_name: spaceflights +python_package: spaceflights \ No newline at end of file diff --git a/tests/e2e/grouping/vertexai.yml b/tests/e2e/grouping/vertexai.yml new file mode 100644 index 0000000..b0d5d47 --- /dev/null +++ b/tests/e2e/grouping/vertexai.yml @@ -0,0 +1,57 @@ +project_id: gid-ml-ops-sandbox +region: europe-west4 +run_config: + # Name of the image to run as the pipeline steps + image: gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:grouping + + # Pull policy to be used for the steps. Use Always if you push the images + # on the same tag, or Never if you use only local images + image_pull_policy: IfNotPresent + + # Location of Vertex AI GCS root + root: gid-ml-ops-sandbox-plugin-tests/staging + + # Name of the kubeflow experiment to be created + experiment_name: kedro-vertex-e2e-grouping + + # Name of the scheduled run, templated with the schedule parameters + scheduled_run_name: kedro-vertex-e2e-grouping + + # Optional service account to run vertex AI Pipeline with + service_account: vertex-ai-pipelines@gid-ml-ops-sandbox.iam.gserviceaccount.com + + # Optional pipeline description + # description: "Very Important Pipeline" + grouping: + cls: kedro_vertexai.grouping.TagNodeGrouper + params: + tag_prefix: "grp:" + + # How long to keep underlying Argo workflow (together with pods and data + # volume after pipeline finishes) [in seconds]. Default: 1 week + ttl: 604800 + + # Optional network configuration + # network: + + # Name of the vpc to use for running Vertex Pipeline + # vpc: my-vpc + + # Hosts aliases to be placed in /etc/hosts when pipeline is executed + # host_aliases: + # - ip: 127.0.0.1 + # hostnames: me.local + + # What Kedro pipeline should be run as the last step regardless of the + # pipeline status. Used to send notifications or raise the alerts + # on_exit_pipeline: notify_via_slack + + # Optional section allowing adjustment of the resources, reservations and limits + # for the nodes. When not provided they're set to 500m cpu and 1024Mi memory. + # If you don't want to specify pipeline resources set both to None in __default__. + resources: + + # Default settings for the nodes + __default__: + cpu: 500m + memory: 1024Mi \ No newline at end of file diff --git a/tests/e2e/standard/catalog.yml b/tests/e2e/standard/catalog.yml new file mode 100644 index 0000000..a4ffa8b --- /dev/null +++ b/tests/e2e/standard/catalog.yml @@ -0,0 +1,16 @@ +companies: + type: pandas.CSVDataSet + filepath: data/01_raw/companies.csv + layer: raw + +reviews: + type: pandas.CSVDataSet + filepath: data/01_raw/reviews.csv + layer: raw + +shuttles: + type: pandas.ExcelDataSet + filepath: data/01_raw/shuttles.xlsx + layer: raw + load_args: + engine: openpyxl diff --git a/tests/e2e/starter-config.yml b/tests/e2e/standard/starter-config.yml similarity index 100% rename from tests/e2e/starter-config.yml rename to tests/e2e/standard/starter-config.yml diff --git a/tests/e2e/vertexai.yml b/tests/e2e/standard/vertexai.yml similarity index 96% rename from tests/e2e/vertexai.yml rename to tests/e2e/standard/vertexai.yml index 7adfe6a..706bf9a 100644 --- a/tests/e2e/vertexai.yml +++ b/tests/e2e/standard/vertexai.yml @@ -2,7 +2,7 @@ project_id: gid-ml-ops-sandbox region: europe-west4 run_config: # Name of the image to run as the pipeline steps - image: gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:latest + image: gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:standard # Pull policy to be used for the steps. Use Always if you push the images # on the same tag, or Never if you use only local images From bacc20f8cd0923213bfe578772bf99126195540c Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Tue, 21 Nov 2023 17:09:31 +0100 Subject: [PATCH 32/37] fix: tests: fixed double error calling --- kedro_vertexai/config.py | 5 +++-- tests/e2e/standard/starter-config.yml | 2 +- tests/test_config_providers.py | 2 ++ tests/test_grouping.py | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/kedro_vertexai/config.py b/kedro_vertexai/config.py index 2215759..0ed0aa6 100644 --- a/kedro_vertexai/config.py +++ b/kedro_vertexai/config.py @@ -123,17 +123,18 @@ def dynamic_load_class(load_class): f"make sure it's valid and accessible from the current Python interpreter", exc_info=True, ) + return None def dynamic_init_class(load_class, *args, **kwargs): - if load_class is None: - return None if args is None: args = [] if kwargs is None: kwargs = {} try: loaded_class = dynamic_load_class(load_class) + if loaded_class is None: + return None return loaded_class(*args, **kwargs) except: # noqa: E722 logger.error( diff --git a/tests/e2e/standard/starter-config.yml b/tests/e2e/standard/starter-config.yml index 88b2eea..73ea091 100644 --- a/tests/e2e/standard/starter-config.yml +++ b/tests/e2e/standard/starter-config.yml @@ -1,3 +1,3 @@ -project_name: Spaceflights E2E Test +project_name: Spaceflights VertexAI E2E Test repo_name: spaceflights python_package: spaceflights \ No newline at end of file diff --git a/tests/test_config_providers.py b/tests/test_config_providers.py index 0588b2c..050207c 100644 --- a/tests/test_config_providers.py +++ b/tests/test_config_providers.py @@ -1,3 +1,5 @@ +"""Test Dynamic Config Providers""" + import logging import unittest from copy import deepcopy diff --git a/tests/test_grouping.py b/tests/test_grouping.py index 502dca5..9175751 100644 --- a/tests/test_grouping.py +++ b/tests/test_grouping.py @@ -1,4 +1,4 @@ -"""Test generator""" +"""Test grouping""" import unittest From 223fc37946f8ad363cbeb44fc365147b3c6f40d1 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Tue, 21 Nov 2023 17:22:32 +0100 Subject: [PATCH 33/37] cicd: reverted python version 3.10-3.8, as it failed. debugging can be done in separate pr --- .github/workflows/test_and_publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_and_publish.yml b/.github/workflows/test_and_publish.yml index 32bd07e..3f1efc3 100644 --- a/.github/workflows/test_and_publish.yml +++ b/.github/workflows/test_and_publish.yml @@ -160,7 +160,7 @@ jobs: run: | cd ./spaceflights docker pull gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:${{ matrix.e2e_case }} || true - docker build --build-arg BASE_IMAGE=python:3.10-buster --tag kedro-vertexai-e2e:${{ matrix.e2e_case }} --load --cache-from=gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:${{ matrix.e2e_case }} . + docker build --build-arg BASE_IMAGE=python:3.8-buster --tag kedro-vertexai-e2e:${{ matrix.e2e_case }} --load --cache-from=gcr.io/gid-ml-ops-sandbox/kedro-vertexai-e2e:${{ matrix.e2e_case }} . - name: Publish docker image to GCR uses: mattes/gce-docker-push-action@v1 From 9973cd89492af4855afdd602790b90022b1e62f9 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Tue, 21 Nov 2023 18:15:02 +0100 Subject: [PATCH 34/37] tests: cicd: extended timeout for standard pipeline e2e test --- .github/workflows/test_and_publish.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test_and_publish.yml b/.github/workflows/test_and_publish.yml index 3f1efc3..aae0da3 100644 --- a/.github/workflows/test_and_publish.yml +++ b/.github/workflows/test_and_publish.yml @@ -98,6 +98,7 @@ jobs: e2e_tests: runs-on: ubuntu-latest + timeout-minutes: 60 needs: [unit_tests, sonarcloud] strategy: matrix: From 71ff26d9a48a5204b8db0021114f6273c923be60 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Wed, 22 Nov 2023 10:52:09 +0100 Subject: [PATCH 35/37] docs: added pictures to grouping docs and changed note to warning --- .../source/02_installation/02_configuration.md | 15 +++++++++++++-- .../02_installation/grouped_kedro_viz.png | Bin 0 -> 124466 bytes .../02_installation/grouping_visualisation.png | Bin 0 -> 166335 bytes 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 docs/source/02_installation/grouped_kedro_viz.png create mode 100644 docs/source/02_installation/grouping_visualisation.png diff --git a/docs/source/02_installation/02_configuration.md b/docs/source/02_installation/02_configuration.md index 02ed058..6d802fc 100644 --- a/docs/source/02_installation/02_configuration.md +++ b/docs/source/02_installation/02_configuration.md @@ -209,10 +209,21 @@ This grouping class is used during pipeline translation at plugin pipeline gener - `dependencies` - which defines child-parent relation of all groups in `node_mapping`. `Grouping` class also validates dependencies upon creation to check whether the grouping is valid. That means it does not introduce a cycle in dependencies graph. -````{note} -Make sure that all nodes in pipeline have names and their names are unique within the pipeline when using this feature. +````{warning} +Make sure that all nodes in pipeline have names and their names are unique within the pipeline when using this feature, as grouping class and VertexAI nodes naming depend on it. ```` +### Example + +Here you can see how standard spaceflights changes after enabling the grouping feature configured with `TagNodeGrouper`, when using the following tagging (view from kedro viz): + +![Vertex AI Pipeline](grouped_kedro_viz.png) + +We get the following result: + +![Vertex AI Pipeline](grouping_visualisation.png) + + ## Resources configuration Optional `resources` and `node_selectors` sections enable adjustment of the resources reservations and limits for the diff --git a/docs/source/02_installation/grouped_kedro_viz.png b/docs/source/02_installation/grouped_kedro_viz.png new file mode 100644 index 0000000000000000000000000000000000000000..52dc09866f3027cdacd6d7cdaaa1573d2672765a GIT binary patch literal 124466 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 z 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≫&8w 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 J(OW(L{{y0^*X95K literal 0 HcmV?d00001 diff --git a/docs/source/02_installation/grouping_visualisation.png b/docs/source/02_installation/grouping_visualisation.png new file mode 100644 index 0000000000000000000000000000000000000000..05b82583601a99f17d23eadc28b81c5e8e8e533f GIT binary patch literal 166335 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 F{uh=1uxkJS literal 0 HcmV?d00001 From 8f570d288648697b50d51c7ab50fd838d6ce5473 Mon Sep 17 00:00:00 2001 From: Artur Dobrogowski Date: Wed, 22 Nov 2023 11:46:46 +0100 Subject: [PATCH 36/37] docs: added warning about context dependency of vertexai command group --- docs/source/02_installation/01_installation.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/source/02_installation/01_installation.md b/docs/source/02_installation/01_installation.md index 9533998..ca4b065 100644 --- a/docs/source/02_installation/01_installation.md +++ b/docs/source/02_installation/01_installation.md @@ -49,6 +49,13 @@ Commands: ui Open VertexAI Pipelines UI in new browser tab ``` +````{warning} +`vertexai` sub-command group only becomes visible when used inside kedro project context. Make sure that you're inside one, in case you see the message: +``` +Error: No such command 'vertexai'. +``` +```` + ### `init` `init` command takes two arguments: `PROJECT_ID` and `REGION`. This command generates a sample From d803e4abe194282f85afe07e7ef1d207af7298c0 Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 22 Nov 2023 11:32:00 +0000 Subject: [PATCH 37/37] FIX #135 - Bump version and CHANGELOG for release 0.10.0 --- .bumpversion.cfg | 2 +- .copier-answers.yml | 2 +- CHANGELOG.md | 6 +++++- kedro_vertexai/__init__.py | 2 +- pyproject.toml | 2 +- sonar-project.properties | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 843fab7..1b30f8f 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.9.1 +current_version = 0.10.0 [bumpversion:file:pyproject.toml] diff --git a/.copier-answers.yml b/.copier-answers.yml index df764d2..e4a5091 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -9,7 +9,7 @@ description: Kedro plugin with GCP Vertex AI support docs_url: https://kedro-vertexai.readthedocs.io/ full_name: Kedro Vertex AI Plugin github_url: https://github.com/getindata/kedro-vertexai -initial_version: 0.9.1 +initial_version: 0.10.0 keywords: - kedro-plugin - kedro diff --git a/CHANGELOG.md b/CHANGELOG.md index f32b7ef..c1ed847 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## [Unreleased] +## [0.10.0] - 2023-11-22 + - Added explicite pyarrow dependency to avoid critical vulnerability - Updated dependencies and tested for kedro `0.18.14` - [Feature 🚀] Node grouping: added option to group multiple Kedro nodes together at execution in single Vertex AI process to allow better optimization - less steps, shorter delays while running Vertex AI nodes and less wasted time of data serialization thanks to possibility to use the MemoryDataset @@ -72,7 +74,9 @@ - Initial version of **kedro-vertexai** plugin extracted from [kedro-kubeflow v0.6.0](https://github.com/getindata/kedro-kubeflow/tree/0.6.0) -[Unreleased]: https://github.com/getindata/kedro-vertexai/compare/0.9.1...HEAD +[Unreleased]: https://github.com/getindata/kedro-vertexai/compare/0.10.0...HEAD + +[0.10.0]: https://github.com/getindata/kedro-vertexai/compare/0.9.1...0.10.0 [0.9.1]: https://github.com/getindata/kedro-vertexai/compare/0.9.0...0.9.1 diff --git a/kedro_vertexai/__init__.py b/kedro_vertexai/__init__.py index d69d16e..61fb31c 100644 --- a/kedro_vertexai/__init__.py +++ b/kedro_vertexai/__init__.py @@ -1 +1 @@ -__version__ = "0.9.1" +__version__ = "0.10.0" diff --git a/pyproject.toml b/pyproject.toml index 40e2589..308944b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "kedro-vertexai" -version = "0.9.1" +version = "0.10.0" description = "Kedro plugin with GCP Vertex AI support" readme = "README.md" authors = ['Marcin ZabÅ‚ocki ', 'Mateusz Pytel ', 'Mariusz Strzelecki '] diff --git a/sonar-project.properties b/sonar-project.properties index 1942354..f2514a3 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -6,7 +6,7 @@ sonar.tests=tests/ sonar.python.coverage.reportPaths=coverage.xml sonar.python.version=3.9 -sonar.projectVersion=0.9.1 +sonar.projectVersion=0.10.0 sonar.projectDescription=Kedro plugin with GCP Vertex AI support sonar.links.homepage=https://kedro-vertexai.readthedocs.io/ sonar.links.ci=https://github.com/getindata/kedro-vertexai/actions