From 660a0a8848b8ab47019b7cff95ed38ff583ae7ef Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 15:14:53 +0100 Subject: [PATCH 01/44] dependency updates --- poetry.lock | 138 ++++++++++++------------------------------------- pyproject.toml | 31 ++++++----- 2 files changed, 48 insertions(+), 121 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5989f631..6e096616 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.1 and should not be changed by hand. [[package]] name = "appnope" @@ -569,13 +569,13 @@ test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre [[package]] name = "griffe" -version = "0.40.1" +version = "0.41.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.40.1-py3-none-any.whl", hash = "sha256:5b8c023f366fe273e762131fe4bfd141ea56c09b3cb825aa92d06a82681cfd93"}, - {file = "griffe-0.40.1.tar.gz", hash = "sha256:66c48a62e2ce5784b6940e603300fcfb807b6f099b94e7f753f1841661fd5c7c"}, + {file = "griffe-0.41.0-py3-none-any.whl", hash = "sha256:8aa7fc6eb00cb80af9c0198178c6b7110cb59fa2c5187bb13ea25eebbe4dd928"}, + {file = "griffe-0.41.0.tar.gz", hash = "sha256:850128c3198c18713eaf0a6cc8572e590a16b1965f72a4e871e66cf84740903f"}, ] [package.dependencies] @@ -583,13 +583,13 @@ colorama = ">=0.4" [[package]] name = "hypothesis" -version = "6.98.12" +version = "6.98.13" description = "A library for property-based testing" optional = false python-versions = ">=3.8" files = [ - {file = "hypothesis-6.98.12-py3-none-any.whl", hash = "sha256:ecb7326fe0101f42f42eb0b6d4886fec600b2b38c33c22ba99a58e0f6c93c651"}, - {file = "hypothesis-6.98.12.tar.gz", hash = "sha256:584ef03a847464b0d14a63e53fcc3335a75b1f1eb3bcc770a03ff950ee4e279e"}, + {file = "hypothesis-6.98.13-py3-none-any.whl", hash = "sha256:42ba2cc2d1fe04a65124fadfc6a305dbf62607aa9f8f94a10efadee9cfa1c4dd"}, + {file = "hypothesis-6.98.13.tar.gz", hash = "sha256:746b5316da2c7af4c3816c34af675909fcb1a6a0e5c7af5cfc36c450be2dca34"}, ] [package.dependencies] @@ -638,13 +638,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.2" +version = "6.29.3" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.2-py3-none-any.whl", hash = "sha256:50384f5c577a260a1d53f1f59a828c7266d321c9b7d00d345693783f66616055"}, - {file = "ipykernel-6.29.2.tar.gz", hash = "sha256:3bade28004e3ff624ed57974948116670604ac5f676d12339693f3142176d3f0"}, + {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"}, + {file = "ipykernel-6.29.3.tar.gz", hash = "sha256:e14c250d1f9ea3989490225cc1a542781b095a18a19447fcf2b5eaf7d0ac5bd2"}, ] [package.dependencies] @@ -667,7 +667,7 @@ cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (==0.23.4)", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" @@ -896,78 +896,6 @@ files = [ {file = "kiwisolver-1.4.5.tar.gz", hash = "sha256:e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec"}, ] -[[package]] -name = "line-profiler" -version = "4.1.2" -description = "Line-by-line profiler" -optional = false -python-versions = ">=3.6" -files = [ - {file = "line_profiler-4.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4344c1504ad1a57029a8ab30812d967a0917cad7b654077e8787e4a7d7ea3469"}, - {file = "line_profiler-4.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0720b356db3e9ca297c3260f280c5be3bb4b230eda61ce73b4df5e553418d37a"}, - {file = "line_profiler-4.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:09f742af37166768f92495bd3d3a71da1ba41d3004307a66c108f29ed947d6e1"}, - {file = "line_profiler-4.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:443a5df10eb7910df694340c8a81c1668a88bb59ca44149a3291f7b2ae960891"}, - {file = "line_profiler-4.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a906f9d1687eea7e5b22e3bd367d4b63706fcea1906baaad76b1cc4c1142553d"}, - {file = "line_profiler-4.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e3b2c8cc34a776c5cfaa4a4a09a51541efcc9082dce15b19e494000e82576ced"}, - {file = "line_profiler-4.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:55ca0a78eb8d52515486c374ec53fa9e65e3c4128e8bbc909d8bfce267a91fdd"}, - {file = "line_profiler-4.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:f4a11389f06831d7984b63be0743fbbbae1ffb56fad04b4e538d3e6933b5c265"}, - {file = "line_profiler-4.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:32fa07f6fecfd209329559e4ae945dc7bdc0703355c8924bbf19101495b2373f"}, - {file = "line_profiler-4.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6f8e9e8af6660629f214e424613c56a6622cf36d9c638c569c926b21374d7029"}, - {file = "line_profiler-4.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4753113c4e2c30a547937dbc456900d7f3a1b99bc8bc81a640a89306cd729c0f"}, - {file = "line_profiler-4.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f0989302404850a2a041ba60afe6c7240aea10fdd9432d5c1d464aca39a0369"}, - {file = "line_profiler-4.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f4b25ee412b0cd624614edd16c4c0af02dbeb73db2a08a49a14b120005a5630"}, - {file = "line_profiler-4.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93c6a49009ee75dcd8ff644c5fd39eeb8bb672d5a41bacdd239db14ae1ba3098"}, - {file = "line_profiler-4.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b96964cdb306741a01b95d210d634cc79ed70d2904336cbd8f69a9b5f284426d"}, - {file = "line_profiler-4.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:46a8cad2cb4b6a1229ddccf06694b1d01fd5acd1cf8c502caf937765a7c877de"}, - {file = "line_profiler-4.1.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a102fd8e13abd367379e39fd9426fd60e1e3a39fcd80fa25641618969464c022"}, - {file = "line_profiler-4.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44ee51bce974d6b2269492299d4abae6db1b06ae7617760c7436c597dbdbd032"}, - {file = "line_profiler-4.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0e4cafd9a1effe1b9646f6a86716dbd291684fde1f8a297930d845d8a9340299"}, - {file = "line_profiler-4.1.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b433a2918e522d6dd0e6bdcf1216cede15c4f201f7eeb0d816114fbac5031cd7"}, - {file = "line_profiler-4.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad96accb1f5cdedfe2e6607f9be86d28196d3f743229e2b67bd28a40f76f133"}, - {file = "line_profiler-4.1.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4eb9df035861f7c2e9852773dff72a3324e2e5aebc0b8c7c2ba22437387ef5e7"}, - {file = "line_profiler-4.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e733c0e6626d0e9f1b434da40b93ed1c00ea503f3ced04f5a58c22d1163fe1c1"}, - {file = "line_profiler-4.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:8cc0c24384e29e99da5627669dbf312a23d11138de0169aa58d4ea5187522ba0"}, - {file = "line_profiler-4.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:900ad7be6d609fb1442200c7757de3534b381d6eeac22fa0135c5d0a900b5787"}, - {file = "line_profiler-4.1.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49c6c6e19c3c0d7cc8f1641ece9e52fec5e99c56472e26156c16473b7568d374"}, - {file = "line_profiler-4.1.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7ed1edd85f9a005a3e1316b3962a5fc42a159257cf2dfd13d10fcbefaece8ce"}, - {file = "line_profiler-4.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:2ed7027f7d1b3ae9a379a2f407f512b84ccf82d6a3a7b53a90bb17ada61928a9"}, - {file = "line_profiler-4.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e8537be16b46133ab86d6e805ca83b012b17ef36a7445dd5c89c45ba70b97aad"}, - {file = "line_profiler-4.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:934870b5e451c938f149c5475cc0286133d8718ba99ff4ec04fb1a87f7bfb985"}, - {file = "line_profiler-4.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dbda8e0bb98b1790ba8819d0a72ee3e11e669c79fc703eaf0e5ed747cac2d441"}, - {file = "line_profiler-4.1.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78cfd263c79927f74f174e32b83e4692e26ada2fefcdfef0c1dae5cfabb37a37"}, - {file = "line_profiler-4.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:390f5e5dc047a62ffb7dbd236b4d44c6175d4f66aabe654f4b35df9b9aa79d02"}, - {file = "line_profiler-4.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dce014572ee599b2d571cf45fbd0c7d5f1a1e822dabe82581e18dd0229b16799"}, - {file = "line_profiler-4.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4fe92a239d8097a3a0cacb280e0a2455be6633da3c844b784ba011043d090b36"}, - {file = "line_profiler-4.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3df9b30cdd8b3652e658acb38a9533bac47f2b8f5c320c5a03dbdd378ac11b35"}, - {file = "line_profiler-4.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5643cb19c89f6749039452913803a8cfb554c07676f6c00bc96e0632a054abb6"}, - {file = "line_profiler-4.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:163d26586511b68551735052a1bcca173c9d8366573ab4a91c470c7f7bd89967"}, - {file = "line_profiler-4.1.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8fa3128e93e49ad8b5216e40dc9d2bc2e354e896c1512feead3d6db1668ce649"}, - {file = "line_profiler-4.1.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a1eb88cec273300377b364eee9ceffce2e639906bf210e7d7233c88dc87e62f"}, - {file = "line_profiler-4.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7f213eeb846c9bc950fd210dfcd0fa93b1d2991f218b8788c0759f06bd00557"}, - {file = "line_profiler-4.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ec6f137dbbdc0af6b88a1053c1430681c07a3b2d1719dc1f59be70d464851a23"}, - {file = "line_profiler-4.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3af457b2dfad6e2019f7e5bbe9eabac9b2c34824fb2ea574aee7b17998c48c98"}, - {file = "line_profiler-4.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:9dd72adc753019788ff0498dd686068c4d8e65d38c0eca1b4b58b5719c14fa7d"}, - {file = "line_profiler-4.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:62776d67dfc6c358de5c19d606eccbd95e6feb75928064850be0232e9276f751"}, - {file = "line_profiler-4.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:060d71ba11ff5476d7c10774a34955566bab545ab5ff39231306b4d84081725d"}, - {file = "line_profiler-4.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ad13e1d5a174336508bbf275202822c8898cd1f014881059103b748310d5bc84"}, - {file = "line_profiler-4.1.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77824dfc1f58dc7fe62fb053aa54586979ef60fea221dcdbba2022608c1314f"}, - {file = "line_profiler-4.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c8ffc44a030789f7bc6594de581b39e8da0591fc6c598dd4243cf140b200528"}, - {file = "line_profiler-4.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4729820d8da3ed92f14e30dbd28a851eeefe2ba70b8b897f2d9c886ade8007c1"}, - {file = "line_profiler-4.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0bce5c04d0daf6dd19348540012b0a6d69206ae40db096de222e6d5f824922e8"}, - {file = "line_profiler-4.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:a65b70d6ecef4f2e61cf504a5c77085718f1dae9508b21c9058ad483ae7e16ee"}, - {file = "line_profiler-4.1.2.tar.gz", hash = "sha256:aa56578b0ff5a756fe180b3fda7bd67c27bbd478b3d0124612d8cf00e4a21df2"}, -] - -[package.extras] -all = ["Cython (>=3.0.3)", "IPython (>=7.14.0)", "IPython (>=7.18.0)", "IPython (>=8.12.2)", "IPython (>=8.14.0)", "cibuildwheel (>=2.11.2)", "cibuildwheel (>=2.11.2)", "cibuildwheel (>=2.11.2)", "cibuildwheel (>=2.11.2)", "cibuildwheel (>=2.11.2)", "cibuildwheel (>=2.8.1)", "cmake (>=3.21.2)", "coverage[toml] (>=5.3)", "ninja (>=1.10.2)", "pytest (>=4.6.0)", "pytest (>=4.6.0)", "pytest (>=4.6.0,<=4.6.11)", "pytest (>=4.6.0,<=4.6.11)", "pytest (>=4.6.0,<=6.1.2)", "pytest (>=6.2.5)", "pytest-cov (>=2.8.1)", "pytest-cov (>=2.8.1)", "pytest-cov (>=2.9.0)", "pytest-cov (>=3.0.0)", "rich (>=12.3.0)", "scikit-build (>=0.11.1)", "setuptools (>=41.0.1)", "setuptools (>=68.2.2)", "ubelt (>=1.3.4)", "xdoctest (>=1.1.2)"] -all-strict = ["Cython (==3.0.3)", "IPython (==7.14.0)", "IPython (==7.18.0)", "IPython (==8.12.2)", "IPython (==8.14.0)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.8.1)", "cmake (==3.21.2)", "coverage[toml] (==5.3)", "ninja (==1.10.2)", "pytest (==4.6.0)", "pytest (==4.6.0)", "pytest (==4.6.0)", "pytest (==4.6.0)", "pytest (==4.6.0)", "pytest (==6.2.5)", "pytest-cov (==2.8.1)", "pytest-cov (==2.8.1)", "pytest-cov (==2.9.0)", "pytest-cov (==3.0.0)", "rich (==12.3.0)", "scikit-build (==0.11.1)", "setuptools (==41.0.1)", "setuptools (==68.2.2)", "ubelt (==1.3.4)", "xdoctest (==1.1.2)"] -ipython = ["IPython (>=7.14.0)", "IPython (>=7.18.0)", "IPython (>=8.12.2)", "IPython (>=8.14.0)"] -ipython-strict = ["IPython (==7.14.0)", "IPython (==7.18.0)", "IPython (==8.12.2)", "IPython (==8.14.0)"] -optional = ["IPython (>=7.14.0)", "IPython (>=7.18.0)", "IPython (>=8.12.2)", "IPython (>=8.14.0)", "rich (>=12.3.0)"] -optional-strict = ["IPython (==7.14.0)", "IPython (==7.18.0)", "IPython (==8.12.2)", "IPython (==8.14.0)", "rich (==12.3.0)"] -tests = ["coverage[toml] (>=5.3)", "pytest (>=4.6.0)", "pytest (>=4.6.0)", "pytest (>=4.6.0,<=4.6.11)", "pytest (>=4.6.0,<=4.6.11)", "pytest (>=4.6.0,<=6.1.2)", "pytest (>=6.2.5)", "pytest-cov (>=2.8.1)", "pytest-cov (>=2.8.1)", "pytest-cov (>=2.9.0)", "pytest-cov (>=3.0.0)", "ubelt (>=1.3.4)", "xdoctest (>=1.1.2)"] -tests-strict = ["coverage[toml] (==5.3)", "pytest (==4.6.0)", "pytest (==4.6.0)", "pytest (==4.6.0)", "pytest (==4.6.0)", "pytest (==4.6.0)", "pytest (==6.2.5)", "pytest-cov (==2.8.1)", "pytest-cov (==2.8.1)", "pytest-cov (==2.9.0)", "pytest-cov (==3.0.0)", "ubelt (==1.3.4)", "xdoctest (==1.1.2)"] - [[package]] name = "markdown" version = "3.5.2" @@ -1157,17 +1085,18 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-autorefs" -version = "0.5.0" +version = "1.0.0" description = "Automatically link across pages in MkDocs." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_autorefs-0.5.0-py3-none-any.whl", hash = "sha256:7930fcb8ac1249f10e683967aeaddc0af49d90702af111a5e390e8b20b3d97ff"}, - {file = "mkdocs_autorefs-0.5.0.tar.gz", hash = "sha256:9a5054a94c08d28855cfab967ada10ed5be76e2bfad642302a610b252c3274c0"}, + {file = "mkdocs_autorefs-1.0.0-py3-none-any.whl", hash = "sha256:2b6d288f0582589d1be7c99ce4470c8e7c5077892014051ff0d4ff574a73dbe8"}, + {file = "mkdocs_autorefs-1.0.0.tar.gz", hash = "sha256:1b20db41cade632b07b7a73dee818977b52e869c9deb438f6f20e2896ff01859"}, ] [package.dependencies] Markdown = ">=3.3" +markupsafe = ">=2.0.1" mkdocs = ">=1.1" [[package]] @@ -1207,13 +1136,13 @@ cache = ["platformdirs"] [[package]] name = "mkdocs-material" -version = "9.5.10" +version = "9.5.11" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.10-py3-none-any.whl", hash = "sha256:3c6c46b57d2ee3c8890e6e0406e68b6863cf65768f0f436990a742702d198442"}, - {file = "mkdocs_material-9.5.10.tar.gz", hash = "sha256:6ad626dbb31070ebbaedff813323a16a406629620e04b96458f16e6e9c7008fe"}, + {file = "mkdocs_material-9.5.11-py3-none-any.whl", hash = "sha256:788ee0f3e036dca2dc20298d65e480297d348a44c9d7b2ee05c5262983e66072"}, + {file = "mkdocs_material-9.5.11.tar.gz", hash = "sha256:7af7f8af0dea16175558f3fb9245d26c83a17199baa5f157755e63d7437bf971"}, ] [package.dependencies] @@ -1247,13 +1176,13 @@ files = [ [[package]] name = "mkdocstrings" -version = "0.24.0" +version = "0.24.1" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocstrings-0.24.0-py3-none-any.whl", hash = "sha256:f4908560c10f587326d8f5165d1908817b2e280bbf707607f601c996366a2264"}, - {file = "mkdocstrings-0.24.0.tar.gz", hash = "sha256:222b1165be41257b494a9d29b14135d2b7ca43f38161d5b10caae03b87bd4f7e"}, + {file = "mkdocstrings-0.24.1-py3-none-any.whl", hash = "sha256:b4206f9a2ca8a648e222d5a0ca1d36ba7dee53c88732818de183b536f9042b5d"}, + {file = "mkdocstrings-0.24.1.tar.gz", hash = "sha256:cc83f9a1c8724fc1be3c2fa071dd73d91ce902ef6a79710249ec8d0ee1064401"}, ] [package.dependencies] @@ -1748,13 +1677,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyright" -version = "1.1.350" +version = "1.1.351" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.350-py3-none-any.whl", hash = "sha256:f1dde6bcefd3c90aedbe9dd1c573e4c1ddbca8c74bf4fa664dd3b1a599ac9a66"}, - {file = "pyright-1.1.350.tar.gz", hash = "sha256:a8ba676de3a3737ea4d8590604da548d4498cc5ee9ee00b1a403c6db987916c6"}, + {file = "pyright-1.1.351-py3-none-any.whl", hash = "sha256:83b44b25396ae20661fc5f133c3fce30928ff1296d4f2e5ff0bca5fcf03eb89d"}, + {file = "pyright-1.1.351.tar.gz", hash = "sha256:01124099714eebd7f6525d8cbfa350626b56dfaf771cfcd55c03e69f0f1efbbd"}, ] [package.dependencies] @@ -1873,7 +1802,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -2220,19 +2148,19 @@ test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", [[package]] name = "setuptools" -version = "69.1.0" +version = "69.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.0-py3-none-any.whl", hash = "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6"}, - {file = "setuptools-69.1.0.tar.gz", hash = "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401"}, + {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, + {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "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-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "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"] +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)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "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.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -2425,13 +2353,13 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcmatch" -version = "8.5" +version = "8.5.1" description = "Wildcard/glob file name matcher." optional = false python-versions = ">=3.8" files = [ - {file = "wcmatch-8.5-py3-none-any.whl", hash = "sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5"}, - {file = "wcmatch-8.5.tar.gz", hash = "sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3"}, + {file = "wcmatch-8.5.1-py3-none-any.whl", hash = "sha256:24c19cedc92bc9c9e27f39db4e1824d72f95bd2cea32b254a47a45b1a1b227ed"}, + {file = "wcmatch-8.5.1.tar.gz", hash = "sha256:c0088c7f6426cf6bf27e530e2b7b734031905f7e490475fd83c7c5008ab581b3"}, ] [package.dependencies] @@ -2454,4 +2382,4 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "1c18f16d155e9871fa823af652c74475851b79710c20335b984ac6bcc2b90eca" +content-hash = "50a74071b8d7d7e60de1dd59c0228db8aee77f4f7705a474b55293ca33b724f7" diff --git a/pyproject.toml b/pyproject.toml index 11cf8764..d860ae09 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,32 +33,31 @@ Documentation = "https://jorenham.github.io/Lmo/" [tool.poetry.dependencies] python = ">=3.10,<3.13" -typing_extensions = { version = "^4.1", python = "<3.11"} +typing_extensions = {version = "^4.1", python = "<3.11"} # https://numpy.org/neps/nep-0029-deprecation_policy.html numpy = "^1.23.4" scipy = "^1.9.3" -pandas = { version = ">=1.4,<3.0", optional = true } +pandas = {version = ">=1.4,<3.0", optional = true} [tool.poetry.group.dev.dependencies] -pytest = "^8.0" -hypothesis = { version = "^6.97", extras = ["numpy"] } -pyright = "^1.1.349" -ruff = ">=0.1.14,<1.0" -codespell = "^2.2" +pytest = "^8.0.2" +hypothesis = {version = "^6.98.13", extras = ["numpy"]} +pyright = "^1.1.351" +ruff = "^0.2.2" +codespell = "^2.2.6" [tool.poetry.group.docs.dependencies] -mkdocs = "^1.5" -mkdocs-material = "^9.5" -mkdocs-include-markdown-plugin = "^6.0" -mkdocstrings = {extras = ["python"], version = ">=0.24,<1.0"} -mkdocs-git-revision-date-localized-plugin = "^1.2.2" +mkdocs = "^1.5.3" +mkdocs-material = "^9.5.11" +mkdocs-include-markdown-plugin = "^6.0.4" +mkdocstrings = {extras = ["python"], version = "^0.24.1"} +mkdocs-git-revision-date-localized-plugin = "^1.2.4" [tool.poetry.group.debug.dependencies] -ipython = ">=8.20" -ipykernel = ">=6.29" -matplotlib = ">=3.8" -line-profiler = ">=4.1" +ipython = "^8.22.1" +ipykernel = "^6.29.3" +matplotlib = "^3.8.3" [tool.poetry.group.pandas.dependencies] pandas = ">=1.4" From 9cc8acbf3a028394fd79cff4a7d20ecf3f4660dc Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 15:41:54 +0100 Subject: [PATCH 02/44] add more ruff rules --- pyproject.toml | 114 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 98 insertions(+), 16 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index d860ae09..134f2f15 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -128,18 +128,26 @@ reportMissingTypeStubs = true [tool.ruff] +src = ["lmo", "tests"] +target-version = "py310" +line-length = 79 +indent-width = 4 +show-fixes = true +force-exclude = true extend-exclude = [ ".github", - ".run", + ".hyptohesis", + ".pytest_cache", + ".ruff_cache", + ".venv", + ".vscode", + "dist", "docs", - "tests", - "py.typed", + "site", ] -line-length = 79 -src = ["lmo"] -target-version = "py310" [tool.ruff.lint] +ignore-init-module-imports = true preview = true select = [ "F", # pyflakes @@ -151,13 +159,14 @@ select = [ "D", # pydocstyle "UP", # pyupgrade "YTT", # flake8-2020 + "ANN", # flake8-annotations "BLE", # flake8-blind-except "B", # flake8-bugbear "A", # flake8-builtins "COM", # flake8-commas "C4", # flake8-comprehensions "T10", # flake8-debugger - "EM", # flake8-errmsg + "EXE", # flake8-executable "FA", # flake8-future-annotations "ISC", # flake8-implicit-str-concat "ICN", # flake8-import-conventions @@ -165,6 +174,7 @@ select = [ "PIE", # flake8-pie "T20", # flake8-print "PYI", # flake8-pyi + "PT", # flake8-pytest-style "Q", # flake8-quotes "RSE", # flake8-raise "RET", # flake8-return @@ -178,33 +188,63 @@ select = [ "TD", # flake8-todos "PD", # pandas-vet "PGH", # pygrep-hooks + "PL", # pylint "TRY", # tryceratops "FLY", # flynt "NPY", # NumPy-specific rules "PERF", # perflint, "FURB", # refurb - "RUF", # Ruff-specific rules + "RUF", # ruff ] ignore = [ + # pydocstyle + "D200", # fits-on-one-line "D205", # blank-line-after-summary "D212", # multi-line-summary-first-line + + # flake8-annotations + "ANN101", # missing-type-self (deprecated) + "ANN102", # missing-type-cls (deprecated) + + # flake8-bugbear "B023", # function-uses-loop-variable + + # pygrep-hooks "PGH003", # blanket-type-ignore + + # pylint + "PLC0415", # import-outside-top-level + "PLR0904", # too-many-arguments + "PLR0913", # too-many-public-methods + "PLR0917", # too-many-positional + "PLR6301", # no-self-use + + # ruff "RUF021", # parenthesize-chained-operators "RUF022", # unsorted-dunder-all ] -typing-modules = ["lmo.typing", "numpy.typing"] -task-tags = ["TODO", "Todo"] +typing-modules = [ + "lmo.typing", + "numpy.typing", + "typing_extensions", +] + +[tool.ruff.lint.per-file-ignores] +"tests/*" = ["D", "N806", "ANN"] + +[tool.ruff.lint.pep8-naming] +extend-ignore-names = ["*_gen", "l_rv_*"] [tool.ruff.lint.pycodestyle] max-line-length = 79 [tool.ruff.lint.pydocstyle] convention = "google" -ignore-decorators = ["typing.overload"] - -[tool.ruff.lint.flake8-quotes] -inline-quotes = "single" +ignore-decorators = [ + "typing.overload", + "typing.override", + "typing_extensions.override", +] [tool.ruff.lint.isort] case-sensitive = true @@ -212,12 +252,54 @@ combine-as-imports = true force-wrap-aliases = true known-first-party = ["lmo"] known-third-party = ["numpy", "pandas", "scipy"] +lines-after-imports = 2 +lines-between-types = 0 +no-lines-before = ["future", "local-folder"] +split-on-trailing-comma = false + +[tool.ruff.lint.flake8-annotations] +allow-star-arg-any = true +suppress-dummy-args = true +suppress-none-returning = true + +[tool.ruff.lint.flake8-quotes] +inline-quotes = "single" + +[tool.ruff.lint.pylint] +allow-dunder-method-names = [ + "__array__", + "__array_ufunc__", + "__lmo_register__", +] +allow-magic-value-types = ["int"] [tool.ruff.format] -exclude = ["__init__.py", "typing.py"] +docstring-code-format = true +indent-style = "space" +line-ending = "lf" quote-style = "single" +skip-magic-trailing-comma = true +exclude = ["typing.py"] [tool.codespell] -skip = './dist,./site,*.lock,*.pyc,*.js,*.css,*.svg,*.png,*.ico,*.ipynb' +skip = """\ + ./.git,\ + ./.github,\ + ./.hypothesis,\ + ./.pytest_cache,\ + ./.ruff_cache,\ + ./.venv,\ + ./.vscode,\ + ./dist,\ + ./site,\ + *.lock,\ + *.pyc,\ + *.js,\ + *.css,\ + *.svg,\ + *.png,\ + *.ico,\ + *.ipynb\ +""" context = 2 From a74dcca1d5d2b67a82553941929908458d7a1437 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 15:55:07 +0100 Subject: [PATCH 03/44] fix ruff errors with `--fix` --- lmo/__init__.py | 1 + lmo/_lm.py | 1 + lmo/_lm_co.py | 1 + lmo/_poly.py | 1 + lmo/_utils.py | 1 + lmo/constants.py | 1 + lmo/contrib/pandas.py | 11 ++------- lmo/contrib/scipy_stats.py | 10 ++++----- lmo/diagnostic.py | 1 + lmo/distributions.py | 9 ++++---- lmo/inference.py | 7 +----- lmo/linalg.py | 2 ++ lmo/pwm_beta.py | 1 + lmo/theoretical.py | 1 + lmo/typing.py | 1 + tests/test_diagnostic.py | 2 ++ tests/test_distributions.py | 9 ++++---- tests/test_multivariate.py | 4 +++- tests/test_special.py | 9 ++++---- tests/test_theoretical.py | 45 +++++++++++++++++++++++++------------ tests/test_univariate.py | 10 ++++----- tests/test_utils.py | 4 +++- tests/test_weights.py | 4 +++- 23 files changed, 80 insertions(+), 56 deletions(-) diff --git a/lmo/__init__.py b/lmo/__init__.py index b0837383..884d4c89 100644 --- a/lmo/__init__.py +++ b/lmo/__init__.py @@ -63,6 +63,7 @@ ) from ._meta import get_version as _get_version + if not TYPE_CHECKING: # install contrib module extensions from .contrib import install as _install diff --git a/lmo/_lm.py b/lmo/_lm.py index 48946268..a851b725 100644 --- a/lmo/_lm.py +++ b/lmo/_lm.py @@ -41,6 +41,7 @@ from .linalg import ir_pascal, sandwich, sh_legendre, trim_matrix from .typing import AnyInt, AnyTrim, IntVector, LMomentOptions, SortKind + if sys.version_info < (3, 11): from typing_extensions import Unpack else: diff --git a/lmo/_lm_co.py b/lmo/_lm_co.py index 61b17822..85cece51 100644 --- a/lmo/_lm_co.py +++ b/lmo/_lm_co.py @@ -19,6 +19,7 @@ from ._utils import broadstack, clean_order, ordered from .typing import AnyInt, AnyTrim, IntVector, LComomentOptions, SortKind + if sys.version_info < (3, 11): from typing_extensions import Unpack else: diff --git a/lmo/_poly.py b/lmo/_poly.py index 35bbd520..e1364361 100644 --- a/lmo/_poly.py +++ b/lmo/_poly.py @@ -26,6 +26,7 @@ from .typing import FloatVector, PolySeries + P = TypeVar('P', bound=PolySeries) diff --git a/lmo/_utils.py b/lmo/_utils.py index 6a3c1efa..583e023c 100644 --- a/lmo/_utils.py +++ b/lmo/_utils.py @@ -22,6 +22,7 @@ from .typing import AnyInt, AnyTrim, IndexOrder, IntVector, SortKind + T = TypeVar('T', bound=np.generic) FT = TypeVar('FT', bound=np.floating[Any]) diff --git a/lmo/constants.py b/lmo/constants.py index bb6ea89b..8e1ebf02 100644 --- a/lmo/constants.py +++ b/lmo/constants.py @@ -7,6 +7,7 @@ from typing import Final + theta_m: Final[float] = 0.955316618124509278163857102515757754 r""" Magic angle \( \theta_m = \arctan \sqrt 2 \). diff --git a/lmo/contrib/pandas.py b/lmo/contrib/pandas.py index b1a2d3a8..c6d1fac6 100644 --- a/lmo/contrib/pandas.py +++ b/lmo/contrib/pandas.py @@ -48,15 +48,7 @@ import sys from collections.abc import Callable -from typing import ( - Any, - Literal, - Protocol, - TypeAlias, - Union, - cast, - final, -) +from typing import Any, Literal, Protocol, TypeAlias, Union, cast, final import numpy as np import numpy.typing as npt @@ -80,6 +72,7 @@ LMomentOptions, ) + if sys.version_info < (3, 11): from typing_extensions import Unpack else: diff --git a/lmo/contrib/scipy_stats.py b/lmo/contrib/scipy_stats.py index 0ea2e117..4140949d 100644 --- a/lmo/contrib/scipy_stats.py +++ b/lmo/contrib/scipy_stats.py @@ -18,10 +18,7 @@ import numpy as np import numpy.typing as npt from scipy.stats import fit as scipy_fit # type: ignore -from scipy.stats.distributions import ( # type: ignore - rv_continuous, - rv_frozen, -) +from scipy.stats.distributions import rv_continuous, rv_frozen # type: ignore from lmo import ( inference, @@ -50,6 +47,7 @@ QuadOptions, ) + T = TypeVar('T') V = TypeVar('V', bound=float | npt.NDArray[np.float64]) @@ -94,7 +92,7 @@ def patch(cls, base: type[object]) -> None: cls.patched.add(base) -class l_rv_generic(PatchClass): # noqa: N801 +class l_rv_generic(PatchClass): """ Additional methods that are patched into [`scipy.stats.rv_continuous`][scipy.stats.rv_continuous] and @@ -1336,7 +1334,7 @@ def l_fit_loc_scale( return loc_hat, scale_hat -class l_rv_frozen(PatchClass): # noqa: N801, D101 +class l_rv_frozen(PatchClass): # noqa: D101 dist: l_rv_generic args: tuple[Any, ...] kwds: Mapping[str, Any] diff --git a/lmo/diagnostic.py b/lmo/diagnostic.py index 6aee5d0f..ef058b5e 100644 --- a/lmo/diagnostic.py +++ b/lmo/diagnostic.py @@ -47,6 +47,7 @@ from .special import fpow from .typing import AnyInt, AnyTrim, IntVector + if TYPE_CHECKING: from .contrib.scipy_stats import l_rv_generic diff --git a/lmo/distributions.py b/lmo/distributions.py index c667c5cc..3aeeddf5 100644 --- a/lmo/distributions.py +++ b/lmo/distributions.py @@ -65,6 +65,7 @@ RVContinuous, ) + if sys.version_info < (3, 11): from typing_extensions import Self else: @@ -897,7 +898,7 @@ def _ppf_poly_series( ) -class l_rv_nonparametric(_rv_continuous): # noqa: N801 +class l_rv_nonparametric(_rv_continuous): r""" Warning: `l_rv_nonparametric` is deprecated, and will be removed in version @@ -1236,7 +1237,7 @@ def _kumaraswamy_lmo0( _kumaraswamy_lmo = np.vectorize(_kumaraswamy_lmo0, [float], excluded={1, 2}) -class kumaraswamy_gen(_rv_continuous): # noqa: N801 +class kumaraswamy_gen(_rv_continuous): def _argcheck(self, a: float, b: float) -> bool: return (a > 0) & (b > 0) @@ -1556,7 +1557,7 @@ def _lmo0_partial(theta: float, scale: float) -> float: _wakeby_lmo = np.vectorize(_wakeby_lmo0, [float], excluded={1, 2}) -class wakeby_gen(_rv_continuous): # noqa: N801 +class wakeby_gen(_rv_continuous): a: float def _argcheck(self, b: float, d: float, f: float) -> int: @@ -1876,7 +1877,7 @@ def _lmo0_partial(trim: float, theta: float) -> float: _genlambda_lmo = np.vectorize(_genlambda_lmo0, [float], excluded={1, 2}) -class genlambda_gen(_rv_continuous): # noqa: N801 +class genlambda_gen(_rv_continuous): def _argcheck(self, b: float, d: float, f: float) -> int: return np.isfinite(b) & np.isfinite(d) & (f >= -1) & (f <= 1) diff --git a/lmo/inference.py b/lmo/inference.py index eab7ebe8..6a644058 100644 --- a/lmo/inference.py +++ b/lmo/inference.py @@ -14,12 +14,7 @@ from ._utils import clean_orders, clean_trim from .diagnostic import HypothesisTestResult, l_moment_bounds from .theoretical import l_moment_from_ppf -from .typing import ( - AnyTrim, - DistributionFunction, - IntVector, - OptimizeResult, -) +from .typing import AnyTrim, DistributionFunction, IntVector, OptimizeResult class GMMResult(NamedTuple): diff --git a/lmo/linalg.py b/lmo/linalg.py index cdfe5092..ab5c0f2d 100644 --- a/lmo/linalg.py +++ b/lmo/linalg.py @@ -15,6 +15,7 @@ from math import comb, lgamma from typing import Any, TypeVar, cast + if sys.version_info < (3, 11): from typing_extensions import assert_never else: @@ -25,6 +26,7 @@ from .typing import AnyFloat, AnyInt + T = TypeVar('T', bound=np.object_ | np.integer[Any] | np.floating[Any]) diff --git a/lmo/pwm_beta.py b/lmo/pwm_beta.py index 334fa0be..3a78b767 100644 --- a/lmo/pwm_beta.py +++ b/lmo/pwm_beta.py @@ -13,6 +13,7 @@ from ._utils import ordered + T = TypeVar('T', bound=np.floating[Any]) diff --git a/lmo/theoretical.py b/lmo/theoretical.py index ac999ab5..51d989c6 100644 --- a/lmo/theoretical.py +++ b/lmo/theoretical.py @@ -75,6 +75,7 @@ QuadOptions, ) + T = TypeVar('T') V = TypeVar('V', bound=float | npt.NDArray[np.float64]) Theta = ParamSpec('Theta') diff --git a/lmo/typing.py b/lmo/typing.py index 31328012..b2f17431 100644 --- a/lmo/typing.py +++ b/lmo/typing.py @@ -60,6 +60,7 @@ import numpy as np import numpy.typing as npt + if sys.version_info < (3, 11): from typing_extensions import Self, TypeVarTuple, Unpack else: diff --git a/tests/test_diagnostic.py b/tests/test_diagnostic.py index be83ae3a..2328d783 100644 --- a/tests/test_diagnostic.py +++ b/tests/test_diagnostic.py @@ -11,9 +11,11 @@ def test_l_moment_bounds_00(): assert l_moment_bounds(4) == approx(1 / np.sqrt(7)) assert l_moment_bounds(42) == approx(1 / np.sqrt(83)) + def test_l_moment_bounds_scale(): assert l_moment_bounds(42, scale=69) == approx(l_moment_bounds(42) * 69) + def test_l_moment_bounds_vectorized(): bounds = l_moment_bounds([1, 2, 42]) assert np.isposinf(bounds[0]) diff --git a/tests/test_distributions.py b/tests/test_distributions.py index 8c9c855f..cd45ccfb 100644 --- a/tests/test_distributions.py +++ b/tests/test_distributions.py @@ -1,18 +1,18 @@ from typing import cast import numpy as np -from numpy.testing import assert_allclose - import pytest +from numpy.testing import assert_allclose +from scipy.stats.distributions import tukeylambda, uniform # type: ignore from lmo.distributions import genlambda, l_poly, wakeby from lmo.typing import AnyTrim, RVContinuous -from scipy.stats.distributions import tukeylambda, uniform # type: ignore ATOL = 1e-10 Q = np.linspace(1 / 100, 1, 99, endpoint=False) + @pytest.mark.parametrize( 'trim', [0, 1, (0, 1), (1, 0), (13, 17), (2 / 3, 3 / 4)], @@ -96,7 +96,7 @@ def test_wakeby(b: float, d: float, f: float, loc: float, scale: float): @pytest.mark.parametrize('lam', [0, 0.14, 1, -1]) def test_genlambda_tukeylamba(lam: float): X0 = cast(RVContinuous[float], tukeylambda(lam)) - X = genlambda(lam, lam, 0,) + X = genlambda(lam, lam, 0) x0 = X0.ppf(Q) x = X.ppf(Q) @@ -128,6 +128,7 @@ def test_genlambda_tukeylamba(lam: float): tl_tau = X.l_stats(trim=1) assert_allclose(tl_tau, tl_tau0, atol=ATOL) + # @pytest.mark.parametrize('scale', [1, .5, 2]) # @pytest.mark.parametrize('loc', [0, 1, -1]) # @pytest.mark.parametrize('f', [0, .5, 1, -.5, -1]) diff --git a/tests/test_multivariate.py b/tests/test_multivariate.py index e3b2c165..05410a1e 100644 --- a/tests/test_multivariate.py +++ b/tests/test_multivariate.py @@ -1,6 +1,5 @@ from datetime import timedelta -import lmo import numpy as np from hypothesis import ( given, @@ -9,6 +8,9 @@ ) from hypothesis.extra import numpy as hnp +import lmo + + _SEED = 12345 _R_MAX = 8 diff --git a/tests/test_special.py b/tests/test_special.py index fef92d28..2c7c8ea1 100644 --- a/tests/test_special.py +++ b/tests/test_special.py @@ -1,14 +1,14 @@ # pyright: reportUnknownVariableType=false # pyright: reportMissingTypeStubs=false # pyright: reportUnknownArgumentType=false -import pytest - import numpy as np +import pytest from numpy.polynomial.legendre import legval from numpy.testing import assert_allclose -from lmo.special import fourier_jacobi from scipy.special import eval_jacobi +from lmo.special import fourier_jacobi + X = np.linspace(-1, 1, num=21, dtype=np.float64) C_EXAMPLES = [ @@ -25,6 +25,7 @@ np.log1p(np.arange(256, 0, -1)), ] + @pytest.mark.parametrize('c', C_EXAMPLES) def test_fourier_legendre(c: list[float]): y_expect = legval(X, c) @@ -35,7 +36,7 @@ def test_fourier_legendre(c: list[float]): @pytest.mark.parametrize( 'a,b', - [(0, 1), (1, 0), (1, 1), (1/137, -1/12), (42, 69)], + [(0, 1), (1, 0), (1, 1), (1 / 137, -1 / 12), (42, 69)], ) @pytest.mark.parametrize('c', C_EXAMPLES) def test_fourier_jacobi(a: float, b: float, c: list[float]): diff --git a/tests/test_theoretical.py b/tests/test_theoretical.py index 8517c188..d445f53a 100644 --- a/tests/test_theoretical.py +++ b/tests/test_theoretical.py @@ -3,24 +3,24 @@ # pyright: reportUnknownArgumentType=false import functools -from typing import Callable, cast -from numpy.testing import assert_allclose +from collections.abc import Callable +from typing import cast +import numpy as np from hypothesis import ( given, settings, strategies as st, ) - -import numpy as np +from numpy.testing import assert_allclose from scipy.special import ndtr, ndtri, zeta from lmo import constants from lmo.theoretical import ( + l_moment_cov_from_cdf, l_moment_from_cdf, l_moment_from_ppf, l_moment_from_qdf, - l_moment_cov_from_cdf, l_stats_cov_from_cdf, ppf_from_l_moments, qdf_from_l_moments, @@ -30,60 +30,77 @@ norm_cdf = cast(Callable[[float], float], ndtr) norm_ppf = cast(Callable[[float], float], ndtri) + @np.errstate(over='ignore', under='ignore') def norm_qdf(x: float) -> float: # cool, eh? return np.sqrt(2 * np.pi) * np.exp(norm_ppf(x)**2 / 2) + def cauchy_cdf(x: float) -> float: return np.arctan(x) / np.pi + 1 / 2 + def cauchy_ppf(p: float) -> float: return np.tan(np.pi * (p - 1 / 2)) + def cauchy_qdf(p: float) -> float: return np.pi / np.sin(p * np.pi)**2 + def expon_cdf(x: float, a: float = 1) -> float: return 1 - np.exp(-x / a) if x >= 0 else 0.0 + def expon_ppf(p: float, a: float = 1) -> float: return -a * np.log1p(-p) + def expon_qdf(p: float, a: float = 1) -> float: - return a / (1 - p) + return a / (1 - p) + @np.errstate(over='ignore', under='ignore') def gumbel_cdf(x: float, loc: float = 0, scale: float = 1) -> float: return np.exp(-np.exp(-(x - loc) / scale)) + @np.errstate(over='ignore', under='ignore') def gumbel_ppf(p: float, loc: float = 0, scale: float = 1) -> float: return loc - scale * np.log(-np.log(p)) + @np.errstate(over='ignore', under='ignore', divide='ignore') def gumbel_qdf(p: float, loc: float = 0, scale: float = 1) -> float: # return -scale / (p * np.log(p)) return scale / np.log(np.exp(-p * np.log(p))) + def rayleigh_cdf(x: float) -> float: return -np.expm1(-x**2 / 2) + def rayleigh_ppf(p: float) -> float: return np.sqrt(-2 * np.log1p(-p)) + def rayleigh_qdf(p: float) -> float: return 1 / ((1 - p) * rayleigh_ppf(p)) + def uniform_cdf(x: float) -> float: return np.clip(x, 0, 1) + def uniform_ppf(p: float) -> float: return np.clip(p, 0, 1) + def uniform_qdf(p: float) -> float: return ((p > 0) & (p < 1)) * 1. + @given(a=st.floats(0.1, 10)) def test_lm_expon(a: float): l_stats = np.array([a, a / 2, 1 / 3, 1 / 6]) @@ -203,7 +220,7 @@ def test_lm_cov_expon(): [1 / 2, 1 / 3, 1 / 6], [1 / 6, 1 / 6, 2 / 15], ]) - k3_hat = l_moment_cov_from_cdf(lambda x: 1-np.exp(-x), 3) + k3_hat = l_moment_cov_from_cdf(lambda x: 1 - np.exp(-x), 3) assert_allclose(k3, k3_hat) @@ -223,11 +240,11 @@ def test_lm_cov_loc_invariant(): k4_hat = l_moment_cov_from_cdf(gumbel_cdf, 4) k4_hat_l = l_moment_cov_from_cdf( functools.partial(gumbel_cdf, loc=-1), - 4 + 4, ) k4_hat_r = l_moment_cov_from_cdf( functools.partial(gumbel_cdf, loc=1), - 4 + 4, ) assert_allclose(k4_hat, k4_hat_l) @@ -237,12 +254,12 @@ def test_lm_cov_loc_invariant(): def test_lm_cov_scale_invariant(): k4_hat = l_moment_cov_from_cdf(gumbel_cdf, 4) k4_hat_l = l_moment_cov_from_cdf( - functools.partial(gumbel_cdf, scale=1/3), - 4 + functools.partial(gumbel_cdf, scale=1 / 3), + 4, ) k4_hat_r = l_moment_cov_from_cdf( functools.partial(gumbel_cdf, scale=3), - 4 + 4, ) assert_allclose(k4_hat, k4_hat_l * 9) @@ -271,7 +288,7 @@ def test_ls_cov_uniform(): expon_ppf, ])), rmax=st.integers(2, 8), - trim=st.tuples(st.integers(0, 1), st.integers(0, 3)) + trim=st.tuples(st.integers(0, 1), st.integers(0, 3)), ) def test_ppf_from_l_moments_identity( ppf: Callable[[float], float], @@ -300,7 +317,7 @@ def test_ppf_from_l_moments_identity( expon_qdf, ])), rmax=st.integers(3, 8), - trim=st.tuples(st.integers(0, 1), st.integers(0, 3)) + trim=st.tuples(st.integers(0, 1), st.integers(0, 3)), ) def test_qdf_from_l_moments_identity( qdf: Callable[[float], float], diff --git a/tests/test_univariate.py b/tests/test_univariate.py index d3741f8a..3045e83b 100644 --- a/tests/test_univariate.py +++ b/tests/test_univariate.py @@ -4,15 +4,13 @@ import numpy as np import numpy.typing as npt - -from numpy.testing import assert_allclose, assert_equal - from hypothesis import ( given, strategies as st, ) from hypothesis.extra import numpy as hnp from hypothesis.strategies import SearchStrategy +from numpy.testing import assert_allclose, assert_equal from pytest import approx import lmo @@ -36,11 +34,11 @@ } st_a1 = cast( SearchStrategy[npt.NDArray[Any]], - hnp.arrays(shape=st_n, unique=False, **__st_a_kwargs) + hnp.arrays(shape=st_n, unique=False, **__st_a_kwargs), ) st_a1_unique = cast( SearchStrategy[npt.NDArray[Any]], - hnp.arrays(shape=st_n, unique=True, **__st_a_kwargs) + hnp.arrays(shape=st_n, unique=True, **__st_a_kwargs), ) st_a2 = cast( SearchStrategy[npt.NDArray[Any]], @@ -170,7 +168,7 @@ def test_l_scale_const( def test_l_scale_invariant_loc( x: npt.NDArray[Any], trim: tuple[float, float], - dloc: float + dloc: float, ): l2 = lmo.l_scale(x, trim) assert np.isfinite(l2) diff --git a/tests/test_utils.py b/tests/test_utils.py index 6a2c590b..ef1ce96d 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -6,10 +6,12 @@ strategies as st, ) from hypothesis.extra import numpy as hnp + from lmo._utils import ordered + st_n = st.integers(2, 50) -st_x1 = hnp.arrays(shape=st_n, dtype=np.float_, elements=st.floats(-10, 10)) +st_x1 = hnp.arrays(shape=st_n, dtype=np.float64, elements=st.floats(-10, 10)) @given(x=st_x1) diff --git a/tests/test_weights.py b/tests/test_weights.py index f589297b..69b4cc36 100644 --- a/tests/test_weights.py +++ b/tests/test_weights.py @@ -5,8 +5,10 @@ given, strategies as st, ) + from lmo._lm import l_weights + MAX_N = 1 << 10 MAX_R = 8 MAX_T = 4 @@ -36,7 +38,7 @@ def test_l_weights_basic(n, r, trim): assert w.shape == (r, n) assert np.all(np.isfinite(n)) - assert w.dtype.type is np.float_ + assert w.dtype.type is np.float64 # symmetries only apply for symmetric trimming, for obvious reasons From 88ba6d40d9596ba1dc5e38efd06c278006512b17 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 16:11:07 +0100 Subject: [PATCH 04/44] slightly relaxed the ruff config --- pyproject.toml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 134f2f15..266246de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -124,7 +124,7 @@ pythonVersion = "3.10" pythonPlatform = "All" typeCheckingMode = "strict" reportMissingImports = true -reportMissingTypeStubs = true +reportMissingTypeStubs = false [tool.ruff] @@ -215,7 +215,11 @@ ignore = [ # pylint "PLC0415", # import-outside-top-level "PLR0904", # too-many-arguments + "PLR0911", # too-many-return-statements + "PLR0912", # too-many-branches "PLR0913", # too-many-public-methods + "PLR0914", # too-many-locals + "PLR0915", # too-many-statements "PLR0917", # too-many-positional "PLR6301", # no-self-use @@ -230,7 +234,7 @@ typing-modules = [ ] [tool.ruff.lint.per-file-ignores] -"tests/*" = ["D", "N806", "ANN"] +"tests/*" = ["D", "N806", "ANN", "PLC2701"] [tool.ruff.lint.pep8-naming] extend-ignore-names = ["*_gen", "l_rv_*"] From a6cd146a522ad4e59d01b2a275de36ba136438b1 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 16:11:31 +0100 Subject: [PATCH 05/44] manual ruff error fixes --- lmo/_lm.py | 3 ++- lmo/contrib/pandas.py | 4 ++-- lmo/contrib/scipy_stats.py | 2 +- lmo/diagnostic.py | 7 ++++--- lmo/distributions.py | 13 ++++++++----- lmo/inference.py | 4 +++- lmo/special.py | 11 +++++------ lmo/typing.py | 2 +- tests/test_diagnostic.py | 19 ++++++++++--------- tests/test_distributions.py | 2 +- tests/test_special.py | 2 +- tests/test_theoretical.py | 28 ++++++++++++++-------------- tests/test_univariate.py | 22 +++++++++++----------- 13 files changed, 63 insertions(+), 56 deletions(-) diff --git a/lmo/_lm.py b/lmo/_lm.py index a851b725..4253bd84 100644 --- a/lmo/_lm.py +++ b/lmo/_lm.py @@ -95,7 +95,8 @@ def _l_weights_ostat( assert 0 < r + s + t <= N, (r, N, trim) assert r >= 1, r - assert s >= 0 and t >= 0, trim + assert s >= 0, trim + assert t >= 0, trim c = ir_pascal(r, dtype=dtype) jnj = np.arange(N, dtype=dtype) diff --git a/lmo/contrib/pandas.py b/lmo/contrib/pandas.py index c6d1fac6..a3366088 100644 --- a/lmo/contrib/pandas.py +++ b/lmo/contrib/pandas.py @@ -90,9 +90,9 @@ def _setindex( axis: AxisDF, index: 'pd.Index[Any]', ) -> None: - if axis == 0 or axis == 'index': + if axis in {0, 'index'}: df.index = index - elif axis == 1 or axis == 'columns': + elif axis in {1, 'columns'}: df.columns = index else: msg = f"axis must be one of {{0, 'index', 1, 'columns'}}, got {axis}" diff --git a/lmo/contrib/scipy_stats.py b/lmo/contrib/scipy_stats.py index 4140949d..61c7612e 100644 --- a/lmo/contrib/scipy_stats.py +++ b/lmo/contrib/scipy_stats.py @@ -142,7 +142,7 @@ def _get_xxf(self, *args: Any, loc: float = 0, scale: float = 1) -> tuple[ def cdf(x: float, /) -> float: return _cdf(np.array([(x - loc) / scale], dtype=float), *args)[0] - def ppf(q: float, /): + def ppf(q: float, /) -> float: return _ppf(np.array([q], dtype=float), *args)[0] * scale + loc return cdf, ppf diff --git a/lmo/diagnostic.py b/lmo/diagnostic.py index ef058b5e..5c4f8a7f 100644 --- a/lmo/diagnostic.py +++ b/lmo/diagnostic.py @@ -54,9 +54,10 @@ T = TypeVar('T', bound=np.floating[Any]) AnyRV: TypeAlias = rv_continuous | rv_discrete - _ArrF8: TypeAlias = npt.NDArray[np.float64] +_MIN_RHO = 1e-5 + class HypothesisTestResult(NamedTuple): r""" @@ -613,7 +614,7 @@ def l_ratio_bounds( if _ri == 1: # L-loc / L-scale; unbounded t_min[i], t_max[i] = -np.inf, np.inf - elif _ri in (0, 2): # or s == t == 0: + elif _ri in {0, 2}: # or s == t == 0: t_min[i] = t_max[i] = 1 elif legacy: t_absmax = ( @@ -746,7 +747,7 @@ def obj(r: _ArrF8) -> float: ) rho = cast(float, res.x[0]) # type: ignore - if rho <= 1e-5 or influence_fn(-rho) or influence_fn(rho): + if rho <= _MIN_RHO or influence_fn(-rho) or influence_fn(rho): return np.nan return rho diff --git a/lmo/distributions.py b/lmo/distributions.py index 3aeeddf5..58dbc5ae 100644 --- a/lmo/distributions.py +++ b/lmo/distributions.py @@ -8,6 +8,7 @@ ) # pyright: reportIncompatibleMethodOverride=false +# ruff: noqa: PLR2004 import functools import math @@ -29,7 +30,9 @@ import numpy.polynomial as npp import numpy.typing as npt import scipy.special as sc # type: ignore -from scipy.stats._distn_infrastructure import _ShapeInfo # type: ignore +from scipy.stats._distn_infrastructure import ( + _ShapeInfo, # type: ignore # noqa: PLC2701 +) from scipy.stats.distributions import ( # type: ignore rv_continuous as _rv_continuous, ) @@ -1071,13 +1074,13 @@ def cdf_poly(self) -> PolySeries: for k in range(max(k0 // 2, 2), k0 + max(k0 // 2, 8)): # fit cdf = ppf.fit(x, q, k - 1).trim(_F_EPS) - k = cdf.degree() + 1 + _k = cdf.degree() + 1 # according to the inverse function theorem, this should be 0 eps = 1 / cdf.deriv()(x) - y # Bayesian information criterion (BIC) - bic = (k - 1) * np.log(n) + n * np.log( + bic = (_k - 1) * np.log(n) + n * np.log( np.average(eps**2, weights=w), ) @@ -1141,9 +1144,9 @@ def _cdf_single(self, x: float) -> float: def _pdf(self, x: npt.NDArray[np.float64]) -> npt.NDArray[np.float64]: return np.clip(cast(npt.NDArray[np.float64], self.pdf_poly(x)), 0, 1) - def _munp(self, n: int): + def _munp(self, n: int) -> float: # non-central product-moment $E[X^n]$ - return (self._ppf_poly**n).integ(lbnd=0)(1) + return cast(float, (self._ppf_poly**n).integ(lbnd=0)(1)) def _updated_ctor_param(self) -> Mapping[str, Any]: return cast( diff --git a/lmo/inference.py b/lmo/inference.py index 6a644058..4d26bee8 100644 --- a/lmo/inference.py +++ b/lmo/inference.py @@ -151,7 +151,9 @@ def _loss_step( return np.sqrt(g_r.T @ w_rr @ g_r) # type: ignore -def _get_l_moment_fn(ppf: DistributionFunction[...]): +def _get_l_moment_fn( + ppf: DistributionFunction[...], +) -> Callable[..., npt.NDArray[np.float64]]: def l_moment_fn( r: IntVector, *args: Any, diff --git a/lmo/special.py b/lmo/special.py index 5913ce5f..4af6b7d0 100644 --- a/lmo/special.py +++ b/lmo/special.py @@ -18,12 +18,11 @@ from .typing import AnyNDArray, AnyScalar, IntVector +_DTYPE_CHARS = '?bBhHiIlLqQpP' + + @overload -def fpow( - x: AnyScalar, - n: AnyScalar, - out: None = ..., -) -> float: ... +def fpow(x: AnyScalar, n: AnyScalar, out: None = ...) -> float: ... @overload def fpow( @@ -347,7 +346,7 @@ def fourier_jacobi( """ _c: npt.NDArray[np.integer[Any] | np.floating[Any]] _c = np.array(c, ndmin=1, copy=False) - if _c.dtype.char in '?bBhHiIlLqQpP': + if _c.dtype.char in _DTYPE_CHARS: _c = _c.astype(np.float64) _x = np.asanyarray(x) diff --git a/lmo/typing.py b/lmo/typing.py index b2f17431..b4c3693c 100644 --- a/lmo/typing.py +++ b/lmo/typing.py @@ -148,7 +148,7 @@ def __lt__(self, __other: int) -> bool: ... @runtime_checkable -class PolySeries(Protocol): +class PolySeries(Protocol): # noqa: PLW1641 """ Annotations for the (private) `numpy.polynomial._polybase.ABCPolyBase` subtypes, e.g. [`numpy.polynomial.Legendre`][numpy.polynomial.Legendre]. diff --git a/tests/test_diagnostic.py b/tests/test_diagnostic.py index 2328d783..8bff49c5 100644 --- a/tests/test_diagnostic.py +++ b/tests/test_diagnostic.py @@ -1,24 +1,25 @@ import numpy as np -from pytest import approx +import pytest from lmo.diagnostic import l_moment_bounds def test_l_moment_bounds_00(): assert np.isposinf(l_moment_bounds(1)) - assert l_moment_bounds(2) == approx(1 / np.sqrt(3)) - assert l_moment_bounds(3) == approx(1 / np.sqrt(5)) - assert l_moment_bounds(4) == approx(1 / np.sqrt(7)) - assert l_moment_bounds(42) == approx(1 / np.sqrt(83)) + assert l_moment_bounds(2) == pytest.approx(1 / np.sqrt(3)) + assert l_moment_bounds(3) == pytest.approx(1 / np.sqrt(5)) + assert l_moment_bounds(4) == pytest.approx(1 / np.sqrt(7)) + assert l_moment_bounds(42) == pytest.approx(1 / np.sqrt(83)) def test_l_moment_bounds_scale(): - assert l_moment_bounds(42, scale=69) == approx(l_moment_bounds(42) * 69) + bounds_expect = l_moment_bounds(42) * 69 + bounds_actual = l_moment_bounds(42, scale=69) + assert bounds_actual == pytest.approx(bounds_expect) def test_l_moment_bounds_vectorized(): bounds = l_moment_bounds([1, 2, 42]) assert np.isposinf(bounds[0]) - assert bounds[1] == approx(1 / np.sqrt(3)) - assert bounds[-1] == approx(1 / np.sqrt(83)) - + assert bounds[1] == pytest.approx(1 / np.sqrt(3)) + assert bounds[-1] == pytest.approx(1 / np.sqrt(83)) diff --git a/tests/test_distributions.py b/tests/test_distributions.py index cd45ccfb..24fe3a17 100644 --- a/tests/test_distributions.py +++ b/tests/test_distributions.py @@ -50,7 +50,7 @@ def test_l_poly_eq_uniform(trim: AnyTrim): @pytest.mark.parametrize('scale', [1, .5, 2]) @pytest.mark.parametrize('loc', [0, 1, -1]) -@pytest.mark.parametrize('b, d, f', [ +@pytest.mark.parametrize(('b', 'd', 'f'), [ (1, 0, 1), (0, 0, 1), (0, 0.9, 0), diff --git a/tests/test_special.py b/tests/test_special.py index 2c7c8ea1..db1acf79 100644 --- a/tests/test_special.py +++ b/tests/test_special.py @@ -35,7 +35,7 @@ def test_fourier_legendre(c: list[float]): @pytest.mark.parametrize( - 'a,b', + ('a', 'b'), [(0, 1), (1, 0), (1, 1), (1 / 137, -1 / 12), (42, 69)], ) @pytest.mark.parametrize('c', C_EXAMPLES) diff --git a/tests/test_theoretical.py b/tests/test_theoretical.py index d445f53a..ed226057 100644 --- a/tests/test_theoretical.py +++ b/tests/test_theoretical.py @@ -73,8 +73,8 @@ def gumbel_ppf(p: float, loc: float = 0, scale: float = 1) -> float: @np.errstate(over='ignore', under='ignore', divide='ignore') def gumbel_qdf(p: float, loc: float = 0, scale: float = 1) -> float: - # return -scale / (p * np.log(p)) - return scale / np.log(np.exp(-p * np.log(p))) + # return loc - scale / (p * np.log(p)) + return loc + scale / np.log(np.exp(-p * np.log(p))) def rayleigh_cdf(x: float) -> float: @@ -128,17 +128,17 @@ def test_lm_normal(): r = [1, 2, 3, 4] l2 = sigma / np.sqrt(np.pi) - l = np.array([mu, l2, 0, l2 * (60 * constants.theta_m_bar - 9)]) + lr = np.array([mu, l2, 0, l2 * (60 * constants.theta_m_bar - 9)]) l_ppf = l_moment_from_ppf(IQ.inv_cdf, r) - assert_allclose(l_ppf, l) + assert_allclose(l_ppf, lr) l_cdf = l_moment_from_cdf(IQ.cdf, r) - assert_allclose(l_cdf, l) + assert_allclose(l_cdf, lr) # QDF is shift-invariant, so it can't be used to find the L-loc l_qdf = l_moment_from_qdf(lambda u: 1 / IQ.pdf(IQ.inv_cdf(u)), r[1:]) - assert_allclose(l_qdf, l[1:]) + assert_allclose(l_qdf, lr[1:]) def test_tlm_normal(): @@ -171,35 +171,35 @@ def test_tlm_cauchy(): z3 = zeta(3) l2 = 18 * z3 / np.pi**3 - l = l2 * np.array([0, 1, 0, 25 / 6 - 175 * zeta(5) / (4 * np.pi**2 * z3)]) + lr = l2 * np.array([0, 1, 0, 25 / 6 - 175 * zeta(5) / (4 * np.pi**2 * z3)]) l_ppf = l_moment_from_ppf(cauchy_ppf, r, trim=1) - assert_allclose(l_ppf, l) + assert_allclose(l_ppf, lr) l_cdf = l_moment_from_cdf(cauchy_cdf, r, trim=1) - assert_allclose(l_cdf, l) + assert_allclose(l_cdf, lr) l_qdf = l_moment_from_qdf(cauchy_qdf, r[1:], trim=1) - assert_allclose(l_qdf, l[1:]) + assert_allclose(l_qdf, lr[1:]) @given(a=st.floats(0.1, 10)) def test_lhm_expon(a: float): r = [1, 2, 3, 4] - l = a * np.array([1, 1 / 2, 1 / 9, 1 / 24]) / 2 + lr = a * np.array([1, 1 / 2, 1 / 9, 1 / 24]) / 2 ppf = functools.partial(expon_ppf, a=a) cdf = functools.partial(expon_cdf, a=a) qdf = functools.partial(expon_qdf, a=a) l_ppf = l_moment_from_ppf(ppf, r, trim=(0, 1)) - assert_allclose(l_ppf, l) + assert_allclose(l_ppf, lr) l_cdf = l_moment_from_cdf(cdf, r, trim=(0, 1)) - assert_allclose(l_cdf, l) + assert_allclose(l_cdf, lr) l_qdf = l_moment_from_qdf(qdf, r[1:], trim=(0, 1)) - assert_allclose(l_qdf, l[1:]) + assert_allclose(l_qdf, lr[1:]) def test_lm_cov_uniform(): diff --git a/tests/test_univariate.py b/tests/test_univariate.py index 3045e83b..bf951ebc 100644 --- a/tests/test_univariate.py +++ b/tests/test_univariate.py @@ -4,6 +4,7 @@ import numpy as np import numpy.typing as npt +import pytest from hypothesis import ( given, strategies as st, @@ -11,7 +12,6 @@ from hypothesis.extra import numpy as hnp from hypothesis.strategies import SearchStrategy from numpy.testing import assert_allclose, assert_equal -from pytest import approx import lmo @@ -66,7 +66,7 @@ def test_l_moment_aweights_const( w = np.full_like(a, w_const) l_r_w = lmo.l_moment(a, r, trim, aweights=w) - assert l_r_w == approx(l_r, rel=1e-5, abs=1e-8) + assert l_r_w == pytest.approx(l_r, rel=1e-5, abs=1e-8) @given(a=st_a1, r=st_r, trim=st_trim) @@ -77,7 +77,7 @@ def test_l_ratio_unit( ): tau = lmo.l_ratio(a, r, r, trim) - assert tau == approx(1) + assert tau == pytest.approx(1) @given(a=st_a1 | st_a2) @@ -86,7 +86,7 @@ def test_l_loc_mean(a: npt.NDArray[Any]): l_loc = lmo.l_loc(a) assert l_loc.shape == loc.shape - assert l_loc == approx(loc, rel=1e-5, abs=1e-8) + assert l_loc == pytest.approx(loc, rel=1e-5, abs=1e-8) @given(a=st_a2) @@ -114,7 +114,7 @@ def test_l_loc_const( x = np.full(n, x0, dtype=dtype) l_1 = lmo.l_loc(x, trim) - assert l_1 == approx(x0, rel=1e-5, abs=1e-8) + assert l_1 == pytest.approx(x0, rel=1e-5, abs=1e-8) @given( @@ -134,10 +134,10 @@ def test_l_loc_linearity( assert np.isscalar(l1) l1_add = lmo.l_loc(x + dloc, trim) - assert l1_add == approx(l1 + dloc, rel=1e-5, abs=1e-8) # type: ignore + assert l1_add == pytest.approx(l1 + dloc, rel=1e-5, abs=1e-8) # type: ignore l1_mul = lmo.l_loc(x * dscale, trim) - assert l1_mul == approx(l1 * dscale, rel=1e-5, abs=1e-8) # type: ignore + assert l1_mul == pytest.approx(l1 * dscale, rel=1e-5, abs=1e-8) # type: ignore @given(a=st_a1) @@ -149,7 +149,7 @@ def test_l_scale_equiv_md(a: npt.NDArray[Any]): l2 = lmo.l_scale(a) assert l2.shape == scale.shape - assert l2 == approx(scale, rel=1e-5, abs=1e-8) + assert l2 == pytest.approx(scale, rel=1e-5, abs=1e-8) @given(x0=st.floats(-1e6, 1e6), n=st_n, dtype=st_dtype, trim=st_trim) @@ -161,7 +161,7 @@ def test_l_scale_const( ): x = np.full(n, x0, dtype=dtype) l2 = lmo.l_scale(x, trim) - assert l2 == approx(0, rel=1e-5, abs=1e-8) + assert l2 == pytest.approx(0, rel=1e-5, abs=1e-8) @given(x=st_a1 | st_a2, trim=st_trim, dloc=st.floats(-1e3, 1e3)) @@ -176,7 +176,7 @@ def test_l_scale_invariant_loc( assert round(l2, 8) >= 0 # type: ignore l2_add = lmo.l_scale(x + dloc, trim) - assert l2_add == approx(l2, rel=1e-5, abs=1e-8) + assert l2_add == pytest.approx(l2, rel=1e-5, abs=1e-8) @given( @@ -198,7 +198,7 @@ def test_l_scale_linear_scale( itrim = trim[::-1] if dscale < 0 else trim l2_mul = lmo.l_scale(x * dscale, itrim) - assert l2_mul == approx(abs(l2 * dscale), abs=1e-8) # type: ignore + assert l2_mul == pytest.approx(abs(l2 * dscale), abs=1e-8) # type: ignore def test_ll_trim_ev(): From e87032e3a08663bf415d1fc6b32555e4212af840 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 16:32:02 +0100 Subject: [PATCH 06/44] stricter pyright config --- pyproject.toml | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 266246de..112d3890 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -106,10 +106,10 @@ exclude = [ "**/__pycache__", "**/.hypothesis", "**/.pytest_cache", - "**/.ruff_cache", - "**/.vscode", ".git", ".github", + ".ruff_cache", + ".vscode", "dist", "docs", "site", @@ -119,12 +119,38 @@ ignore = [ # TODO: figure out how to do this conditionally "lmo/contrib/pandas.py", ] +venvPath = "." venv = ".venv" pythonVersion = "3.10" pythonPlatform = "All" typeCheckingMode = "strict" -reportMissingImports = true -reportMissingTypeStubs = false +useLibraryCodeForTypes = true + +disableBytesTypePromotions = true +reportPropertyTypeMismatch = "warning" +reportMissingTypeStubs = "none" +reportUnusedImport = "warning" +reportUnusedClass = "warning" +reportUnusedFunction = "warning" +reportUnusedVariable = "warning" +reportConstantRedefinition = "warning" +reportInconsistentConstructor = "warning" +reportMissingTypeArgument = "warning" +reportUninitializedInstanceVariable = "warning" # maybe +reportCallInDefaultInitializer = "warning" +reportUnnecessaryIsInstance = "warning" +reportUnnecessaryCast = "warning" +reportUnnecessaryComparison = "warning" +reportUnnecessaryContains = "warning" +reportImplicitStringConcatenation = "none" +reportInvalidStubStatement = "error" +reportIncompleteStub = "error" +reportUnusedCallResult = "warning" +reportUnusedCoroutine = "error" +reportUnusedExpression = "warning" +reportUnnecessaryTypeIgnoreComment = "warning" +reportMatchNotExhaustive = "error" +reportShadowedImports = "warning" [tool.ruff] From 9e4e6d9e132179db7b96e61eece6f9379991478b Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 16:32:17 +0100 Subject: [PATCH 07/44] fix pyright warnings --- lmo/_lm.py | 4 ++-- lmo/_lm_co.py | 2 +- lmo/_poly.py | 6 +++--- lmo/_utils.py | 2 +- lmo/contrib/__init__.py | 2 +- lmo/contrib/pandas.py | 4 ++-- lmo/contrib/scipy_stats.py | 4 +++- lmo/diagnostic.py | 21 +++++++++------------ lmo/distributions.py | 38 +++++++++++++++++++------------------- lmo/inference.py | 4 ++-- lmo/ostats.py | 4 ++-- lmo/special.py | 33 +++++++++------------------------ lmo/theoretical.py | 16 ++++++---------- 13 files changed, 60 insertions(+), 80 deletions(-) diff --git a/lmo/_lm.py b/lmo/_lm.py index 4253bd84..0aa129e2 100644 --- a/lmo/_lm.py +++ b/lmo/_lm.py @@ -72,7 +72,7 @@ def _l_weights_pwm( r0 = r + s + t p0 = sh_legendre(r0, dtype=np.int64 if r0 < 29 else dtype) - w0 = p0 @ pwm_beta.weights(r0, n, dtype=dtype) # type: ignore + w0 = p0 @ pwm_beta.weights(r0, n, dtype=dtype) out = trim_matrix(r, trim, dtype=dtype) @ w0 if s or t else w0 return cast(npt.NDArray[T], out) @@ -1165,7 +1165,7 @@ def l_ratio_influence( The (vectorized) empirical influence function. """ - _x = np.sort(a, kind=sort) # type: ignore + _x = np.sort(a, kind=sort) _r, _k = clean_order(r), clean_order(k) n = len(_x) diff --git a/lmo/_lm_co.py b/lmo/_lm_co.py index 85cece51..3d7fc9a1 100644 --- a/lmo/_lm_co.py +++ b/lmo/_lm_co.py @@ -172,7 +172,7 @@ def _clean_array(arr: npt.ArrayLike) -> npt.NDArray[T]: l_ij[1:, :, j] = np.inner(p_r, x_k_ij) - return l_ij.take(_r, 0) # pyright: ignore [reportUnknownMemberType] + return l_ij.take(_r, 0) def l_coratio( diff --git a/lmo/_poly.py b/lmo/_poly.py index e1364361..75c11787 100644 --- a/lmo/_poly.py +++ b/lmo/_poly.py @@ -22,7 +22,7 @@ import numpy as np import numpy.polynomial as npp import numpy.typing as npt -import scipy.special as scs # type: ignore +import scipy.special as scs from .typing import FloatVector, PolySeries @@ -74,7 +74,7 @@ def eval_sh_jacobi( if n == 4: return 1 + 10 * v * (2 + 7 * v) - return scs.eval_sh_legendre(n, x) # type: ignore + return scs.eval_sh_legendre(n, x) if n == 1: return (a + b + 2) * x - b - 1 @@ -99,7 +99,7 @@ def eval_sh_jacobi( ) / 6 # don't use `eval_sh_jacobi`: https://github.com/scipy/scipy/issues/18988 - return scs.eval_jacobi(n, a, b, u) # type: ignore + return scs.eval_jacobi(n, a, b, u) def peaks_jacobi(n: int, a: float, b: float) -> npt.NDArray[np.float64]: diff --git a/lmo/_utils.py b/lmo/_utils.py index 583e023c..3d42ccbe 100644 --- a/lmo/_utils.py +++ b/lmo/_utils.py @@ -126,7 +126,7 @@ def _apply_aweights( # linearly interpolate to effectively "stretch" samples with large # weight, and "compress" those with small weights v_jk = np.linspace(w_jk[0], w_jk[-1], len(w_jk), dtype=np.float64) - out[j] = np.interp(v_jk, w_jk, x_jk) # pyright: ignore + out[j] = np.interp(v_jk, w_jk, x_jk) # unswap the axes if previously swapped return np.swapaxes(out, -1, axis) if swap_axes else out diff --git a/lmo/contrib/__init__.py b/lmo/contrib/__init__.py index 9ba78b64..a8fe2f59 100644 --- a/lmo/contrib/__init__.py +++ b/lmo/contrib/__init__.py @@ -3,7 +3,7 @@ __all__ = ('install',) try: - import pandas as pd # type: ignore + import pandas as pd except ImportError: pd = None diff --git a/lmo/contrib/pandas.py b/lmo/contrib/pandas.py index a3366088..0add490f 100644 --- a/lmo/contrib/pandas.py +++ b/lmo/contrib/pandas.py @@ -278,10 +278,10 @@ def __lmo_register__( # noqa: D105 method: Callable[..., _FloatOrFrame], ) -> None: def fn(obj: pd.DataFrame) -> Callable[..., _FloatOrFrame]: - # return functools.partial(method, obj) # type: ignore + # return functools.partial(method, obj) return method.__get__(obj, cls) - pd.api.extensions.register_dataframe_accessor(name)(fn) # type: ignore + pd.api.extensions.register_dataframe_accessor(name)(fn) def l_moment( self, diff --git a/lmo/contrib/scipy_stats.py b/lmo/contrib/scipy_stats.py index 61c7612e..4e103874 100644 --- a/lmo/contrib/scipy_stats.py +++ b/lmo/contrib/scipy_stats.py @@ -2,6 +2,8 @@ __all__ = ('l_rv_generic', 'l_rv_frozen', 'install') +# pyright: reportUninitializedInstanceVariable=false + from collections.abc import Callable, Mapping, Sequence from typing import ( Any, @@ -18,7 +20,7 @@ import numpy as np import numpy.typing as npt from scipy.stats import fit as scipy_fit # type: ignore -from scipy.stats.distributions import rv_continuous, rv_frozen # type: ignore +from scipy.stats.distributions import rv_continuous, rv_frozen from lmo import ( inference, diff --git a/lmo/diagnostic.py b/lmo/diagnostic.py index 5c4f8a7f..8b04200c 100644 --- a/lmo/diagnostic.py +++ b/lmo/diagnostic.py @@ -13,6 +13,7 @@ 'shift_sensitivity', ) +import math import warnings from collections.abc import Callable from math import lgamma @@ -28,18 +29,14 @@ import numpy as np import numpy.typing as npt -from scipy.integrate import quad # type: ignore -from scipy.optimize import ( # type: ignore +from scipy.integrate import quad # pyright: ignore[reportUnknownVariableType] +from scipy.optimize import ( OptimizeResult, OptimizeWarning, minimize, # type: ignore ) -from scipy.special import chdtrc # type: ignore -from scipy.stats.distributions import ( # type: ignore - rv_continuous, - rv_discrete, - rv_frozen, -) +from scipy.special import chdtrc +from scipy.stats.distributions import rv_continuous, rv_discrete, rv_frozen from ._lm import l_ratio from ._poly import extrema_jacobi @@ -756,7 +753,7 @@ def obj(r: _ArrF8) -> float: def error_sensitivity( influence_fn: Callable[[float], float], /, - domain: tuple[float, float] = (float('-inf'), float('inf')), + domain: tuple[float, float] = (-math.inf, math.inf), ) -> float: r""" Evaluate the *gross-error sensitivity* of an influence function @@ -818,7 +815,7 @@ def obj(xs: _ArrF8) -> float: cast(str, res.message), # type: ignore OptimizeWarning, stacklevel=1, - ) # type: ignore + ) return -cast(float, res.fun) # type: ignore @@ -826,7 +823,7 @@ def obj(xs: _ArrF8) -> float: def shift_sensitivity( influence_fn: Callable[[float], float], /, - domain: tuple[float, float] = (float('-inf'), float('inf')), + domain: tuple[float, float] = (-math.inf, math.inf), ) -> float: r""" Evaluate the *local-shift sensitivity* of an influence function @@ -905,6 +902,6 @@ def obj(xs: _ArrF8) -> float: cast(str, res.message), # type: ignore OptimizeWarning, stacklevel=1, - ) # type: ignore + ) return -cast(float, res.fun) # type: ignore diff --git a/lmo/distributions.py b/lmo/distributions.py index 58dbc5ae..169ca8e7 100644 --- a/lmo/distributions.py +++ b/lmo/distributions.py @@ -29,13 +29,11 @@ import numpy as np import numpy.polynomial as npp import numpy.typing as npt -import scipy.special as sc # type: ignore +import scipy.special as sc from scipy.stats._distn_infrastructure import ( _ShapeInfo, # type: ignore # noqa: PLC2701 ) -from scipy.stats.distributions import ( # type: ignore - rv_continuous as _rv_continuous, -) +from scipy.stats.distributions import rv_continuous as _rv_continuous from ._poly import jacobi_series, roots from ._utils import ( @@ -159,7 +157,10 @@ def random_state(self) -> np.random.Generator: return self._random_state @random_state.setter - def random_state(self, seed: int | np.random.Generator): + def random_state( + self, + seed: int | np.random.Generator, # pyright: ignore[reportPropertyTypeMismatch] + ): self._random_state = np.random.default_rng(seed) @classmethod @@ -1110,7 +1111,7 @@ def _weights(self, q: npt.ArrayLike) -> npt.NDArray[np.float64]: return np.where( (_q >= 0) & (_q <= 1), _q**s * (1 - _q) ** t, - cast(float, getattr(self, 'badvalue', np.nan)), # type: ignore + cast(float, getattr(self, 'badvalue', np.nan)), ) def _ppf(self, q: npt.NDArray[np.float64]) -> npt.NDArray[np.float64]: @@ -1233,7 +1234,7 @@ def _kumaraswamy_lmo0( (-1)**(k - 1) * cast(_ArrF8, sc.comb(r + k - 2, r + t - 1)) # type: ignore * cast(_ArrF8, sc.comb(r + s + t, k)) # type: ignore - * cast(_ArrF8, sc.beta(1 / a, 1 + k * b)) / a # type: ignore + * cast(_ArrF8, sc.beta(1 / a, 1 + k * b)) / a ).sum() / r @@ -1323,7 +1324,7 @@ def _munp( a: float, b: float, ) -> float: - return b * cast(float, sc.beta(1 + n / a, b)) # type: ignore + return b * cast(float, sc.beta(1 + n / a, b)) def _l_moment( self, @@ -1548,9 +1549,9 @@ def _lmo0_partial(theta: float, scale: float) -> float: return cast(float, harmonic(s + t + 1) - harmonic(t)) return scale * ( - sc.poch(r + t, s + 1) # type: ignore - * sc.poch(1 - theta, r - 2) # type: ignore - / sc.poch(1 + theta + t, r + s) # type: ignore + sc.poch(r + t, s + 1) + * sc.poch(1 - theta, r - 2) + / sc.poch(1 + theta + t, r + s) + (1 / theta if r == 1 else 0) ) / r @@ -1706,7 +1707,7 @@ def _l_moment( r, trim=trim, quad_opts=quad_opts, - ), # type: ignore + ), ) return np.asarray(lmbda_r) @@ -1734,7 +1735,7 @@ def _entropy(self, b: float, d: float, f: float) -> float: return 1 - b + bd * cast( float, - sc.hyp2f1(1, 1 / bd, 1 + 1 / bd, -f / (1 - f)), # type: ignore + sc.hyp2f1(1, 1 / bd, 1 + 1 / bd, -f / (1 - f)), ) @@ -1865,9 +1866,9 @@ def _lmo0_partial(trim: float, theta: float) -> float: return ( (-1)**r * - sc.poch(r + trim, s + t - trim + 1) # type: ignore - * sc.poch(1 - theta, r - 2) # type: ignore - / sc.poch(1 + theta + trim, r + s + t - trim) # type: ignore + sc.poch(r + trim, s + t - trim + 1) + * sc.poch(1 - theta, r - 2) + / sc.poch(1 + theta + trim, r + s + t - trim) - (1 / theta if r == 1 else 0) ) / r @@ -1979,8 +1980,7 @@ def _stats(self, b: float, d: float, f: float) -> tuple[ (a / b1)**2 / (b1 + b) + (c / d1)**2 / (d1 + d) + 2 * a * c / (b * d) * ( - 1 / (b1 * d1) - - cast(float, sc.beta(b1, d1)) # type: ignore + 1 / (b1 * d1) - cast(float, sc.beta(b1, d1)) ) ) @@ -2024,7 +2024,7 @@ def _l_moment( r, trim=trim, quad_opts=quad_opts, - ), # type: ignore + ), ) return np.asarray(lmbda_r) diff --git a/lmo/inference.py b/lmo/inference.py index 4d26bee8..28221899 100644 --- a/lmo/inference.py +++ b/lmo/inference.py @@ -7,7 +7,7 @@ import numpy as np import numpy.typing as npt -from scipy import optimize, special # type: ignore +from scipy import optimize, special from ._lm import l_moment as l_moment_est from ._lm_co import l_coscale as l_coscale_est @@ -98,7 +98,7 @@ def j_test(self) -> HypothesisTestResult: raise ValueError(msg) stat = self.statistic - pvalue = special.chdtr(df, stat) # type: ignore + pvalue = special.chdtr(df, stat) return HypothesisTestResult(stat, pvalue) @property diff --git a/lmo/ostats.py b/lmo/ostats.py index 312f52cc..e46e79f8 100644 --- a/lmo/ostats.py +++ b/lmo/ostats.py @@ -15,7 +15,7 @@ import numpy as np import numpy.typing as npt -from scipy.special import betainc, betaln # type: ignore +from scipy.special import betainc, betaln from .typing import AnyNDArray @@ -146,4 +146,4 @@ def from_cdf( msg = 'F must lie between 0 and 1' raise ValueError(msg) - return betainc(i + 1, n - i, F) # type: ignore + return betainc(i + 1, n - i, F) diff --git a/lmo/special.py b/lmo/special.py index 4af6b7d0..183c4462 100644 --- a/lmo/special.py +++ b/lmo/special.py @@ -12,7 +12,7 @@ import numpy as np import numpy.typing as npt -import scipy.special as sc # type: ignore +import scipy.special as sc from ._utils import clean_orders from .typing import AnyNDArray, AnyScalar, IntVector @@ -79,10 +79,7 @@ def fpow( - [`scipy.special.poch`][scipy.special.poch] -- the rising factorial """ _x, _n = np.asanyarray(x), np.asanyarray(n) - res = cast( - npt.NDArray[np.float64], - sc.poch(_x - _n + 1, _n, out=out), # type: ignore - ) + res = cast(npt.NDArray[np.float64], sc.poch(_x - _n + 1, _n, out=out)) if res.ndim == 0 and np.isscalar(x) and np.isscalar(n): return res[()] return res @@ -146,16 +143,10 @@ def gamma2( regularized gamma function \( Q(a,\ x) \). """ if a == 0: - return cast( - float | npt.NDArray[np.float64], - sc.exp1(x, out=out), # type: ignore - ) + return cast(float | npt.NDArray[np.float64], sc.exp1(x, out=out)) - res = cast( - float | npt.NDArray[np.float64], - sc.gammaincc(a, x, out=out), # type: ignore - ) - res *= cast(float, sc.gamma(a)) # type: ignore + res = cast(float | npt.NDArray[np.float64], sc.gammaincc(a, x, out=out)) + res *= cast(float, sc.gamma(a)) return res @@ -199,7 +190,7 @@ def harmonic( _out = cast( npt.NDArray[np.float64] | npt.NDArray[np.complex128], - sc.digamma(_n + 1, out), # type: ignore + sc.digamma(_n + 1, out), ) _out += np.euler_gamma @@ -261,19 +252,13 @@ def norm_sh_jacobi( c = np.ones(r.shape) elif alpha == beta == -1 / 2: # shifted Chebychev of the first kind - c = np.exp(2 * ( - sc.gammaln(r - 1 / 2) - sc.gammaln(r) # type: ignore - )) / 2 + c = np.exp(2 * (sc.gammaln(r - 1 / 2) - sc.gammaln(r))) / 2 elif alpha == beta == 1 / 2: # shifted Chebychev of the second kind - c = np.exp(2 * ( - sc.gammaln(r + 1 / 2) - sc.gammaln(r + 1) # type: ignore - )) / 2 + c = np.exp(2 * (sc.gammaln(r + 1 / 2) - sc.gammaln(r + 1))) / 2 else: p, q = r + alpha, r + beta - c = np.exp( - sc.betaln(p, q) - sc.betaln(r, p + beta), # type: ignore - ) / (p + q - 1) + c = np.exp(sc.betaln(p, q) - sc.betaln(r, p + beta)) / (p + q - 1) return c[()] if np.isscalar(n) else c diff --git a/lmo/theoretical.py b/lmo/theoretical.py index 51d989c6..9ce8e690 100644 --- a/lmo/theoretical.py +++ b/lmo/theoretical.py @@ -45,12 +45,8 @@ import numpy as np import numpy.typing as npt -import scipy.integrate as sci # type: ignore -from scipy.stats.distributions import ( # type: ignore - rv_continuous, - rv_discrete, - rv_frozen, -) +import scipy.integrate as sci +from scipy.stats.distributions import rv_continuous, rv_discrete, rv_frozen from ._poly import eval_sh_jacobi from ._utils import ( @@ -319,13 +315,13 @@ def l_moment_from_cdf( rs = clean_orders(np.asanyarray(r)) s, t = clean_trim(trim) - from scipy.special import betainc # type: ignore + from scipy.special import betainc def integrand(x: float, _r: int) -> float: p = cdf(x) if _r == 1: if s or t: # noqa: SIM108 - v = cast(float, betainc(s + 1, t + 1, p)) # type: ignore + v = cast(float, betainc(s + 1, t + 1, p)) else: v = p return np.heaviside(x, .5) - v @@ -342,7 +338,7 @@ def integrand(x: float, _r: int) -> float: loc0 = a if np.isfinite(a) and a > 0 else 0 kwds = quad_opts or {} - kwds.setdefault('limit', QUAD_LIMIT) + _ = kwds.setdefault('limit', QUAD_LIMIT) def _l_moment_single(_r: int) -> float: if _r == 0: @@ -502,7 +498,7 @@ def integrand(p: float, _r: int) -> float: return p**s * (1 - p) ** t * eval_sh_jacobi(_r - 1, t, s, p) * ppf(p) quad_kwds = quad_opts or {} - quad_kwds.setdefault('limit', QUAD_LIMIT) + _ = quad_kwds.setdefault('limit', QUAD_LIMIT) def _l_moment_single(_r: int) -> float: if _r == 0: From 82613edef331a81ff320baf10cbd205481f5d613 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 16:35:40 +0100 Subject: [PATCH 08/44] use 2-tab indents for .json and .yaml in editorconfig --- .editorconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 17cb4f8b..0f0d653a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,5 +12,5 @@ trim_trailing_whitespace = true max_line_length = 79 # 2 space indentation -[*.yml] +[{*.json,*.yaml,*.yml,}] indent_size = 2 From 08d436eb6ddc9195d2a43b0158fe969fb9f9ad25 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 17:00:26 +0100 Subject: [PATCH 09/44] pyright config tweaks --- pyproject.toml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 112d3890..37e8a629 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -104,10 +104,10 @@ testpaths = ["tests", "lmo"] include = ["lmo"] exclude = [ "**/__pycache__", - "**/.hypothesis", - "**/.pytest_cache", ".git", ".github", + ".hypothesis", + ".pytest_cache", ".ruff_cache", ".vscode", "dist", @@ -119,6 +119,7 @@ ignore = [ # TODO: figure out how to do this conditionally "lmo/contrib/pandas.py", ] +stubPath = './typings' venvPath = "." venv = ".venv" pythonVersion = "3.10" @@ -126,6 +127,7 @@ pythonPlatform = "All" typeCheckingMode = "strict" useLibraryCodeForTypes = true +deprecateTypingAliases = true disableBytesTypePromotions = true reportPropertyTypeMismatch = "warning" reportMissingTypeStubs = "none" @@ -136,17 +138,13 @@ reportUnusedVariable = "warning" reportConstantRedefinition = "warning" reportInconsistentConstructor = "warning" reportMissingTypeArgument = "warning" -reportUninitializedInstanceVariable = "warning" # maybe +reportUninitializedInstanceVariable = "warning" reportCallInDefaultInitializer = "warning" reportUnnecessaryIsInstance = "warning" reportUnnecessaryCast = "warning" reportUnnecessaryComparison = "warning" reportUnnecessaryContains = "warning" -reportImplicitStringConcatenation = "none" -reportInvalidStubStatement = "error" -reportIncompleteStub = "error" reportUnusedCallResult = "warning" -reportUnusedCoroutine = "error" reportUnusedExpression = "warning" reportUnnecessaryTypeIgnoreComment = "warning" reportMatchNotExhaustive = "error" From e7631aafe49af340146a7bdd20f148ca622102a8 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 18:16:59 +0100 Subject: [PATCH 10/44] have dependabot use the `dev` branch --- .github/dependabot.yml | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f0822492..7a92c1df 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,11 +1,18 @@ version: 2 updates: - - package-ecosystem: github-actions - directory: / - schedule: - interval: weekly - - package-ecosystem: pip - directory: / - schedule: - interval: weekly - insecure-external-code-execution: allow + - package-ecosystem: github-actions + directory: / + target-branch: "dev" + labels: + - "github actions" + schedule: + interval: weekly + + - package-ecosystem: pip + versioning-strategy: lockfile-only + directory: / + target-branch: "dev" + labels: + - "dependencies" + schedule: + interval: weekly From 10992ff5643e5afdc88be3a10a5deba69cae2933 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 28 Feb 2024 18:35:17 +0100 Subject: [PATCH 11/44] improved workflow --- .github/workflows/{CI.yml => ci.yml} | 49 +++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 9 deletions(-) rename .github/workflows/{CI.yml => ci.yml} (64%) diff --git a/.github/workflows/CI.yml b/.github/workflows/ci.yml similarity index 64% rename from .github/workflows/CI.yml rename to .github/workflows/ci.yml index 3bd5c86e..e3b05634 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,7 @@ on: push: branches: - master + - dev pull_request: workflow_dispatch: @@ -12,17 +13,13 @@ concurrency: cancel-in-progress: true jobs: - ci: + lint: timeout-minutes: 10 strategy: fail-fast: false - matrix: - os: [ubuntu-latest, windows-latest] - python-version: ['3.10', '3.12'] - pandas: ['without', 'with'] - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -32,7 +29,7 @@ jobs: - uses: actions/setup-python@v5 with: - python-version: ${{ matrix.python-version }} + python-version: "3.12" cache: poetry - name: poetry check @@ -42,10 +39,9 @@ jobs: run: > poetry install --sync - --with github --without docs --without debug - --${{ matrix.pandas }} pandas + --with pandas - name: codespell run: poetry run codespell . @@ -56,5 +52,40 @@ jobs: - name: pyright run: poetry run pyright + test: + timeout-minutes: 10 + + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + python-version: ["3.10", "3.12"] + pandas: ["without", "with"] + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v4 + + - name: install poetry + run: pipx install poetry + + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: poetry + + - name: poetry check + run: poetry check + + - name: poetry install + run: > + poetry install + --sync + --with github + --without docs + --without debug + --${{ matrix.pandas }} pandas + - name: pytest run: poetry run pytest From 5681789d48b3f112390b3c99331b4234073c303c Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 26 Mar 2024 22:30:09 +0100 Subject: [PATCH 12/44] update dev dependencies --- poetry.lock | 255 +++++++++++++++++++++++++------------------------ pyproject.toml | 14 +-- 2 files changed, 135 insertions(+), 134 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6e096616..1b9a21cd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "appnope" @@ -291,13 +291,13 @@ files = [ [[package]] name = "comm" -version = "0.2.1" +version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.8" files = [ - {file = "comm-0.2.1-py3-none-any.whl", hash = "sha256:87928485c0dfc0e7976fd89fc1e187023cf587e7c353e4a9b417555b44adf021"}, - {file = "comm-0.2.1.tar.gz", hash = "sha256:0bc91edae1344d39d3661dcbc36937181fdaddb304790458f8b044dbc064b89a"}, + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, ] [package.dependencies] @@ -456,53 +456,53 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fonttools" -version = "4.49.0" +version = "4.50.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, - {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, - {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, - {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, - {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, - {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, - {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, - {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, - {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, - {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, - {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, - {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, - {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, + {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effd303fb422f8ce06543a36ca69148471144c534cc25f30e5be752bc4f46736"}, + {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7913992ab836f621d06aabac118fc258b9947a775a607e1a737eb3a91c360335"}, + {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0a1c5bd2f63da4043b63888534b52c5a1fd7ae187c8ffc64cbb7ae475b9dab"}, + {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40fc98540fa5360e7ecf2c56ddf3c6e7dd04929543618fd7b5cc76e66390562"}, + {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fff65fbb7afe137bac3113827855e0204482727bddd00a806034ab0d3951d0d"}, + {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1aeae3dd2ee719074a9372c89ad94f7c581903306d76befdaca2a559f802472"}, + {file = "fonttools-4.50.0-cp310-cp310-win32.whl", hash = "sha256:e9623afa319405da33b43c85cceb0585a6f5d3a1d7c604daf4f7e1dd55c03d1f"}, + {file = "fonttools-4.50.0-cp310-cp310-win_amd64.whl", hash = "sha256:778c5f43e7e654ef7fe0605e80894930bc3a7772e2f496238e57218610140f54"}, + {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3dfb102e7f63b78c832e4539969167ffcc0375b013080e6472350965a5fe8048"}, + {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e58fe34cb379ba3d01d5d319d67dd3ce7ca9a47ad044ea2b22635cd2d1247fc"}, + {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c673ab40d15a442a4e6eb09bf007c1dda47c84ac1e2eecbdf359adacb799c24"}, + {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b3ac35cdcd1a4c90c23a5200212c1bb74fa05833cc7c14291d7043a52ca2aaa"}, + {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8844e7a2c5f7ecf977e82eb6b3014f025c8b454e046d941ece05b768be5847ae"}, + {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f849bd3c5c2249b49c98eca5aaebb920d2bfd92b3c69e84ca9bddf133e9f83f0"}, + {file = "fonttools-4.50.0-cp311-cp311-win32.whl", hash = "sha256:39293ff231b36b035575e81c14626dfc14407a20de5262f9596c2cbb199c3625"}, + {file = "fonttools-4.50.0-cp311-cp311-win_amd64.whl", hash = "sha256:c33d5023523b44d3481624f840c8646656a1def7630ca562f222eb3ead16c438"}, + {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b4a886a6dbe60100ba1cd24de962f8cd18139bd32808da80de1fa9f9f27bf1dc"}, + {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b2ca1837bfbe5eafa11313dbc7edada79052709a1fffa10cea691210af4aa1fa"}, + {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0493dd97ac8977e48ffc1476b932b37c847cbb87fd68673dee5182004906828"}, + {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77844e2f1b0889120b6c222fc49b2b75c3d88b930615e98893b899b9352a27ea"}, + {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3566bfb8c55ed9100afe1ba6f0f12265cd63a1387b9661eb6031a1578a28bad1"}, + {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:35e10ddbc129cf61775d58a14f2d44121178d89874d32cae1eac722e687d9019"}, + {file = "fonttools-4.50.0-cp312-cp312-win32.whl", hash = "sha256:cc8140baf9fa8f9b903f2b393a6c413a220fa990264b215bf48484f3d0bf8710"}, + {file = "fonttools-4.50.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ccc85fd96373ab73c59833b824d7a73846670a0cb1f3afbaee2b2c426a8f931"}, + {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e270a406219af37581d96c810172001ec536e29e5593aa40d4c01cca3e145aa6"}, + {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac2463de667233372e9e1c7e9de3d914b708437ef52a3199fdbf5a60184f190c"}, + {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47abd6669195abe87c22750dbcd366dc3a0648f1b7c93c2baa97429c4dc1506e"}, + {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:074841375e2e3d559aecc86e1224caf78e8b8417bb391e7d2506412538f21adc"}, + {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0743fd2191ad7ab43d78cd747215b12033ddee24fa1e088605a3efe80d6984de"}, + {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3d7080cce7be5ed65bee3496f09f79a82865a514863197ff4d4d177389e981b0"}, + {file = "fonttools-4.50.0-cp38-cp38-win32.whl", hash = "sha256:a467ba4e2eadc1d5cc1a11d355abb945f680473fbe30d15617e104c81f483045"}, + {file = "fonttools-4.50.0-cp38-cp38-win_amd64.whl", hash = "sha256:f77e048f805e00870659d6318fd89ef28ca4ee16a22b4c5e1905b735495fc422"}, + {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b6245eafd553c4e9a0708e93be51392bd2288c773523892fbd616d33fd2fda59"}, + {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a4062cc7e8de26f1603323ef3ae2171c9d29c8a9f5e067d555a2813cd5c7a7e0"}, + {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34692850dfd64ba06af61e5791a441f664cb7d21e7b544e8f385718430e8f8e4"}, + {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678dd95f26a67e02c50dcb5bf250f95231d455642afbc65a3b0bcdacd4e4dd38"}, + {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f2ce7b0b295fe64ac0a85aef46a0f2614995774bd7bc643b85679c0283287f9"}, + {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d346f4dc2221bfb7ab652d1e37d327578434ce559baf7113b0f55768437fe6a0"}, + {file = "fonttools-4.50.0-cp39-cp39-win32.whl", hash = "sha256:a51eeaf52ba3afd70bf489be20e52fdfafe6c03d652b02477c6ce23c995222f4"}, + {file = "fonttools-4.50.0-cp39-cp39-win_amd64.whl", hash = "sha256:8639be40d583e5d9da67795aa3eeeda0488fb577a1d42ae11a5036f18fb16d93"}, + {file = "fonttools-4.50.0-py3-none-any.whl", hash = "sha256:48fa36da06247aa8282766cfd63efff1bb24e55f020f29a335939ed3844d20d3"}, + {file = "fonttools-4.50.0.tar.gz", hash = "sha256:fa5cf61058c7dbb104c2ac4e782bf1b2016a8cf2f69de6e4dd6a865d2c969bb5"}, ] [package.extras] @@ -569,13 +569,13 @@ test = ["black", "coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre [[package]] name = "griffe" -version = "0.41.0" +version = "0.42.1" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.41.0-py3-none-any.whl", hash = "sha256:8aa7fc6eb00cb80af9c0198178c6b7110cb59fa2c5187bb13ea25eebbe4dd928"}, - {file = "griffe-0.41.0.tar.gz", hash = "sha256:850128c3198c18713eaf0a6cc8572e590a16b1965f72a4e871e66cf84740903f"}, + {file = "griffe-0.42.1-py3-none-any.whl", hash = "sha256:7e805e35617601355edcac0d3511cedc1ed0cb1f7645e2d336ae4b05bbae7b3b"}, + {file = "griffe-0.42.1.tar.gz", hash = "sha256:57046131384043ed078692b85d86b76568a686266cc036b9b56b704466f803ce"}, ] [package.dependencies] @@ -583,13 +583,13 @@ colorama = ">=0.4" [[package]] name = "hypothesis" -version = "6.98.13" +version = "6.99.13" description = "A library for property-based testing" optional = false python-versions = ">=3.8" files = [ - {file = "hypothesis-6.98.13-py3-none-any.whl", hash = "sha256:42ba2cc2d1fe04a65124fadfc6a305dbf62607aa9f8f94a10efadee9cfa1c4dd"}, - {file = "hypothesis-6.98.13.tar.gz", hash = "sha256:746b5316da2c7af4c3816c34af675909fcb1a6a0e5c7af5cfc36c450be2dca34"}, + {file = "hypothesis-6.99.13-py3-none-any.whl", hash = "sha256:b538df1d22365df84f94c38fb2d9c41a222373594c2a910cc8f4ddc68240a62f"}, + {file = "hypothesis-6.99.13.tar.gz", hash = "sha256:e425e8a3f1912e44f62ff3e2768dca19c79f46d43ec70fa56e96e2d7194ccd2d"}, ] [package.dependencies] @@ -599,9 +599,10 @@ numpy = {version = ">=1.17.3", optional = true, markers = "extra == \"numpy\""} sortedcontainers = ">=2.1.0,<3.0.0" [package.extras] -all = ["backports.zoneinfo (>=0.2.1)", "black (>=19.10b0)", "click (>=7.0)", "django (>=3.2)", "dpcontracts (>=0.4)", "lark (>=0.10.1)", "libcst (>=0.3.16)", "numpy (>=1.17.3)", "pandas (>=1.1)", "pytest (>=4.6)", "python-dateutil (>=1.4)", "pytz (>=2014.1)", "redis (>=3.0.0)", "rich (>=9.0.0)", "tzdata (>=2024.1)"] +all = ["backports.zoneinfo (>=0.2.1)", "black (>=19.10b0)", "click (>=7.0)", "crosshair-tool (>=0.0.53)", "django (>=3.2)", "dpcontracts (>=0.4)", "hypothesis-crosshair (>=0.0.2)", "lark (>=0.10.1)", "libcst (>=0.3.16)", "numpy (>=1.17.3)", "pandas (>=1.1)", "pytest (>=4.6)", "python-dateutil (>=1.4)", "pytz (>=2014.1)", "redis (>=3.0.0)", "rich (>=9.0.0)", "tzdata (>=2024.1)"] cli = ["black (>=19.10b0)", "click (>=7.0)", "rich (>=9.0.0)"] codemods = ["libcst (>=0.3.16)"] +crosshair = ["crosshair-tool (>=0.0.53)", "hypothesis-crosshair (>=0.0.2)"] dateutil = ["python-dateutil (>=1.4)"] django = ["django (>=3.2)"] dpcontracts = ["dpcontracts (>=0.4)"] @@ -671,13 +672,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.22.1" +version = "8.22.2" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.22.1-py3-none-any.whl", hash = "sha256:869335e8cded62ffb6fac8928e5287a05433d6462e3ebaac25f4216474dd6bc4"}, - {file = "ipython-8.22.1.tar.gz", hash = "sha256:39c6f9efc079fb19bfb0f17eee903978fe9a290b1b82d68196c641cecb76ea22"}, + {file = "ipython-8.22.2-py3-none-any.whl", hash = "sha256:3c86f284c8f3d8f2b6c662f885c4889a91df7cd52056fd02b7d8d6195d7f56e9"}, + {file = "ipython-8.22.2.tar.gz", hash = "sha256:2dcaad9049f9056f1fef63514f176c7d41f930daa78d05b82a176202818f2c14"}, ] [package.dependencies] @@ -743,13 +744,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jupyter-client" -version = "8.6.0" +version = "8.6.1" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"}, - {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"}, + {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, + {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"}, ] [package.dependencies] @@ -765,13 +766,13 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt [[package]] name = "jupyter-core" -version = "5.7.1" +version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.7.1-py3-none-any.whl", hash = "sha256:c65c82126453a723a2804aa52409930434598fd9d35091d63dfb919d2b765bb7"}, - {file = "jupyter_core-5.7.1.tar.gz", hash = "sha256:de61a9d7fc71240f688b2fb5ab659fbb56979458dc66a71decd098e03c79e218"}, + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, ] [package.dependencies] @@ -781,7 +782,7 @@ traitlets = ">=5.3" [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] [[package]] name = "kiwisolver" @@ -898,13 +899,13 @@ files = [ [[package]] name = "markdown" -version = "3.5.2" +version = "3.6" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, - {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, + {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, + {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, ] [package.extras] @@ -1085,13 +1086,13 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-autorefs" -version = "1.0.0" +version = "1.0.1" description = "Automatically link across pages in MkDocs." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_autorefs-1.0.0-py3-none-any.whl", hash = "sha256:2b6d288f0582589d1be7c99ce4470c8e7c5077892014051ff0d4ff574a73dbe8"}, - {file = "mkdocs_autorefs-1.0.0.tar.gz", hash = "sha256:1b20db41cade632b07b7a73dee818977b52e869c9deb438f6f20e2896ff01859"}, + {file = "mkdocs_autorefs-1.0.1-py3-none-any.whl", hash = "sha256:aacdfae1ab197780fb7a2dac92ad8a3d8f7ca8049a9cbe56a4218cd52e8da570"}, + {file = "mkdocs_autorefs-1.0.1.tar.gz", hash = "sha256:f684edf847eced40b570b57846b15f0bf57fb93ac2c510450775dcf16accb971"}, ] [package.dependencies] @@ -1118,13 +1119,13 @@ pytz = "*" [[package]] name = "mkdocs-include-markdown-plugin" -version = "6.0.4" +version = "6.0.5" description = "Mkdocs Markdown includer plugin." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_include_markdown_plugin-6.0.4-py3-none-any.whl", hash = "sha256:e7b8b5ecc41d6a3e16969cff3725ec3a391b68e9dfe1a4b4e36a8508becda835"}, - {file = "mkdocs_include_markdown_plugin-6.0.4.tar.gz", hash = "sha256:523c9c3a1d6a517386dc11bf60b0c0c564af1071bb6de8d213106d54f752dcc1"}, + {file = "mkdocs_include_markdown_plugin-6.0.5-py3-none-any.whl", hash = "sha256:db41aa1937a618afa3497616f457d4e51d9123b13b2034bb15505ff9ce061f86"}, + {file = "mkdocs_include_markdown_plugin-6.0.5.tar.gz", hash = "sha256:ad10779cf0dc4ff180aaa0079163271877b3c2fd31e36d5579854fe1d4b0d1ae"}, ] [package.dependencies] @@ -1136,13 +1137,13 @@ cache = ["platformdirs"] [[package]] name = "mkdocs-material" -version = "9.5.11" +version = "9.5.15" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.11-py3-none-any.whl", hash = "sha256:788ee0f3e036dca2dc20298d65e480297d348a44c9d7b2ee05c5262983e66072"}, - {file = "mkdocs_material-9.5.11.tar.gz", hash = "sha256:7af7f8af0dea16175558f3fb9245d26c83a17199baa5f157755e63d7437bf971"}, + {file = "mkdocs_material-9.5.15-py3-none-any.whl", hash = "sha256:e5c96dec3d19491de49ca643fc1dbb92b278e43cdb816c775bc47db77d9b62fb"}, + {file = "mkdocs_material-9.5.15.tar.gz", hash = "sha256:39f03cca45e82bf54eb7456b5a18bd252eabfdd67f237a229471484a0a4d4635"}, ] [package.dependencies] @@ -1288,13 +1289,13 @@ files = [ [[package]] name = "packaging" -version = "23.2" +version = "24.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] @@ -1382,13 +1383,13 @@ xml = ["lxml (>=4.9.2)"] [[package]] name = "pandas-stubs" -version = "2.2.0.240218" +version = "2.2.1.240316" description = "Type annotations for pandas" optional = false python-versions = ">=3.9" files = [ - {file = "pandas_stubs-2.2.0.240218-py3-none-any.whl", hash = "sha256:e97478320add9b958391b15a56c5f1bf29da656d5b747d28bbe708454b3a1fe6"}, - {file = "pandas_stubs-2.2.0.240218.tar.gz", hash = "sha256:63138c12eec715d66d48611bdd922f31cd7c78bcadd19384c3bd61fd3720a11a"}, + {file = "pandas_stubs-2.2.1.240316-py3-none-any.whl", hash = "sha256:0126a26451a37cb893ea62357ca87ba3d181bd999ec8ba2ca5602e20207d6682"}, + {file = "pandas_stubs-2.2.1.240316.tar.gz", hash = "sha256:236a4f812fb6b1922e9607ff09e427f6d8540c421c9e5a40e3e4ddf7adac7f05"}, ] [package.dependencies] @@ -1645,13 +1646,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.7" +version = "10.7.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.7-py3-none-any.whl", hash = "sha256:6ca215bc57bc12bf32b414887a68b810637d039124ed9b2e5bd3325cbb2c050c"}, - {file = "pymdown_extensions-10.7.tar.gz", hash = "sha256:c0d64d5cf62566f59e6b2b690a4095c931107c250a8c8e1351c1de5f6b036deb"}, + {file = "pymdown_extensions-10.7.1-py3-none-any.whl", hash = "sha256:f5cc7000d7ff0d1ce9395d216017fa4df3dde800afb1fb72d1c7d3fd35e710f4"}, + {file = "pymdown_extensions-10.7.1.tar.gz", hash = "sha256:c70e146bdd83c744ffc766b4671999796aba18842b268510a329f7f64700d584"}, ] [package.dependencies] @@ -1663,13 +1664,13 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pyparsing" -version = "3.1.1" +version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" files = [ - {file = "pyparsing-3.1.1-py3-none-any.whl", hash = "sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb"}, - {file = "pyparsing-3.1.1.tar.gz", hash = "sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db"}, + {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, + {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, ] [package.extras] @@ -1677,13 +1678,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyright" -version = "1.1.351" +version = "1.1.355" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.351-py3-none-any.whl", hash = "sha256:83b44b25396ae20661fc5f133c3fce30928ff1296d4f2e5ff0bca5fcf03eb89d"}, - {file = "pyright-1.1.351.tar.gz", hash = "sha256:01124099714eebd7f6525d8cbfa350626b56dfaf771cfcd55c03e69f0f1efbbd"}, + {file = "pyright-1.1.355-py3-none-any.whl", hash = "sha256:bf30b6728fd68ae7d09c98292b67152858dd89738569836896df786e52b5fe48"}, + {file = "pyright-1.1.355.tar.gz", hash = "sha256:dca4104cd53d6484e6b1b50b7a239ad2d16d2ffd20030bcf3111b56f44c263bf"}, ] [package.dependencies] @@ -1695,13 +1696,13 @@ dev = ["twine (>=3.4.1)"] [[package]] name = "pytest" -version = "8.0.2" +version = "8.1.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" files = [ - {file = "pytest-8.0.2-py3-none-any.whl", hash = "sha256:edfaaef32ce5172d5466b5127b42e0d6d35ebbe4453f0e3505d96afd93f6b096"}, - {file = "pytest-8.0.2.tar.gz", hash = "sha256:d4051d623a2e0b7e51960ba963193b09ce6daeb9759a451844a21e4ddedfc1bd"}, + {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, + {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, ] [package.dependencies] @@ -1709,11 +1710,11 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=1.3.0,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +pluggy = ">=1.4,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-github-actions-annotate-failures" @@ -1731,13 +1732,13 @@ pytest = ">=4.0.0" [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -2080,28 +2081,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.2.2" +version = "0.3.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:0a9efb032855ffb3c21f6405751d5e147b0c6b631e3ca3f6b20f917572b97eb6"}, - {file = "ruff-0.2.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d450b7fbff85913f866a5384d8912710936e2b96da74541c82c1b458472ddb39"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecd46e3106850a5c26aee114e562c329f9a1fbe9e4821b008c4404f64ff9ce73"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e22676a5b875bd72acd3d11d5fa9075d3a5f53b877fe7b4793e4673499318ba"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1695700d1e25a99d28f7a1636d85bafcc5030bba9d0578c0781ba1790dbcf51c"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b0c232af3d0bd8f521806223723456ffebf8e323bd1e4e82b0befb20ba18388e"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f63d96494eeec2fc70d909393bcd76c69f35334cdbd9e20d089fb3f0640216ca"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a61ea0ff048e06de273b2e45bd72629f470f5da8f71daf09fe481278b175001"}, - {file = "ruff-0.2.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e1439c8f407e4f356470e54cdecdca1bd5439a0673792dbe34a2b0a551a2fe3"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:940de32dc8853eba0f67f7198b3e79bc6ba95c2edbfdfac2144c8235114d6726"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0c126da55c38dd917621552ab430213bdb3273bb10ddb67bc4b761989210eb6e"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3b65494f7e4bed2e74110dac1f0d17dc8e1f42faaa784e7c58a98e335ec83d7e"}, - {file = "ruff-0.2.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:1ec49be4fe6ddac0503833f3ed8930528e26d1e60ad35c2446da372d16651ce9"}, - {file = "ruff-0.2.2-py3-none-win32.whl", hash = "sha256:d920499b576f6c68295bc04e7b17b6544d9d05f196bb3aac4358792ef6f34325"}, - {file = "ruff-0.2.2-py3-none-win_amd64.whl", hash = "sha256:cc9a91ae137d687f43a44c900e5d95e9617cb37d4c989e462980ba27039d239d"}, - {file = "ruff-0.2.2-py3-none-win_arm64.whl", hash = "sha256:c9d15fc41e6054bfc7200478720570078f0b41c9ae4f010bcc16bd6f4d1aacdd"}, - {file = "ruff-0.2.2.tar.gz", hash = "sha256:e62ed7f36b3068a30ba39193a14274cd706bc486fad521276458022f7bccb31d"}, + {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4"}, + {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf133dd744f2470b347f602452a88e70dadfbe0fcfb5fd46e093d55da65f82f7"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:986f2377f7cf12efac1f515fc1a5b753c000ed1e0a6de96747cdf2da20a1b369"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fd98e85869603e65f554fdc5cddf0712e352fe6e61d29d5a6fe087ec82b76c"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64abeed785dad51801b423fa51840b1764b35d6c461ea8caef9cf9e5e5ab34d9"}, + {file = "ruff-0.3.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50"}, + {file = "ruff-0.3.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:98e98300056445ba2cc27d0b325fd044dc17fcc38e4e4d2c7711585bd0a958ed"}, + {file = "ruff-0.3.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488"}, + {file = "ruff-0.3.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bb0acfb921030d00070539c038cd24bb1df73a2981e9f55942514af8b17be94e"}, + {file = "ruff-0.3.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cf187a7e7098233d0d0c71175375c5162f880126c4c716fa28a8ac418dcf3378"}, + {file = "ruff-0.3.4-py3-none-win32.whl", hash = "sha256:af27ac187c0a331e8ef91d84bf1c3c6a5dea97e912a7560ac0cef25c526a4102"}, + {file = "ruff-0.3.4-py3-none-win_amd64.whl", hash = "sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6"}, + {file = "ruff-0.3.4-py3-none-win_arm64.whl", hash = "sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232"}, + {file = "ruff-0.3.4.tar.gz", hash = "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1"}, ] [[package]] @@ -2148,18 +2149,18 @@ test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", [[package]] name = "setuptools" -version = "69.1.1" +version = "69.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, - {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, + {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, + {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "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)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "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.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -2247,18 +2248,18 @@ files = [ [[package]] name = "traitlets" -version = "5.14.1" +version = "5.14.2" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, - {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, + {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, + {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.1)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "types-pytz" @@ -2382,4 +2383,4 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "50a74071b8d7d7e60de1dd59c0228db8aee77f4f7705a474b55293ca33b724f7" +content-hash = "3ab0942101c98b61f597f65a384f31fb1c14ed97c484c519fe59e037e86723ff" diff --git a/pyproject.toml b/pyproject.toml index 37e8a629..b61a6574 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,21 +41,21 @@ scipy = "^1.9.3" pandas = {version = ">=1.4,<3.0", optional = true} [tool.poetry.group.dev.dependencies] -pytest = "^8.0.2" -hypothesis = {version = "^6.98.13", extras = ["numpy"]} -pyright = "^1.1.351" -ruff = "^0.2.2" +pytest = "^8.1.1" +hypothesis = {version = "^6.99.13", extras = ["numpy"]} +pyright = "^1.1.355" +ruff = "^0.3.4" codespell = "^2.2.6" [tool.poetry.group.docs.dependencies] mkdocs = "^1.5.3" -mkdocs-material = "^9.5.11" -mkdocs-include-markdown-plugin = "^6.0.4" +mkdocs-material = "^9.5.15" +mkdocs-include-markdown-plugin = "^6.0.5" mkdocstrings = {extras = ["python"], version = "^0.24.1"} mkdocs-git-revision-date-localized-plugin = "^1.2.4" [tool.poetry.group.debug.dependencies] -ipython = "^8.22.1" +ipython = "^8.22.2" ipykernel = "^6.29.3" matplotlib = "^3.8.3" From a9f4c23ce05dc163ad49075234a33aa9e0aefe2d Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 3 Apr 2024 04:00:48 +0200 Subject: [PATCH 13/44] update lockfile --- poetry.lock | 400 +++++++++++++++++++++++++------------------------ pyproject.toml | 14 +- 2 files changed, 209 insertions(+), 205 deletions(-) diff --git a/poetry.lock b/poetry.lock index 1b9a21cd..ddd0d1c8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -308,64 +308,64 @@ test = ["pytest"] [[package]] name = "contourpy" -version = "1.2.0" +version = "1.2.1" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.9" files = [ - {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, - {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, - {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, - {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, - {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, - {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, - {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, - {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, - {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, - {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, - {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, + {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, + {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, + {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, + {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, + {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, + {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, + {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, + {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, + {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, ] [package.dependencies] -numpy = ">=1.20,<2.0" +numpy = ">=1.20" [package.extras] bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] @@ -552,20 +552,21 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.42" +version = "3.1.43" description = "GitPython is a Python library used to interact with Git repositories" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.42-py3-none-any.whl", hash = "sha256:1bf9cd7c9e7255f77778ea54359e54ac22a72a5b51288c457c881057b7bb9ecd"}, - {file = "GitPython-3.1.42.tar.gz", hash = "sha256:2d99869e0fef71a73cbd242528105af1d6c1b108c60dfabd994bf292f76c3ceb"}, + {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"}, + {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"}, ] [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 (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar"] +doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] +test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] [[package]] name = "griffe" @@ -583,13 +584,13 @@ colorama = ">=0.4" [[package]] name = "hypothesis" -version = "6.99.13" +version = "6.100.0" description = "A library for property-based testing" optional = false python-versions = ">=3.8" files = [ - {file = "hypothesis-6.99.13-py3-none-any.whl", hash = "sha256:b538df1d22365df84f94c38fb2d9c41a222373594c2a910cc8f4ddc68240a62f"}, - {file = "hypothesis-6.99.13.tar.gz", hash = "sha256:e425e8a3f1912e44f62ff3e2768dca19c79f46d43ec70fa56e96e2d7194ccd2d"}, + {file = "hypothesis-6.100.0-py3-none-any.whl", hash = "sha256:ceaeb7c051085dbec37f2fc4dca524b6304472ff1887fed53b3d84705507c10e"}, + {file = "hypothesis-6.100.0.tar.gz", hash = "sha256:1841f6b5083844cd4b66965e44a17c0dc8fe8e9c6370c1f7b8d50647fcb2efd3"}, ] [package.dependencies] @@ -599,10 +600,10 @@ numpy = {version = ">=1.17.3", optional = true, markers = "extra == \"numpy\""} sortedcontainers = ">=2.1.0,<3.0.0" [package.extras] -all = ["backports.zoneinfo (>=0.2.1)", "black (>=19.10b0)", "click (>=7.0)", "crosshair-tool (>=0.0.53)", "django (>=3.2)", "dpcontracts (>=0.4)", "hypothesis-crosshair (>=0.0.2)", "lark (>=0.10.1)", "libcst (>=0.3.16)", "numpy (>=1.17.3)", "pandas (>=1.1)", "pytest (>=4.6)", "python-dateutil (>=1.4)", "pytz (>=2014.1)", "redis (>=3.0.0)", "rich (>=9.0.0)", "tzdata (>=2024.1)"] +all = ["backports.zoneinfo (>=0.2.1)", "black (>=19.10b0)", "click (>=7.0)", "crosshair-tool (>=0.0.54)", "django (>=3.2)", "dpcontracts (>=0.4)", "hypothesis-crosshair (>=0.0.2)", "lark (>=0.10.1)", "libcst (>=0.3.16)", "numpy (>=1.17.3)", "pandas (>=1.1)", "pytest (>=4.6)", "python-dateutil (>=1.4)", "pytz (>=2014.1)", "redis (>=3.0.0)", "rich (>=9.0.0)", "tzdata (>=2024.1)"] cli = ["black (>=19.10b0)", "click (>=7.0)", "rich (>=9.0.0)"] codemods = ["libcst (>=0.3.16)"] -crosshair = ["crosshair-tool (>=0.0.53)", "hypothesis-crosshair (>=0.0.2)"] +crosshair = ["crosshair-tool (>=0.0.54)", "hypothesis-crosshair (>=0.0.2)"] dateutil = ["python-dateutil (>=1.4)"] django = ["django (>=3.2)"] dpcontracts = ["dpcontracts (>=0.4)"] @@ -639,13 +640,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.3" +version = "6.29.4" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"}, - {file = "ipykernel-6.29.3.tar.gz", hash = "sha256:e14c250d1f9ea3989490225cc1a542781b095a18a19447fcf2b5eaf7d0ac5bd2"}, + {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, + {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, ] [package.dependencies] @@ -672,13 +673,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.22.2" +version = "8.23.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" files = [ - {file = "ipython-8.22.2-py3-none-any.whl", hash = "sha256:3c86f284c8f3d8f2b6c662f885c4889a91df7cd52056fd02b7d8d6195d7f56e9"}, - {file = "ipython-8.22.2.tar.gz", hash = "sha256:2dcaad9049f9056f1fef63514f176c7d41f930daa78d05b82a176202818f2c14"}, + {file = "ipython-8.23.0-py3-none-any.whl", hash = "sha256:07232af52a5ba146dc3372c7bf52a0f890a23edf38d77caef8d53f9cdc2584c1"}, + {file = "ipython-8.23.0.tar.gz", hash = "sha256:7468edaf4f6de3e1b912e57f66c241e6fd3c7099f2ec2136e239e142e800274d"}, ] [package.dependencies] @@ -692,12 +693,14 @@ prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5.13.0" +typing-extensions = {version = "*", markers = "python_version < \"3.12\""} [package.extras] -all = ["ipython[black,doc,kernel,nbconvert,nbformat,notebook,parallel,qtconsole,terminal]", "ipython[test,test-extra]"] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] black = ["black"] doc = ["docrepr", "exceptiongroup", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "stack-data", "typing-extensions"] kernel = ["ipykernel"] +matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] @@ -1137,13 +1140,13 @@ cache = ["platformdirs"] [[package]] name = "mkdocs-material" -version = "9.5.15" +version = "9.5.17" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.15-py3-none-any.whl", hash = "sha256:e5c96dec3d19491de49ca643fc1dbb92b278e43cdb816c775bc47db77d9b62fb"}, - {file = "mkdocs_material-9.5.15.tar.gz", hash = "sha256:39f03cca45e82bf54eb7456b5a18bd252eabfdd67f237a229471484a0a4d4635"}, + {file = "mkdocs_material-9.5.17-py3-none-any.whl", hash = "sha256:14a2a60119a785e70e765dd033e6211367aca9fc70230e577c1cf6a326949571"}, + {file = "mkdocs_material-9.5.17.tar.gz", hash = "sha256:06ae1275a72db1989cf6209de9e9ecdfbcfdbc24c58353877b2bb927dbe413e4"}, ] [package.dependencies] @@ -1177,13 +1180,13 @@ files = [ [[package]] name = "mkdocstrings" -version = "0.24.1" +version = "0.24.2" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocstrings-0.24.1-py3-none-any.whl", hash = "sha256:b4206f9a2ca8a648e222d5a0ca1d36ba7dee53c88732818de183b536f9042b5d"}, - {file = "mkdocstrings-0.24.1.tar.gz", hash = "sha256:cc83f9a1c8724fc1be3c2fa071dd73d91ce902ef6a79710249ec8d0ee1064401"}, + {file = "mkdocstrings-0.24.2-py3-none-any.whl", hash = "sha256:61440b77542170238099a7d87882c3417897771950e3aafe6e22abff3d1c51fb"}, + {file = "mkdocstrings-0.24.2.tar.gz", hash = "sha256:b91b9cdd9490ef2e8957000bff1d34a4b308b9cd57b10f26169f085def4c6a92"}, ] [package.dependencies] @@ -1204,18 +1207,18 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.8.0" +version = "1.9.2" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocstrings_python-1.8.0-py3-none-any.whl", hash = "sha256:4209970cc90bec194568682a535848a8d8489516c6ed4adbe58bbc67b699ca9d"}, - {file = "mkdocstrings_python-1.8.0.tar.gz", hash = "sha256:1488bddf50ee42c07d9a488dddc197f8e8999c2899687043ec5dd1643d057192"}, + {file = "mkdocstrings_python-1.9.2-py3-none-any.whl", hash = "sha256:96d82f6424e08db6245e4a15ca95619f4ecd0ddd254c0aa590d4181814e16ee5"}, + {file = "mkdocstrings_python-1.9.2.tar.gz", hash = "sha256:8546a103c9b22e1778c72c887696acc39a6635fedde3c912ce00f967518a8847"}, ] [package.dependencies] griffe = ">=0.37" -mkdocstrings = ">=0.20" +mkdocstrings = ">=0.24.2" [[package]] name = "nest-asyncio" @@ -1438,79 +1441,80 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "10.2.0" +version = "10.3.0" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.8" files = [ - {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, - {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, - {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, - {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, - {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, - {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, - {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, - {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, - {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, - {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, - {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, - {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, - {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, - {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, - {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, - {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, - {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, - {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, ] [package.extras] @@ -1620,13 +1624,13 @@ tests = ["pytest"] [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] @@ -1678,13 +1682,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyright" -version = "1.1.355" +version = "1.1.356" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.355-py3-none-any.whl", hash = "sha256:bf30b6728fd68ae7d09c98292b67152858dd89738569836896df786e52b5fe48"}, - {file = "pyright-1.1.355.tar.gz", hash = "sha256:dca4104cd53d6484e6b1b50b7a239ad2d16d2ffd20030bcf3111b56f44c263bf"}, + {file = "pyright-1.1.356-py3-none-any.whl", hash = "sha256:a101b0f375f93d7082f9046cfaa7ba15b7cf8e1939ace45e984c351f6e8feb99"}, + {file = "pyright-1.1.356.tar.gz", hash = "sha256:f05b8b29d06b96ed4a0885dad5a31d9dff691ca12b2f658249f583d5f2754021"}, ] [package.dependencies] @@ -2081,71 +2085,71 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.3.4" +version = "0.3.5" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4"}, - {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf133dd744f2470b347f602452a88e70dadfbe0fcfb5fd46e093d55da65f82f7"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:986f2377f7cf12efac1f515fc1a5b753c000ed1e0a6de96747cdf2da20a1b369"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fd98e85869603e65f554fdc5cddf0712e352fe6e61d29d5a6fe087ec82b76c"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64abeed785dad51801b423fa51840b1764b35d6c461ea8caef9cf9e5e5ab34d9"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:98e98300056445ba2cc27d0b325fd044dc17fcc38e4e4d2c7711585bd0a958ed"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bb0acfb921030d00070539c038cd24bb1df73a2981e9f55942514af8b17be94e"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cf187a7e7098233d0d0c71175375c5162f880126c4c716fa28a8ac418dcf3378"}, - {file = "ruff-0.3.4-py3-none-win32.whl", hash = "sha256:af27ac187c0a331e8ef91d84bf1c3c6a5dea97e912a7560ac0cef25c526a4102"}, - {file = "ruff-0.3.4-py3-none-win_amd64.whl", hash = "sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6"}, - {file = "ruff-0.3.4-py3-none-win_arm64.whl", hash = "sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232"}, - {file = "ruff-0.3.4.tar.gz", hash = "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1"}, + {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:aef5bd3b89e657007e1be6b16553c8813b221ff6d92c7526b7e0227450981eac"}, + {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:89b1e92b3bd9fca249153a97d23f29bed3992cff414b222fcd361d763fc53f12"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e55771559c89272c3ebab23326dc23e7f813e492052391fe7950c1a5a139d89"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dabc62195bf54b8a7876add6e789caae0268f34582333cda340497c886111c39"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a05f3793ba25f194f395578579c546ca5d83e0195f992edc32e5907d142bfa3"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:dfd3504e881082959b4160ab02f7a205f0fadc0a9619cc481982b6837b2fd4c0"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87258e0d4b04046cf1d6cc1c56fadbf7a880cc3de1f7294938e923234cf9e498"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:712e71283fc7d9f95047ed5f793bc019b0b0a29849b14664a60fd66c23b96da1"}, + {file = "ruff-0.3.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a532a90b4a18d3f722c124c513ffb5e5eaff0cc4f6d3aa4bda38e691b8600c9f"}, + {file = "ruff-0.3.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:122de171a147c76ada00f76df533b54676f6e321e61bd8656ae54be326c10296"}, + {file = "ruff-0.3.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d80a6b18a6c3b6ed25b71b05eba183f37d9bc8b16ace9e3d700997f00b74660b"}, + {file = "ruff-0.3.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a7b6e63194c68bca8e71f81de30cfa6f58ff70393cf45aab4c20f158227d5936"}, + {file = "ruff-0.3.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a759d33a20c72f2dfa54dae6e85e1225b8e302e8ac655773aff22e542a300985"}, + {file = "ruff-0.3.5-py3-none-win32.whl", hash = "sha256:9d8605aa990045517c911726d21293ef4baa64f87265896e491a05461cae078d"}, + {file = "ruff-0.3.5-py3-none-win_amd64.whl", hash = "sha256:dc56bb16a63c1303bd47563c60482a1512721053d93231cf7e9e1c6954395a0e"}, + {file = "ruff-0.3.5-py3-none-win_arm64.whl", hash = "sha256:faeeae9905446b975dcf6d4499dc93439b131f1443ee264055c5716dd947af55"}, + {file = "ruff-0.3.5.tar.gz", hash = "sha256:a067daaeb1dc2baf9b82a32dae67d154d95212080c80435eb052d95da647763d"}, ] [[package]] name = "scipy" -version = "1.12.0" +version = "1.13.0" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, - {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, - {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, - {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, - {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, - {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, - {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, - {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, - {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, - {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, - {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, + {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, + {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, + {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, + {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, + {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, + {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, + {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, + {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, + {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, ] [package.dependencies] -numpy = ">=1.22.4,<1.29.0" +numpy = ">=1.22.4,<2.3" [package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "setuptools" @@ -2383,4 +2387,4 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.13" -content-hash = "3ab0942101c98b61f597f65a384f31fb1c14ed97c484c519fe59e037e86723ff" +content-hash = "38a04a4506341dfe81ddf4d7c475ed865682623896f7e024782d0b0bba1aba12" diff --git a/pyproject.toml b/pyproject.toml index b61a6574..61a99bb0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,21 +42,21 @@ pandas = {version = ">=1.4,<3.0", optional = true} [tool.poetry.group.dev.dependencies] pytest = "^8.1.1" -hypothesis = {version = "^6.99.13", extras = ["numpy"]} -pyright = "^1.1.355" -ruff = "^0.3.4" +hypothesis = {version = "^6.100.0", extras = ["numpy"]} +pyright = "^1.1.356" +ruff = "^0.3.5" codespell = "^2.2.6" [tool.poetry.group.docs.dependencies] mkdocs = "^1.5.3" -mkdocs-material = "^9.5.15" +mkdocs-material = "^9.5.17" mkdocs-include-markdown-plugin = "^6.0.5" -mkdocstrings = {extras = ["python"], version = "^0.24.1"} +mkdocstrings = {version = "^0.24.2", extras = ["python"]} mkdocs-git-revision-date-localized-plugin = "^1.2.4" [tool.poetry.group.debug.dependencies] -ipython = "^8.22.2" -ipykernel = "^6.29.3" +ipython = "^8.23.0" +ipykernel = "^6.29.4" matplotlib = "^3.8.3" [tool.poetry.group.pandas.dependencies] From daea8de81a18134e52844842a53e139df4dbf1b1 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 3 Apr 2024 04:15:26 +0200 Subject: [PATCH 14/44] loosen python version restriction --- poetry.lock | 4 ++-- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index ddd0d1c8..0c1bb2ad 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2386,5 +2386,5 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" -python-versions = ">=3.10,<3.13" -content-hash = "38a04a4506341dfe81ddf4d7c475ed865682623896f7e024782d0b0bba1aba12" +python-versions = ">=3.10,<3.14" +content-hash = "54988b10572351e7db1d935fe25f212f8104fb14abc0181dd1b5aca0d9611e3b" diff --git a/pyproject.toml b/pyproject.toml index 61a99bb0..85a47a22 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ Documentation = "https://jorenham.github.io/Lmo/" "Bug Tracker" = "https://github.com/jorenham/Lmo/issues" [tool.poetry.dependencies] -python = ">=3.10,<3.13" +python = ">=3.10,<3.14" typing_extensions = {version = "^4.1", python = "<3.11"} # https://numpy.org/neps/nep-0029-deprecation_policy.html From d0a06d8ed9a9239a4f9a07673221e62262d886d2 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 3 Apr 2024 05:15:31 +0200 Subject: [PATCH 15/44] remove version upper bounds for numpy, scipy, and pandas --- poetry.lock | 2 +- pyproject.toml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 0c1bb2ad..238a1694 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2387,4 +2387,4 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "54988b10572351e7db1d935fe25f212f8104fb14abc0181dd1b5aca0d9611e3b" +content-hash = "14d8e34c9c7431ed2b417749dcafd59462f77429a3a6635aed75194d2520697b" diff --git a/pyproject.toml b/pyproject.toml index 85a47a22..3027daa0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,9 +36,9 @@ python = ">=3.10,<3.14" typing_extensions = {version = "^4.1", python = "<3.11"} # https://numpy.org/neps/nep-0029-deprecation_policy.html -numpy = "^1.23.4" -scipy = "^1.9.3" -pandas = {version = ">=1.4,<3.0", optional = true} +numpy = ">=1.23.5" +scipy = ">=1.9.3" +pandas = {version = ">=1.4", optional = true} [tool.poetry.group.dev.dependencies] pytest = "^8.1.1" From 05eff2d41c0e2dcdfb10a8ad0814831af85b50fa Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 3 Apr 2024 05:16:22 +0200 Subject: [PATCH 16/44] typo fix --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3027daa0..7513c027 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -119,7 +119,7 @@ ignore = [ # TODO: figure out how to do this conditionally "lmo/contrib/pandas.py", ] -stubPath = './typings' +stubPath = 'typings' venvPath = "." venv = ".venv" pythonVersion = "3.10" @@ -160,7 +160,7 @@ show-fixes = true force-exclude = true extend-exclude = [ ".github", - ".hyptohesis", + ".hypothesis", ".pytest_cache", ".ruff_cache", ".venv", From 18834d49331a9b9288d31c121d66e7790cd4ebc9 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 3 Apr 2024 05:24:06 +0200 Subject: [PATCH 17/44] cleanup the pytest config --- pyproject.toml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7513c027..2426c8d9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,11 +75,6 @@ pandas = ["pandas"] minversion = "8.0" addopts = [ "-ra", - "--exitfirst", - "--import-mode=importlib", - "--showlocals", - "--strict-markers", - "--strict-config", "--doctest-modules", "--doctest-ignore-import-errors", ] @@ -89,14 +84,7 @@ doctest_optionflags = [ "ELLIPSIS", ] xfail_strict = true -filterwarnings = [ - "error", - # https://github.com/dateutil/dateutil/issues/1314 - "ignore::DeprecationWarning:dateutil", - # https://github.com/pandas-dev/pandas/issues/54466 - "ignore:(?s).*Pyarrow will become a required dependency of pandas:DeprecationWarning", -] -log_cli_level = "info" +filterwarnings = ["error"] testpaths = ["tests", "lmo"] From 9071d6b41c009bb40823ac229002e8523c81c0d5 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 3 Apr 2024 05:26:21 +0200 Subject: [PATCH 18/44] bump katex to 0.16.10 --- mkdocs.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 6616678e..e050f478 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -109,16 +109,13 @@ markdown_extensions: extra_css: - styles/theme.css - - https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css + - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.css extra_javascript: - # - scripts/mathjax.js - # - https://polyfill.io/v3/polyfill.min.js?features=es6 - # - https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js - scripts/katex.js - - https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js - - https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js - - https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/copy-tex.min.js + - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.js + - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/auto-render.min.js + - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/copy-tex.min.js watch: From d73decd00d82ace8797d3657ae5fa01c22e108db Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 9 Apr 2024 19:22:39 +0200 Subject: [PATCH 19/44] update dev deps and add pre-commit --- .pre-commit-config.yaml | 27 ++++ poetry.lock | 272 ++++++++++++++++++++++++++-------------- pyproject.toml | 11 +- 3 files changed, 214 insertions(+), 96 deletions(-) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..46e43f9b --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,27 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.5.0 + hooks: + - id: check-yaml + - id: check-toml + + - repo: https://github.com/python-poetry/poetry + rev: 1.8.2 + hooks: + - id: poetry-check + + - repo: https://github.com/codespell-project/codespell + rev: v2.2.6 + hooks: + - id: codespell + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.3.5 + hooks: + - id: ruff + args: [--fix, --exit-non-zero-on-fix] + + - repo: https://github.com/RobertCraigie/pyright-python + rev: v1.1.357 + hooks: + - id: pyright diff --git a/poetry.lock b/poetry.lock index 238a1694..f4665db1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -148,6 +148,17 @@ files = [ [package.dependencies] pycparser = "*" +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + [[package]] name = "charset-normalizer" version = "3.3.2" @@ -426,6 +437,17 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +[[package]] +name = "distlib" +version = "0.3.8" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, + {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, +] + [[package]] name = "exceptiongroup" version = "1.2.0" @@ -454,55 +476,71 @@ files = [ [package.extras] tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] +[[package]] +name = "filelock" +version = "3.13.4" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"}, + {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +typing = ["typing-extensions (>=4.8)"] + [[package]] name = "fonttools" -version = "4.50.0" +version = "4.51.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effd303fb422f8ce06543a36ca69148471144c534cc25f30e5be752bc4f46736"}, - {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7913992ab836f621d06aabac118fc258b9947a775a607e1a737eb3a91c360335"}, - {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0a1c5bd2f63da4043b63888534b52c5a1fd7ae187c8ffc64cbb7ae475b9dab"}, - {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40fc98540fa5360e7ecf2c56ddf3c6e7dd04929543618fd7b5cc76e66390562"}, - {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fff65fbb7afe137bac3113827855e0204482727bddd00a806034ab0d3951d0d"}, - {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1aeae3dd2ee719074a9372c89ad94f7c581903306d76befdaca2a559f802472"}, - {file = "fonttools-4.50.0-cp310-cp310-win32.whl", hash = "sha256:e9623afa319405da33b43c85cceb0585a6f5d3a1d7c604daf4f7e1dd55c03d1f"}, - {file = "fonttools-4.50.0-cp310-cp310-win_amd64.whl", hash = "sha256:778c5f43e7e654ef7fe0605e80894930bc3a7772e2f496238e57218610140f54"}, - {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3dfb102e7f63b78c832e4539969167ffcc0375b013080e6472350965a5fe8048"}, - {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e58fe34cb379ba3d01d5d319d67dd3ce7ca9a47ad044ea2b22635cd2d1247fc"}, - {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c673ab40d15a442a4e6eb09bf007c1dda47c84ac1e2eecbdf359adacb799c24"}, - {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b3ac35cdcd1a4c90c23a5200212c1bb74fa05833cc7c14291d7043a52ca2aaa"}, - {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8844e7a2c5f7ecf977e82eb6b3014f025c8b454e046d941ece05b768be5847ae"}, - {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f849bd3c5c2249b49c98eca5aaebb920d2bfd92b3c69e84ca9bddf133e9f83f0"}, - {file = "fonttools-4.50.0-cp311-cp311-win32.whl", hash = "sha256:39293ff231b36b035575e81c14626dfc14407a20de5262f9596c2cbb199c3625"}, - {file = "fonttools-4.50.0-cp311-cp311-win_amd64.whl", hash = "sha256:c33d5023523b44d3481624f840c8646656a1def7630ca562f222eb3ead16c438"}, - {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b4a886a6dbe60100ba1cd24de962f8cd18139bd32808da80de1fa9f9f27bf1dc"}, - {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b2ca1837bfbe5eafa11313dbc7edada79052709a1fffa10cea691210af4aa1fa"}, - {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0493dd97ac8977e48ffc1476b932b37c847cbb87fd68673dee5182004906828"}, - {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77844e2f1b0889120b6c222fc49b2b75c3d88b930615e98893b899b9352a27ea"}, - {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3566bfb8c55ed9100afe1ba6f0f12265cd63a1387b9661eb6031a1578a28bad1"}, - {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:35e10ddbc129cf61775d58a14f2d44121178d89874d32cae1eac722e687d9019"}, - {file = "fonttools-4.50.0-cp312-cp312-win32.whl", hash = "sha256:cc8140baf9fa8f9b903f2b393a6c413a220fa990264b215bf48484f3d0bf8710"}, - {file = "fonttools-4.50.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ccc85fd96373ab73c59833b824d7a73846670a0cb1f3afbaee2b2c426a8f931"}, - {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e270a406219af37581d96c810172001ec536e29e5593aa40d4c01cca3e145aa6"}, - {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac2463de667233372e9e1c7e9de3d914b708437ef52a3199fdbf5a60184f190c"}, - {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47abd6669195abe87c22750dbcd366dc3a0648f1b7c93c2baa97429c4dc1506e"}, - {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:074841375e2e3d559aecc86e1224caf78e8b8417bb391e7d2506412538f21adc"}, - {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0743fd2191ad7ab43d78cd747215b12033ddee24fa1e088605a3efe80d6984de"}, - {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3d7080cce7be5ed65bee3496f09f79a82865a514863197ff4d4d177389e981b0"}, - {file = "fonttools-4.50.0-cp38-cp38-win32.whl", hash = "sha256:a467ba4e2eadc1d5cc1a11d355abb945f680473fbe30d15617e104c81f483045"}, - {file = "fonttools-4.50.0-cp38-cp38-win_amd64.whl", hash = "sha256:f77e048f805e00870659d6318fd89ef28ca4ee16a22b4c5e1905b735495fc422"}, - {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b6245eafd553c4e9a0708e93be51392bd2288c773523892fbd616d33fd2fda59"}, - {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a4062cc7e8de26f1603323ef3ae2171c9d29c8a9f5e067d555a2813cd5c7a7e0"}, - {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34692850dfd64ba06af61e5791a441f664cb7d21e7b544e8f385718430e8f8e4"}, - {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678dd95f26a67e02c50dcb5bf250f95231d455642afbc65a3b0bcdacd4e4dd38"}, - {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f2ce7b0b295fe64ac0a85aef46a0f2614995774bd7bc643b85679c0283287f9"}, - {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d346f4dc2221bfb7ab652d1e37d327578434ce559baf7113b0f55768437fe6a0"}, - {file = "fonttools-4.50.0-cp39-cp39-win32.whl", hash = "sha256:a51eeaf52ba3afd70bf489be20e52fdfafe6c03d652b02477c6ce23c995222f4"}, - {file = "fonttools-4.50.0-cp39-cp39-win_amd64.whl", hash = "sha256:8639be40d583e5d9da67795aa3eeeda0488fb577a1d42ae11a5036f18fb16d93"}, - {file = "fonttools-4.50.0-py3-none-any.whl", hash = "sha256:48fa36da06247aa8282766cfd63efff1bb24e55f020f29a335939ed3844d20d3"}, - {file = "fonttools-4.50.0.tar.gz", hash = "sha256:fa5cf61058c7dbb104c2ac4e782bf1b2016a8cf2f69de6e4dd6a865d2c969bb5"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, + {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, + {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, + {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, + {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, + {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, + {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, + {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, + {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, + {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, + {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, + {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, + {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, ] [package.extras] @@ -584,13 +622,13 @@ colorama = ">=0.4" [[package]] name = "hypothesis" -version = "6.100.0" +version = "6.100.1" description = "A library for property-based testing" optional = false python-versions = ">=3.8" files = [ - {file = "hypothesis-6.100.0-py3-none-any.whl", hash = "sha256:ceaeb7c051085dbec37f2fc4dca524b6304472ff1887fed53b3d84705507c10e"}, - {file = "hypothesis-6.100.0.tar.gz", hash = "sha256:1841f6b5083844cd4b66965e44a17c0dc8fe8e9c6370c1f7b8d50647fcb2efd3"}, + {file = "hypothesis-6.100.1-py3-none-any.whl", hash = "sha256:3dacf6ec90e8d14aaee02cde081ac9a17d5b70105e45e6ac822db72052c0195b"}, + {file = "hypothesis-6.100.1.tar.gz", hash = "sha256:ebff09d7fa4f1fb6a855a812baf17e578b4481b7b70ec6d96496210d1a4c6c35"}, ] [package.dependencies] @@ -616,6 +654,20 @@ pytz = ["pytz (>=2014.1)"] redis = ["redis (>=3.0.0)"] zoneinfo = ["backports.zoneinfo (>=0.2.1)", "tzdata (>=2024.1)"] +[[package]] +name = "identify" +version = "2.5.35" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"}, + {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"}, +] + +[package.extras] +license = ["ukkonen"] + [[package]] name = "idna" version = "3.6" @@ -986,39 +1038,39 @@ files = [ [[package]] name = "matplotlib" -version = "3.8.3" +version = "3.8.4" description = "Python plotting package" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.8.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cf60138ccc8004f117ab2a2bad513cc4d122e55864b4fe7adf4db20ca68a078f"}, - {file = "matplotlib-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f557156f7116be3340cdeef7f128fa99b0d5d287d5f41a16e169819dcf22357"}, - {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f386cf162b059809ecfac3bcc491a9ea17da69fa35c8ded8ad154cd4b933d5ec"}, - {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3c5f96f57b0369c288bf6f9b5274ba45787f7e0589a34d24bdbaf6d3344632f"}, - {file = "matplotlib-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:83e0f72e2c116ca7e571c57aa29b0fe697d4c6425c4e87c6e994159e0c008635"}, - {file = "matplotlib-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c5c8290074ba31a41db1dc332dc2b62def469ff33766cbe325d32a3ee291aea"}, - {file = "matplotlib-3.8.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5184e07c7e1d6d1481862ee361905b7059f7fe065fc837f7c3dc11eeb3f2f900"}, - {file = "matplotlib-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7e7e0993d0758933b1a241a432b42c2db22dfa37d4108342ab4afb9557cbe3e"}, - {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b36ad07eac9740fc76c2aa16edf94e50b297d6eb4c081e3add863de4bb19a7"}, - {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c42dae72a62f14982f1474f7e5c9959fc4bc70c9de11cc5244c6e766200ba65"}, - {file = "matplotlib-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf5932eee0d428192c40b7eac1399d608f5d995f975cdb9d1e6b48539a5ad8d0"}, - {file = "matplotlib-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:40321634e3a05ed02abf7c7b47a50be50b53ef3eaa3a573847431a545585b407"}, - {file = "matplotlib-3.8.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09074f8057917d17ab52c242fdf4916f30e99959c1908958b1fc6032e2d0f6d4"}, - {file = "matplotlib-3.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5745f6d0fb5acfabbb2790318db03809a253096e98c91b9a31969df28ee604aa"}, - {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97653d869a71721b639714b42d87cda4cfee0ee74b47c569e4874c7590c55c5"}, - {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:242489efdb75b690c9c2e70bb5c6550727058c8a614e4c7716f363c27e10bba1"}, - {file = "matplotlib-3.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:83c0653c64b73926730bd9ea14aa0f50f202ba187c307a881673bad4985967b7"}, - {file = "matplotlib-3.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:ef6c1025a570354297d6c15f7d0f296d95f88bd3850066b7f1e7b4f2f4c13a39"}, - {file = "matplotlib-3.8.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c4af3f7317f8a1009bbb2d0bf23dfaba859eb7dd4ccbd604eba146dccaaaf0a4"}, - {file = "matplotlib-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c6e00a65d017d26009bac6808f637b75ceade3e1ff91a138576f6b3065eeeba"}, - {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7b49ab49a3bea17802df6872f8d44f664ba8f9be0632a60c99b20b6db2165b7"}, - {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6728dde0a3997396b053602dbd907a9bd64ec7d5cf99e728b404083698d3ca01"}, - {file = "matplotlib-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:813925d08fb86aba139f2d31864928d67511f64e5945ca909ad5bc09a96189bb"}, - {file = "matplotlib-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:cd3a0c2be76f4e7be03d34a14d49ded6acf22ef61f88da600a18a5cd8b3c5f3c"}, - {file = "matplotlib-3.8.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fa93695d5c08544f4a0dfd0965f378e7afc410d8672816aff1e81be1f45dbf2e"}, - {file = "matplotlib-3.8.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9764df0e8778f06414b9d281a75235c1e85071f64bb5d71564b97c1306a2afc"}, - {file = "matplotlib-3.8.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5e431a09e6fab4012b01fc155db0ce6dccacdbabe8198197f523a4ef4805eb26"}, - {file = "matplotlib-3.8.3.tar.gz", hash = "sha256:7b416239e9ae38be54b028abbf9048aff5054a9aba5416bef0bd17f9162ce161"}, + {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, + {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, + {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10"}, + {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0"}, + {file = "matplotlib-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef"}, + {file = "matplotlib-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338"}, + {file = "matplotlib-3.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661"}, + {file = "matplotlib-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c"}, + {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa"}, + {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71"}, + {file = "matplotlib-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b"}, + {file = "matplotlib-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae"}, + {file = "matplotlib-3.8.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616"}, + {file = "matplotlib-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732"}, + {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb"}, + {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30"}, + {file = "matplotlib-3.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25"}, + {file = "matplotlib-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a"}, + {file = "matplotlib-3.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6"}, + {file = "matplotlib-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67"}, + {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"}, + {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9"}, + {file = "matplotlib-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54"}, + {file = "matplotlib-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94"}, + {file = "matplotlib-3.8.4.tar.gz", hash = "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea"}, ] [package.dependencies] @@ -1026,7 +1078,7 @@ contourpy = ">=1.0.1" cycler = ">=0.10" fonttools = ">=4.22.0" kiwisolver = ">=1.3.1" -numpy = ">=1.21,<2" +numpy = ">=1.21" packaging = ">=20.0" pillow = ">=8" pyparsing = ">=2.3.1" @@ -1180,13 +1232,13 @@ files = [ [[package]] name = "mkdocstrings" -version = "0.24.2" +version = "0.24.3" description = "Automatic documentation from sources, for MkDocs." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocstrings-0.24.2-py3-none-any.whl", hash = "sha256:61440b77542170238099a7d87882c3417897771950e3aafe6e22abff3d1c51fb"}, - {file = "mkdocstrings-0.24.2.tar.gz", hash = "sha256:b91b9cdd9490ef2e8957000bff1d34a4b308b9cd57b10f26169f085def4c6a92"}, + {file = "mkdocstrings-0.24.3-py3-none-any.whl", hash = "sha256:5c9cf2a32958cd161d5428699b79c8b0988856b0d4a8c5baf8395fc1bf4087c3"}, + {file = "mkdocstrings-0.24.3.tar.gz", hash = "sha256:f327b234eb8d2551a306735436e157d0a22d45f79963c60a8b585d5f7a94c1d2"}, ] [package.dependencies] @@ -1401,18 +1453,18 @@ types-pytz = ">=2022.1.1" [[package]] name = "parso" -version = "0.8.3" +version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, ] [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] [[package]] name = "pathspec" @@ -1555,6 +1607,24 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "pre-commit" +version = "3.7.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.9" +files = [ + {file = "pre_commit-3.7.0-py2.py3-none-any.whl", hash = "sha256:5eae9e10c2b5ac51577c3452ec0a490455c45a0533f7960f993a0d01e59decab"}, + {file = "pre_commit-3.7.0.tar.gz", hash = "sha256:e209d61b8acdcf742404408531f0c37d49d2c734fd7cff2d6076083d191cb060"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + [[package]] name = "prompt-toolkit" version = "3.0.43" @@ -1682,13 +1752,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyright" -version = "1.1.356" +version = "1.1.357" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.356-py3-none-any.whl", hash = "sha256:a101b0f375f93d7082f9046cfaa7ba15b7cf8e1939ace45e984c351f6e8feb99"}, - {file = "pyright-1.1.356.tar.gz", hash = "sha256:f05b8b29d06b96ed4a0885dad5a31d9dff691ca12b2f658249f583d5f2754021"}, + {file = "pyright-1.1.357-py3-none-any.whl", hash = "sha256:1cf29ee38e4928131895cd8e90eef37b5b77e2ed72a14e6e8e2405266f5f0aca"}, + {file = "pyright-1.1.357.tar.gz", hash = "sha256:7c66261116c78c5fa9629134fe85c54cc5302ab73e376be4b0a99d89c80a9403"}, ] [package.dependencies] @@ -2278,13 +2348,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] @@ -2315,6 +2385,26 @@ h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "virtualenv" +version = "20.25.1" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.25.1-py3-none-any.whl", hash = "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a"}, + {file = "virtualenv-20.25.1.tar.gz", hash = "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + [[package]] name = "watchdog" version = "4.0.0" @@ -2387,4 +2477,4 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "14d8e34c9c7431ed2b417749dcafd59462f77429a3a6635aed75194d2520697b" +content-hash = "4a9d0f66c6a7755264817c2ff059d2206b03b3345fbf4e60b936f0df22c1d66c" diff --git a/pyproject.toml b/pyproject.toml index 2426c8d9..7f3acb55 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,23 +41,24 @@ scipy = ">=1.9.3" pandas = {version = ">=1.4", optional = true} [tool.poetry.group.dev.dependencies] +codespell = "^2.2.6" +hypothesis = {version = "^6.100.1", extras = ["numpy"]} +pre-commit = "^3.7.0" +pyright = "^1.1.357" pytest = "^8.1.1" -hypothesis = {version = "^6.100.0", extras = ["numpy"]} -pyright = "^1.1.356" ruff = "^0.3.5" -codespell = "^2.2.6" [tool.poetry.group.docs.dependencies] mkdocs = "^1.5.3" mkdocs-material = "^9.5.17" mkdocs-include-markdown-plugin = "^6.0.5" -mkdocstrings = {version = "^0.24.2", extras = ["python"]} +mkdocstrings = {version = "^0.24.3", extras = ["python"]} mkdocs-git-revision-date-localized-plugin = "^1.2.4" [tool.poetry.group.debug.dependencies] ipython = "^8.23.0" ipykernel = "^6.29.4" -matplotlib = "^3.8.3" +matplotlib = "^3.8.4" [tool.poetry.group.pandas.dependencies] pandas = ">=1.4" From c2a9c3a18b1ea63f43af06807ab9a60410f6b9b8 Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 9 Apr 2024 20:09:32 +0200 Subject: [PATCH 20/44] added whole lot of pre-commit hooks --- .pre-commit-config.yaml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 46e43f9b..111ac61e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,8 +2,24 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - - id: check-yaml + - id: check-added-large-files + - id: check-ast + - id: check-case-conflict + - id: check-merge-conflict + - id: check-shebang-scripts-are-executable + - id: check-symlinks - id: check-toml + - id: check-vcs-permalinks + - id: check-yaml + - id: destroyed-symlinks + - id: detect-private-key + - id: fix-byte-order-marker + - id: forbid-submodules + - id: name-tests-test + args: [--pytest-test-first] + - id: no-commit-to-branch + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] - repo: https://github.com/python-poetry/poetry rev: 1.8.2 From 77293bc7506488c6babf74c24f89d400cc651b77 Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 9 Apr 2024 20:11:04 +0200 Subject: [PATCH 21/44] updated contributing.md --- docs/contributing.md | 51 ++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/docs/contributing.md b/docs/contributing.md index 69364c9e..1e2d2b70 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -10,33 +10,52 @@ When reporting a bug, make sure to include the versions of `lmo`, `python`, `numpy` and `scipy` you are using, and provide a **reproducible** example of the bug. -## Development +## Environment setup Ensure you have [poetry](https://python-poetry.org/docs/#installation) -installed, then clone your fork, and install with +installed. +It can help to use Lmo's lowest-supported Python version, so that you don't +accidentally use those bleeding-edge Python features that you shouldn't, e.g. + +```bash +poetry env use python3.10 +``` + +Now you can install the dev dependencies using ```bash poetry install --sync ``` -It can help to use Lmo's lowest-supported Python version, so that you don't -accidentally use those bleeding-edge Python features that you shouldn't, -`poetry env use python3.x` +### pre-commit + +Lmo uses [pre-commit](https://pre-commit.com/) to ensure that the code is +formatted and typed correctly when committing the changes. -Now you can go ahead and do your thing. -And don't forget the type annotations, add tests, and to lint it all. +```bash +poetry run pre-commit install +``` -If you're a 10x developer that doesn't wait on CI workflows, you can use the -following 1337 shellscript (keep in mind that the CI runs this on all supported -Python versions): +It can also be manually run: ```bash -poetry run codespell check lmo -poetry run ruff check lmo -poetry run pyright -poetry run py.test +poetry run pre-commit --all-files ``` +### Testing + +Lmo uses [pytest](https://docs.pytest.org/en/stable/) and +[hypothesis](https://hypothesis.readthedocs.io/en/latest/) as testing +framework. + +The tests can be run using + +```bash +poetry run pytest +``` + +## Documentation + If your change involves documentation updates, you can conjure up a live preview: @@ -44,5 +63,9 @@ preview: poetry run mkdocs serve ``` +This will make the site available at `http://127.0.0.1:8000/`. +It automatically reloads when changes are made to the source code or the +documentation. + But don't worry about building the docs, or bumping the version; Lmo's personal assistant will do that on release. From 6190e7fe7580a73632c07568b358743b86f0a28e Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 9 Apr 2024 20:28:32 +0200 Subject: [PATCH 22/44] pre-commit codespell add tomli dep for Date: Tue, 9 Apr 2024 20:29:03 +0200 Subject: [PATCH 23/44] some project metadata tweaking --- poetry.lock | 2 +- pyproject.toml | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index f4665db1..bf47c08f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2477,4 +2477,4 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "4a9d0f66c6a7755264817c2ff059d2206b03b3345fbf4e60b936f0df22c1d66c" +content-hash = "8c83d8b94e3f88576d10764dc79f96b4e9728c2d086f6906c81ccd1eea64b2b4" diff --git a/pyproject.toml b/pyproject.toml index 7f3acb55..80cc8ca4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "lmo" version = "0.13.0" -description = "L-Moments for robust statistics." +description = "L-Moments for robust statistics & inference." authors = ["Joren Hammudoglu "] readme = "README.md" license = "BSD-3-Clause" @@ -15,16 +15,20 @@ repository = "https://github.com/jorenham/Lmo/" classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", + "Intended Audience :: End Users/Desktop", + "Intended Audience :: Education", "Intended Audience :: Financial and Insurance Industry", "Intended Audience :: Science/Research", "Natural Language :: English", "Operating System :: OS Independent", + "Topic :: Office/Business :: Financial", "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Hydrology", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Physics", "Topic :: Utilities", "Typing :: Typed", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", ] [tool.poetry.urls] @@ -47,6 +51,7 @@ pre-commit = "^3.7.0" pyright = "^1.1.357" pytest = "^8.1.1" ruff = "^0.3.5" +tomli = {version = "^2.0.1", python = "<3.11"} [tool.poetry.group.docs.dependencies] mkdocs = "^1.5.3" @@ -67,7 +72,7 @@ pandas-stubs = ">=1.4" [tool.poetry.group.github] optional = true [tool.poetry.group.github.dependencies] -pytest-github-actions-annotate-failures = ">=0.2,<1.0" +pytest-github-actions-annotate-failures = ">=0.2.0,<1.0" [tool.poetry.extras] pandas = ["pandas"] From 84e94213ac8c2b876a30ff0f7234a1747c191167 Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 9 Apr 2024 20:54:14 +0200 Subject: [PATCH 24/44] add recommended vscode extensions --- .editorconfig | 2 +- .vscode/extensions.json | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 .vscode/extensions.json diff --git a/.editorconfig b/.editorconfig index 0f0d653a..a8bdd63f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,5 +12,5 @@ trim_trailing_whitespace = true max_line_length = 79 # 2 space indentation -[{*.json,*.yaml,*.yml,}] +[{*.json,*.jsonc,*.yaml,*.yml}] indent_size = 2 diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..cbb3cc6e --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,14 @@ +{ + "recommendations": [ + "charliermarsh.ruff", + "codezombiech.gitignore", + "davidanson.vscode-markdownlint", + "editorconfig.editorconfig", + "elagil.pre-commit-helper", + "ms-python.python", + "ms-python.vscode-pylance", + "serhioromano.vscode-gitflow", + "yzhang.markdown-all-in-one", + "zeshuaro.vscode-python-poetry" + ] +} From 1dec2cb9e5e9f7a4092870694763fd01665566ac Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 9 Apr 2024 20:56:05 +0200 Subject: [PATCH 25/44] cleanup gitignore --- .gitignore | 39 ++++----------------------------------- 1 file changed, 4 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index e5a8e0c0..24c3e6f3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,51 +4,20 @@ __pycache__/ *$py.class # Distribution / packaging -.Python build/ -develop-eggs/ dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ site/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST -# Unit test / coverage reports -.coverage -.coverage.* -.cache -coverage.xml -*.cover -*.py,cover -.hypothesis/ +# Cache +.hypothesis .pytest_cache/ -cover/ .ruff_cache/ -.pyright/ - -# Jupyter Notebook -.ipynb_checkpoints # Environments .env .venv/ -env/ venv/ -ENV/ -env.bak/ -venv.bak/ -# IDE configuration +# IntelliJ .idea/ -.vscode/ +.run/ From 26275f1e375de7d7fcb90b950d2dd958cbe2b4a7 Mon Sep 17 00:00:00 2001 From: jorenham Date: Tue, 9 Apr 2024 22:59:59 +0200 Subject: [PATCH 26/44] cleanup links in README.md --- README.md | 68 +++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index d17e6fa6..085a9839 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,26 @@ -jorenham/lmo - # Lmo - Trimmed L-moments and L-comoments -[![license](https://img.shields.io/github/license/jorenham/lmo?style=flat-square)](https://github.com/jorenham/lmo/blob/master/LICENSE?) -[![PyPI](https://img.shields.io/pypi/v/lmo?style=flat-square)](https://pypi.org/project/lmo/) -[![PyPI - Downloads](https://img.shields.io/pypi/dm/Lmo?style=flat-square)](https://pypi.org/project/lmo/) -[![versions](https://img.shields.io/pypi/pyversions/lmo?style=flat-square)](https://github.com/jorenham/lmo) -![GitHub Workflow Status (with branch)](https://img.shields.io/github/actions/workflow/status/jorenham/lmo/CI.yml?branch=master&style=flat-square) -![GitHub commit activity (branch)](https://img.shields.io/github/commit-activity/m/jorenham/Lmo?style=flat-square) -[![Checked with pyright](https://microsoft.github.io/pyright/img/pyright_badge.svg)](https://microsoft.github.io/pyright/) - - - -~~~ - -Is your tail too heavy? -Can't find a moment? -Are the swans black? -The distribution pathological? - -... then look no further: Lmo's got you covered! - -Uniform or multi-dimensional, Lmo can summarize it all with one quick glance! - -~~~ - -Unlike the legacy [moments](https://wikipedia.org/wiki/Moment_(mathematics)), -[L-moments](https://wikipedia.org/wiki/L-moment) **uniquely describe** a +![GitHub Workflow Status][IMG-GHA] +![license][IMG-BSD] +[![PyPI][IMG-PYPI]](https://pypi.org/project/Lmo/) +[![versions][IMG-VER]](https://github.com/jorenham/Lmo) +[![Ruff][IMG-RUFF]](https://github.com/astral-sh/ruff) +[![Checked with pyright][IMG-PYRIGHT]](https://microsoft.github.io/pyright/) + +[IMG-GHA]: https://img.shields.io/github/actions/workflow/status/jorenham/Lmo/CI.yml?branch=master +[IMG-BSD]: https://img.shields.io/github/license/jorenham/Lmo +[IMG-PYPI]: https://img.shields.io/pypi/v/Lmo +[IMG-VER]: https://img.shields.io/pypi/pyversions/Lmo +[IMG-RUFF]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json +[IMG-PYRIGHT]: https://microsoft.github.io/pyright/img/pyright_badge.svg + +Unlike the legacy +[product-moments](https://wikipedia.org/wiki/Moment_(mathematics)), the +[*L-moments*](https://wikipedia.org/wiki/L-moment) **uniquely describe** a probability distribution, and are more robust and efficient. + The "L" stands for Linear; it is a linear combination of order statistics. So Lmo is as fast as sorting your samples (in terms of time-complexity). @@ -98,17 +89,24 @@ pip install lmo These are automatically installed by your package manager, alongside `lmo`. -| Package | Minimum version | -| --- | --- | -| [Python](https://github.com/python/cpython) | `3.10` | -| [NumPy](https://github.com/numpy/numpy) | `1.22` | -| [SciPy](https://github.com/scipy/scipy) | `1.9` | +| Package | Minimum version | +| ------------ | ------------------- | +| [Python][PY] | `3.10` | +| [NumPy][NP] | See [NEP 29][NEP29] | +| [SciPy][SP] | `1.9` | + +[PY]: https://github.com/python/cpython +[NP]: https://github.com/numpy/numpy +[SP]: https://github.com/scipy/scipy +[NEP29]: https://numpy.org/neps/nep-0029-deprecation_policy.html#support-table ### Optional dependencies -| Package | Minimum version | Notes -| --- | --- | --- | -| [Pandas](https://github.com/pandas-dev/pandas) | `1.4` | Lmo extends `pd.Series` and `pd.DataFrame` with convenient methods, e.g. `df.l_scale(trim=1)`. Install as `pip install lmo[pandas]` to ensure compatibility. | +| Package | Minimum version | Notes | +| ------------ | --------------- | ---------------------------- | +| [Pandas][PD] | `1.4` | Installable as `lmo[pandas]` | + +[PD]: https://github.com/pandas-dev/pandas ## Foundational Literature From 5151d737a0103eb2700c63d29363b6b3f6146a44 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 10 Apr 2024 01:02:01 +0200 Subject: [PATCH 27/44] workaround for weird mkdocs reference bug --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 085a9839..b9882a8f 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ ![GitHub Workflow Status][IMG-GHA] ![license][IMG-BSD] -[![PyPI][IMG-PYPI]](https://pypi.org/project/Lmo/) -[![versions][IMG-VER]](https://github.com/jorenham/Lmo) +[![Lmo - PyPI][IMG-PYPI]](https://pypi.org/project/Lmo/) +[![Lmo - Versions][IMG-VER]](https://github.com/jorenham/Lmo) [![Ruff][IMG-RUFF]](https://github.com/astral-sh/ruff) -[![Checked with pyright][IMG-PYRIGHT]](https://microsoft.github.io/pyright/) +[![Pyright][IMG-PYRIGHT]](https://microsoft.github.io/pyright/) [IMG-GHA]: https://img.shields.io/github/actions/workflow/status/jorenham/Lmo/CI.yml?branch=master [IMG-BSD]: https://img.shields.io/github/license/jorenham/Lmo From 1b7dcd3a2afa430a3bedbbee9b985d64eb0d6302 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 10 Apr 2024 01:02:36 +0200 Subject: [PATCH 28/44] markdownlint config --- .markdownlint.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .markdownlint.yaml diff --git a/.markdownlint.yaml b/.markdownlint.yaml new file mode 100644 index 00000000..3fcebd2d --- /dev/null +++ b/.markdownlint.yaml @@ -0,0 +1,13 @@ +default: true +no-hard-tabs: true +MD007: + indent: 4 +MD033: + allowed_elements: + - 'br' + - 'table' + - 'tr' + - 'th' + - 'td' + - 'img' +MD041: false From b623075def5dc0d82dc2a25217403f5df6932764 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 10 Apr 2024 01:04:21 +0200 Subject: [PATCH 29/44] fix markdownlint errors --- docs/distributions.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/docs/distributions.md b/docs/distributions.md index f6f12bad..e48a4f2d 100644 --- a/docs/distributions.md +++ b/docs/distributions.md @@ -1,3 +1,4 @@ + # L-moments of common probability distributions This page lists theoretical L-moments of popular probability distributions. @@ -772,7 +773,6 @@ The [Gompertz distribution](https://wikipedia.org/wiki/Gompertz_distribution) [^GOMP] with shape parameter \( \alpha > 0 \) and \( x \ge 0 \), has the following CDF and PPF: - \[ \begin{align*} F(x) &= 1 - e^{\alpha (1 - e^x)} \\ @@ -800,7 +800,8 @@ The general trimmed L-moments of the Gompertz distribution are: ### GEV -The [GEV](https://wikipedia.org/wiki/GEV_distribution) unifies the +The [GEV](https://wikipedia.org/wiki/GEV_distribution) distribution [^GEV] +unifies the [Gumbel](https://wikipedia.org/wiki/Gumbel_distribution), [Fréchet](https://wikipedia.org/wiki/Fr%C3%A9chet_distribution), and [Weibull](https://wikipedia.org/wiki/Weibull_distribution) distributions. @@ -1038,9 +1039,12 @@ The distribution functions for \( x > 0 \) are defined as: \end{align*} \] -Burr XII distribution PDF + alt="Burr XII distribution PDF" +/> When \( \beta > 1 / \alpha \), the general \( r \)-th trimmed L-moment is: @@ -1090,7 +1094,7 @@ shapes \( \gamma \equiv 1 / \alpha \) and \( \alpha' \equiv \beta \), location For [Kumaraswamy's distribution ](https://wikipedia.org/wiki/Kumaraswamy_distribution) [^KUM1] with parameters -\( \alpha \in \mathbb{R}_{>0} \) and \( \beta \in \mathbb{R}_{>0} \), +\( \alpha \in \mathbb{R}_{>0} \) and \( \beta \in \mathbb{R}_{>0} \), the general solution for the \( r \)th (untrimmed L-moment has been derived by M.C. Jones in 2009 [^KUM2]. Lmo has extended these results for the general trimmed L-moments. @@ -1147,8 +1151,8 @@ There are several notable special cases of the Kumaraswamy distribution: ### Wakeby The [*Wakeby distribution*](https://wikipedia.org/wiki/Wakeby_distribution) -[^WAK] is quantile-based -- the CDF and PDF are not analytically expressible for the -general case. +[^WAK] is quantile-based -- the CDF and PDF are not analytically expressible +for the general case. Without loss of generality, Lmo uses a 3-parameter "standardized" paremetrization, with shape parameters \( \beta,\ \delta,\ \phi \). @@ -1331,6 +1335,7 @@ r \tlmoment{s, t}{r} and the arbitrarily-trimmed L-location is + \[ \tlmoment{s, t}{1} = -(1 + \phi) \mathfrak{L}_{1}^{(s)}(\beta) @@ -1351,6 +1356,7 @@ where & \text{otherwise.} \end{cases} \] + These equations look scarier that they actually are. To see why, take a look at the first 4 L-moment, with 4 styles of trimming: @@ -1549,6 +1555,7 @@ There are several notable special cases of the GLD: generating asymmetric random variables ## Constants and special functions + An overview of the (non-obvious) mathematical notation of special functions and constants. @@ -1808,7 +1815,6 @@ and constants. - *[STD]: Standard deviation *[MAD]: Median absolute deviation *[RV]: Random variable From f1ac2cdaa1faf033f5d30523fa52bda682120f57 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 10 Apr 2024 01:04:37 +0200 Subject: [PATCH 30/44] fix pyright errors in `docs/gallery` --- docs/gallery/burr12.py | 5 ++--- docs/gallery/genlambda.py | 3 +-- docs/gallery/kumaraswamy.py | 3 +-- docs/gallery/wakeby.py | 3 +-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/docs/gallery/burr12.py b/docs/gallery/burr12.py index 944c94e5..70a32e41 100644 --- a/docs/gallery/burr12.py +++ b/docs/gallery/burr12.py @@ -1,11 +1,11 @@ -# pyright: reportUnknownMemberType=false +# pyright: reportUnknownMemberType=false, reportUnusedCallResult=false from pathlib import Path import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt -from scipy.stats import burr12 # type: ignore +from scipy.stats import burr12 GALLERY_PATH = Path(__file__).resolve().parent TEX_LABEL_TEMPLATE = r'$\alpha = {},\ \beta = {}$' @@ -55,4 +55,3 @@ format='svg', bbox_inches='tight' ) - diff --git a/docs/gallery/genlambda.py b/docs/gallery/genlambda.py index bf6029f2..407434ea 100644 --- a/docs/gallery/genlambda.py +++ b/docs/gallery/genlambda.py @@ -1,4 +1,4 @@ -# pyright: reportUnknownMemberType=false +# pyright: reportUnknownMemberType=false, reportUnusedCallResult=false from pathlib import Path import numpy as np @@ -60,4 +60,3 @@ format='svg', bbox_inches='tight' ) - diff --git a/docs/gallery/kumaraswamy.py b/docs/gallery/kumaraswamy.py index cc384bd5..d3ce0485 100644 --- a/docs/gallery/kumaraswamy.py +++ b/docs/gallery/kumaraswamy.py @@ -1,4 +1,4 @@ -# pyright: reportUnknownMemberType=false +# pyright: reportUnknownMemberType=false, reportUnusedCallResult=false from pathlib import Path import numpy as np @@ -54,4 +54,3 @@ format='svg', bbox_inches='tight' ) - diff --git a/docs/gallery/wakeby.py b/docs/gallery/wakeby.py index 8ae0388b..0b6743cf 100644 --- a/docs/gallery/wakeby.py +++ b/docs/gallery/wakeby.py @@ -1,4 +1,4 @@ -# pyright: reportUnknownMemberType=false +# pyright: reportUnknownMemberType=false, reportUnusedCallResult=false from pathlib import Path import numpy as np @@ -54,4 +54,3 @@ format='svg', bbox_inches='tight' ) - From 84c6e1303d48f72d91b88f7abe6880cdd5df79e5 Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 10 Apr 2024 01:07:40 +0200 Subject: [PATCH 31/44] add markdownlint pre-commit hook --- .pre-commit-config.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d6707076..51514cf5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -21,6 +21,11 @@ repos: - id: trailing-whitespace args: [--markdown-linebreak-ext=md] + - repo: https://github.com/igorshubovych/markdownlint-cli + rev: v0.39.0 + hooks: + - id: markdownlint + - repo: https://github.com/python-poetry/poetry rev: 1.8.2 hooks: From 0da628ef651acd1ec6132391d59e11a294085fca Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 10 Apr 2024 01:15:01 +0200 Subject: [PATCH 32/44] fix check-yaml in pre-commit on mkdocs config --- .pre-commit-config.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 51514cf5..154bfc45 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,6 +11,7 @@ repos: - id: check-toml - id: check-vcs-permalinks - id: check-yaml + args: [--unsafe] - id: destroyed-symlinks - id: detect-private-key - id: fix-byte-order-marker @@ -20,6 +21,7 @@ repos: - id: no-commit-to-branch - id: trailing-whitespace args: [--markdown-linebreak-ext=md] + exclude_types: [svg] - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.39.0 From 0807685cfdd0c91ddc37a7c865b720e387d8928f Mon Sep 17 00:00:00 2001 From: jorenham Date: Wed, 10 Apr 2024 18:51:20 +0200 Subject: [PATCH 33/44] bump pyright to 1.1.358 --- .pre-commit-config.yaml | 2 +- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 154bfc45..504a3c2a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,6 +47,6 @@ repos: args: [--fix, --exit-non-zero-on-fix] - repo: https://github.com/RobertCraigie/pyright-python - rev: v1.1.357 + rev: v1.1.358 hooks: - id: pyright diff --git a/poetry.lock b/poetry.lock index bf47c08f..d0de8742 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1752,13 +1752,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyright" -version = "1.1.357" +version = "1.1.358" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.357-py3-none-any.whl", hash = "sha256:1cf29ee38e4928131895cd8e90eef37b5b77e2ed72a14e6e8e2405266f5f0aca"}, - {file = "pyright-1.1.357.tar.gz", hash = "sha256:7c66261116c78c5fa9629134fe85c54cc5302ab73e376be4b0a99d89c80a9403"}, + {file = "pyright-1.1.358-py3-none-any.whl", hash = "sha256:0995b6a95eb11bd26f093cd5dee3d5e7258441b1b94d4a171b5dc5b79a1d4f4e"}, + {file = "pyright-1.1.358.tar.gz", hash = "sha256:185524a8d52f6f14bbd3b290b92ad905f25b964dddc9e7148aad760bd35c9f60"}, ] [package.dependencies] @@ -2477,4 +2477,4 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "8c83d8b94e3f88576d10764dc79f96b4e9728c2d086f6906c81ccd1eea64b2b4" +content-hash = "25ea9cebdf9b320ce36a7452f0031d3961093dd780c355ecc39ff6b2a5f9449e" diff --git a/pyproject.toml b/pyproject.toml index 80cc8ca4..04612262 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ pandas = {version = ">=1.4", optional = true} codespell = "^2.2.6" hypothesis = {version = "^6.100.1", extras = ["numpy"]} pre-commit = "^3.7.0" -pyright = "^1.1.357" +pyright = "^1.1.358" pytest = "^8.1.1" ruff = "^0.3.5" tomli = {version = "^2.0.1", python = "<3.11"} From c91f7cbab033bc48f5a48e7f945fa0eb3c986afa Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 02:13:23 +0200 Subject: [PATCH 34/44] bump pyright to 1.1.359 and ruff to 0.4.1 --- .pre-commit-config.yaml | 4 +- poetry.lock | 572 ++++++++++++++++++++-------------------- pyproject.toml | 6 +- 3 files changed, 287 insertions(+), 295 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 504a3c2a..77679832 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -41,12 +41,12 @@ repos: - tomli - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.3.5 + rev: v0.4.1 hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] - repo: https://github.com/RobertCraigie/pyright-python - rev: v1.1.358 + rev: v1.1.359 hooks: - id: pyright diff --git a/poetry.lock b/poetry.lock index d0de8742..2f8fb50b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -450,13 +450,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -608,13 +608,13 @@ test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", [[package]] name = "griffe" -version = "0.42.1" +version = "0.44.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.42.1-py3-none-any.whl", hash = "sha256:7e805e35617601355edcac0d3511cedc1ed0cb1f7645e2d336ae4b05bbae7b3b"}, - {file = "griffe-0.42.1.tar.gz", hash = "sha256:57046131384043ed078692b85d86b76568a686266cc036b9b56b704466f803ce"}, + {file = "griffe-0.44.0-py3-none-any.whl", hash = "sha256:8a4471c469ba980b87c843f1168850ce39d0c1d0c7be140dca2480f76c8e5446"}, + {file = "griffe-0.44.0.tar.gz", hash = "sha256:34aee1571042f9bf00529bc715de4516fb6f482b164e90d030300601009e0223"}, ] [package.dependencies] @@ -656,13 +656,13 @@ zoneinfo = ["backports.zoneinfo (>=0.2.1)", "tzdata (>=2024.1)"] [[package]] name = "identify" -version = "2.5.35" +version = "2.5.36" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"}, - {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"}, + {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, + {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, ] [package.extras] @@ -670,13 +670,13 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -1086,13 +1086,13 @@ python-dateutil = ">=2.7" [[package]] name = "matplotlib-inline" -version = "0.1.6" +version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, ] [package.dependencies] @@ -1192,13 +1192,13 @@ cache = ["platformdirs"] [[package]] name = "mkdocs-material" -version = "9.5.17" +version = "9.5.18" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.17-py3-none-any.whl", hash = "sha256:14a2a60119a785e70e765dd033e6211367aca9fc70230e577c1cf6a326949571"}, - {file = "mkdocs_material-9.5.17.tar.gz", hash = "sha256:06ae1275a72db1989cf6209de9e9ecdfbcfdbc24c58353877b2bb927dbe413e4"}, + {file = "mkdocs_material-9.5.18-py3-none-any.whl", hash = "sha256:1e0e27fc9fe239f9064318acf548771a4629d5fd5dfd45444fd80a953fe21eb4"}, + {file = "mkdocs_material-9.5.18.tar.gz", hash = "sha256:a43f470947053fa2405c33995f282d24992c752a50114f23f30da9d8d0c57e62"}, ] [package.dependencies] @@ -1259,17 +1259,17 @@ python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] [[package]] name = "mkdocstrings-python" -version = "1.9.2" +version = "1.10.0" description = "A Python handler for mkdocstrings." optional = false python-versions = ">=3.8" files = [ - {file = "mkdocstrings_python-1.9.2-py3-none-any.whl", hash = "sha256:96d82f6424e08db6245e4a15ca95619f4ecd0ddd254c0aa590d4181814e16ee5"}, - {file = "mkdocstrings_python-1.9.2.tar.gz", hash = "sha256:8546a103c9b22e1778c72c887696acc39a6635fedde3c912ce00f967518a8847"}, + {file = "mkdocstrings_python-1.10.0-py3-none-any.whl", hash = "sha256:ba833fbd9d178a4b9d5cb2553a4df06e51dc1f51e41559a4d2398c16a6f69ecc"}, + {file = "mkdocstrings_python-1.10.0.tar.gz", hash = "sha256:71678fac657d4d2bb301eed4e4d2d91499c095fd1f8a90fa76422a87a5693828"}, ] [package.dependencies] -griffe = ">=0.37" +griffe = ">=0.44" mkdocstrings = ">=0.24.2" [[package]] @@ -1365,47 +1365,44 @@ files = [ [[package]] name = "pandas" -version = "2.2.1" +version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8df8612be9cd1c7797c93e1c5df861b2ddda0b48b08f2c3eaa0702cf88fb5f88"}, - {file = "pandas-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0f573ab277252ed9aaf38240f3b54cfc90fff8e5cab70411ee1d03f5d51f3944"}, - {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f02a3a6c83df4026e55b63c1f06476c9aa3ed6af3d89b4f04ea656ccdaaaa359"}, - {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c38ce92cb22a4bea4e3929429aa1067a454dcc9c335799af93ba9be21b6beb51"}, - {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c2ce852e1cf2509a69e98358e8458775f89599566ac3775e70419b98615f4b06"}, - {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53680dc9b2519cbf609c62db3ed7c0b499077c7fefda564e330286e619ff0dd9"}, - {file = "pandas-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:94e714a1cca63e4f5939cdce5f29ba8d415d85166be3441165edd427dc9f6bc0"}, - {file = "pandas-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f821213d48f4ab353d20ebc24e4faf94ba40d76680642fb7ce2ea31a3ad94f9b"}, - {file = "pandas-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c70e00c2d894cb230e5c15e4b1e1e6b2b478e09cf27cc593a11ef955b9ecc81a"}, - {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e97fbb5387c69209f134893abc788a6486dbf2f9e511070ca05eed4b930b1b02"}, - {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101d0eb9c5361aa0146f500773395a03839a5e6ecde4d4b6ced88b7e5a1a6403"}, - {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7d2ed41c319c9fb4fd454fe25372028dfa417aacb9790f68171b2e3f06eae8cd"}, - {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:af5d3c00557d657c8773ef9ee702c61dd13b9d7426794c9dfeb1dc4a0bf0ebc7"}, - {file = "pandas-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:06cf591dbaefb6da9de8472535b185cba556d0ce2e6ed28e21d919704fef1a9e"}, - {file = "pandas-2.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:88ecb5c01bb9ca927ebc4098136038519aa5d66b44671861ffab754cae75102c"}, - {file = "pandas-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:04f6ec3baec203c13e3f8b139fb0f9f86cd8c0b94603ae3ae8ce9a422e9f5bee"}, - {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a935a90a76c44fe170d01e90a3594beef9e9a6220021acfb26053d01426f7dc2"}, - {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c391f594aae2fd9f679d419e9a4d5ba4bce5bb13f6a989195656e7dc4b95c8f0"}, - {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9d1265545f579edf3f8f0cb6f89f234f5e44ba725a34d86535b1a1d38decbccc"}, - {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11940e9e3056576ac3244baef2fedade891977bcc1cb7e5cc8f8cc7d603edc89"}, - {file = "pandas-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4acf681325ee1c7f950d058b05a820441075b0dd9a2adf5c4835b9bc056bf4fb"}, - {file = "pandas-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9bd8a40f47080825af4317d0340c656744f2bfdb6819f818e6ba3cd24c0e1397"}, - {file = "pandas-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df0c37ebd19e11d089ceba66eba59a168242fc6b7155cba4ffffa6eccdfb8f16"}, - {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:739cc70eaf17d57608639e74d63387b0d8594ce02f69e7a0b046f117974b3019"}, - {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d3558d263073ed95e46f4650becff0c5e1ffe0fc3a015de3c79283dfbdb3df"}, - {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4aa1d8707812a658debf03824016bf5ea0d516afdea29b7dc14cf687bc4d4ec6"}, - {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:76f27a809cda87e07f192f001d11adc2b930e93a2b0c4a236fde5429527423be"}, - {file = "pandas-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:1ba21b1d5c0e43416218db63037dbe1a01fc101dc6e6024bcad08123e48004ab"}, - {file = "pandas-2.2.1.tar.gz", hash = "sha256:0ab90f87093c13f3e8fa45b48ba9f39181046e8f3317d3aadb2fffbb1b978572"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, ] [package.dependencies] numpy = [ - {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -1594,13 +1591,13 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest- [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -1720,17 +1717,17 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymdown-extensions" -version = "10.7.1" +version = "10.8" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.7.1-py3-none-any.whl", hash = "sha256:f5cc7000d7ff0d1ce9395d216017fa4df3dde800afb1fb72d1c7d3fd35e710f4"}, - {file = "pymdown_extensions-10.7.1.tar.gz", hash = "sha256:c70e146bdd83c744ffc766b4671999796aba18842b268510a329f7f64700d584"}, + {file = "pymdown_extensions-10.8-py3-none-any.whl", hash = "sha256:3539003ff0d5e219ba979d2dc961d18fcad5ac259e66c764482e8347b4c0503c"}, + {file = "pymdown_extensions-10.8.tar.gz", hash = "sha256:91ca336caf414e1e5e0626feca86e145de9f85a3921a7bcbd32890b51738c428"}, ] [package.dependencies] -markdown = ">=3.5" +markdown = ">=3.6" pyyaml = "*" [package.extras] @@ -1752,13 +1749,13 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pyright" -version = "1.1.358" +version = "1.1.359" description = "Command line wrapper for pyright" optional = false python-versions = ">=3.7" files = [ - {file = "pyright-1.1.358-py3-none-any.whl", hash = "sha256:0995b6a95eb11bd26f093cd5dee3d5e7258441b1b94d4a171b5dc5b79a1d4f4e"}, - {file = "pyright-1.1.358.tar.gz", hash = "sha256:185524a8d52f6f14bbd3b290b92ad905f25b964dddc9e7148aad760bd35c9f60"}, + {file = "pyright-1.1.359-py3-none-any.whl", hash = "sha256:5582777be7eab73512277ac7da7b41e15bc0737f488629cb9babd96e0769be61"}, + {file = "pyright-1.1.359.tar.gz", hash = "sha256:f0eab50f3dafce8a7302caeafd6a733f39901a2bf5170bb23d77fd607c8a8dbc"}, ] [package.dependencies] @@ -1927,104 +1924,99 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "25.1.2" +version = "26.0.2" description = "Python bindings for 0MQ" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, - {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49151b0efece79f6a79d41a461d78535356136ee70084a1c22532fc6383f4ad0"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9a5f194cf730f2b24d6af1f833c14c10f41023da46a7f736f48b6d35061e76e"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faf79a302f834d9e8304fafdc11d0d042266667ac45209afa57e5efc998e3872"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f51a7b4ead28d3fca8dda53216314a553b0f7a91ee8fc46a72b402a78c3e43d"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0ddd6d71d4ef17ba5a87becf7ddf01b371eaba553c603477679ae817a8d84d75"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:246747b88917e4867e2367b005fc8eefbb4a54b7db363d6c92f89d69abfff4b6"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:00c48ae2fd81e2a50c3485de1b9d5c7c57cd85dc8ec55683eac16846e57ac979"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a68d491fc20762b630e5db2191dd07ff89834086740f70e978bb2ef2668be08"}, - {file = "pyzmq-25.1.2-cp310-cp310-win32.whl", hash = "sha256:09dfe949e83087da88c4a76767df04b22304a682d6154de2c572625c62ad6886"}, - {file = "pyzmq-25.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:fa99973d2ed20417744fca0073390ad65ce225b546febb0580358e36aa90dba6"}, - {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:82544e0e2d0c1811482d37eef297020a040c32e0687c1f6fc23a75b75db8062c"}, - {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01171fc48542348cd1a360a4b6c3e7d8f46cdcf53a8d40f84db6707a6768acc1"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc69c96735ab501419c432110016329bf0dea8898ce16fab97c6d9106dc0b348"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e124e6b1dd3dfbeb695435dff0e383256655bb18082e094a8dd1f6293114642"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7598d2ba821caa37a0f9d54c25164a4fa351ce019d64d0b44b45540950458840"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d1299d7e964c13607efd148ca1f07dcbf27c3ab9e125d1d0ae1d580a1682399d"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4e6f689880d5ad87918430957297c975203a082d9a036cc426648fcbedae769b"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cc69949484171cc961e6ecd4a8911b9ce7a0d1f738fcae717177c231bf77437b"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9880078f683466b7f567b8624bfc16cad65077be046b6e8abb53bed4eeb82dd3"}, - {file = "pyzmq-25.1.2-cp311-cp311-win32.whl", hash = "sha256:4e5837af3e5aaa99a091302df5ee001149baff06ad22b722d34e30df5f0d9097"}, - {file = "pyzmq-25.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:25c2dbb97d38b5ac9fd15586e048ec5eb1e38f3d47fe7d92167b0c77bb3584e9"}, - {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:11e70516688190e9c2db14fcf93c04192b02d457b582a1f6190b154691b4c93a"}, - {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:313c3794d650d1fccaaab2df942af9f2c01d6217c846177cfcbc693c7410839e"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b3cbba2f47062b85fe0ef9de5b987612140a9ba3a9c6d2543c6dec9f7c2ab27"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc31baa0c32a2ca660784d5af3b9487e13b61b3032cb01a115fce6588e1bed30"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c9087b109070c5ab0b383079fa1b5f797f8d43e9a66c07a4b8b8bdecfd88ee"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f8429b17cbb746c3e043cb986328da023657e79d5ed258b711c06a70c2ea7537"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5074adeacede5f810b7ef39607ee59d94e948b4fd954495bdb072f8c54558181"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7ae8f354b895cbd85212da245f1a5ad8159e7840e37d78b476bb4f4c3f32a9fe"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b264bf2cc96b5bc43ce0e852be995e400376bd87ceb363822e2cb1964fcdc737"}, - {file = "pyzmq-25.1.2-cp312-cp312-win32.whl", hash = "sha256:02bbc1a87b76e04fd780b45e7f695471ae6de747769e540da909173d50ff8e2d"}, - {file = "pyzmq-25.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:ced111c2e81506abd1dc142e6cd7b68dd53747b3b7ae5edbea4578c5eeff96b7"}, - {file = "pyzmq-25.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7b6d09a8962a91151f0976008eb7b29b433a560fde056ec7a3db9ec8f1075438"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967668420f36878a3c9ecb5ab33c9d0ff8d054f9c0233d995a6d25b0e95e1b6b"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5edac3f57c7ddaacdb4d40f6ef2f9e299471fc38d112f4bc6d60ab9365445fb0"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0dabfb10ef897f3b7e101cacba1437bd3a5032ee667b7ead32bbcdd1a8422fe7"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2c6441e0398c2baacfe5ba30c937d274cfc2dc5b55e82e3749e333aabffde561"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:16b726c1f6c2e7625706549f9dbe9b06004dfbec30dbed4bf50cbdfc73e5b32a"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a86c2dd76ef71a773e70551a07318b8e52379f58dafa7ae1e0a4be78efd1ff16"}, - {file = "pyzmq-25.1.2-cp36-cp36m-win32.whl", hash = "sha256:359f7f74b5d3c65dae137f33eb2bcfa7ad9ebefd1cab85c935f063f1dbb245cc"}, - {file = "pyzmq-25.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:55875492f820d0eb3417b51d96fea549cde77893ae3790fd25491c5754ea2f68"}, - {file = "pyzmq-25.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8c8a419dfb02e91b453615c69568442e897aaf77561ee0064d789705ff37a92"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8807c87fa893527ae8a524c15fc505d9950d5e856f03dae5921b5e9aa3b8783b"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5e319ed7d6b8f5fad9b76daa0a68497bc6f129858ad956331a5835785761e003"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3c53687dde4d9d473c587ae80cc328e5b102b517447456184b485587ebd18b62"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9add2e5b33d2cd765ad96d5eb734a5e795a0755f7fc49aa04f76d7ddda73fd70"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e690145a8c0c273c28d3b89d6fb32c45e0d9605b2293c10e650265bf5c11cfec"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00a06faa7165634f0cac1abb27e54d7a0b3b44eb9994530b8ec73cf52e15353b"}, - {file = "pyzmq-25.1.2-cp37-cp37m-win32.whl", hash = "sha256:0f97bc2f1f13cb16905a5f3e1fbdf100e712d841482b2237484360f8bc4cb3d7"}, - {file = "pyzmq-25.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6cc0020b74b2e410287e5942e1e10886ff81ac77789eb20bec13f7ae681f0fdd"}, - {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bef02cfcbded83473bdd86dd8d3729cd82b2e569b75844fb4ea08fee3c26ae41"}, - {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e10a4b5a4b1192d74853cc71a5e9fd022594573926c2a3a4802020360aa719d8"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8c5f80e578427d4695adac6fdf4370c14a2feafdc8cb35549c219b90652536ae"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5dde6751e857910c1339890f3524de74007958557593b9e7e8c5f01cd919f8a7"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea1608dd169da230a0ad602d5b1ebd39807ac96cae1845c3ceed39af08a5c6df"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0f513130c4c361201da9bc69df25a086487250e16b5571ead521b31ff6b02220"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:019744b99da30330798bb37df33549d59d380c78e516e3bab9c9b84f87a9592f"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e2713ef44be5d52dd8b8e2023d706bf66cb22072e97fc71b168e01d25192755"}, - {file = "pyzmq-25.1.2-cp38-cp38-win32.whl", hash = "sha256:07cd61a20a535524906595e09344505a9bd46f1da7a07e504b315d41cd42eb07"}, - {file = "pyzmq-25.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb7e49a17fb8c77d3119d41a4523e432eb0c6932187c37deb6fbb00cc3028088"}, - {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:94504ff66f278ab4b7e03e4cba7e7e400cb73bfa9d3d71f58d8972a8dc67e7a6"}, - {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd0d50bbf9dca1d0bdea219ae6b40f713a3fb477c06ca3714f208fd69e16fd8"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:004ff469d21e86f0ef0369717351073e0e577428e514c47c8480770d5e24a565"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c0b5ca88a8928147b7b1e2dfa09f3b6c256bc1135a1338536cbc9ea13d3b7add"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9a79f1d2495b167119d02be7448bfba57fad2a4207c4f68abc0bab4b92925b"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:518efd91c3d8ac9f9b4f7dd0e2b7b8bf1a4fe82a308009016b07eaa48681af82"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1ec23bd7b3a893ae676d0e54ad47d18064e6c5ae1fadc2f195143fb27373f7f6"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db36c27baed588a5a8346b971477b718fdc66cf5b80cbfbd914b4d6d355e44e2"}, - {file = "pyzmq-25.1.2-cp39-cp39-win32.whl", hash = "sha256:39b1067f13aba39d794a24761e385e2eddc26295826530a8c7b6c6c341584289"}, - {file = "pyzmq-25.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:8e9f3fabc445d0ce320ea2c59a75fe3ea591fdbdeebec5db6de530dd4b09412e"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8c1d566344aee826b74e472e16edae0a02e2a044f14f7c24e123002dcff1c05"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759cfd391a0996345ba94b6a5110fca9c557ad4166d86a6e81ea526c376a01e8"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c61e346ac34b74028ede1c6b4bcecf649d69b707b3ff9dc0fab453821b04d1e"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb8fc1f8d69b411b8ec0b5f1ffbcaf14c1db95b6bccea21d83610987435f1a4"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3c00c9b7d1ca8165c610437ca0c92e7b5607b2f9076f4eb4b095c85d6e680a1d"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:df0c7a16ebb94452d2909b9a7b3337940e9a87a824c4fc1c7c36bb4404cb0cde"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45999e7f7ed5c390f2e87ece7f6c56bf979fb213550229e711e45ecc7d42ccb8"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac170e9e048b40c605358667aca3d94e98f604a18c44bdb4c102e67070f3ac9b"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b604734bec94f05f81b360a272fc824334267426ae9905ff32dc2be433ab96"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a793ac733e3d895d96f865f1806f160696422554e46d30105807fdc9841b9f7d"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0806175f2ae5ad4b835ecd87f5f85583316b69f17e97786f7443baaf54b9bb98"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ef12e259e7bc317c7597d4f6ef59b97b913e162d83b421dd0db3d6410f17a244"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea253b368eb41116011add00f8d5726762320b1bda892f744c91997b65754d73"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b9b1f2ad6498445a941d9a4fee096d387fee436e45cc660e72e768d3d8ee611"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8b14c75979ce932c53b79976a395cb2a8cd3aaf14aef75e8c2cb55a330b9b49d"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:889370d5174a741a62566c003ee8ddba4b04c3f09a97b8000092b7ca83ec9c49"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a18fff090441a40ffda8a7f4f18f03dc56ae73f148f1832e109f9bffa85df15"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99a6b36f95c98839ad98f8c553d8507644c880cf1e0a57fe5e3a3f3969040882"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4345c9a27f4310afbb9c01750e9461ff33d6fb74cd2456b107525bbeebcb5be3"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3516e0b6224cf6e43e341d56da15fd33bdc37fa0c06af4f029f7d7dfceceabbc"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:146b9b1f29ead41255387fb07be56dc29639262c0f7344f570eecdcd8d683314"}, - {file = "pyzmq-25.1.2.tar.gz", hash = "sha256:93f1aa311e8bb912e34f004cf186407a4e90eec4f0ecc0efd26056bf7eda0226"}, + {file = "pyzmq-26.0.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a60a03b01e8c9c58932ec0cca15b1712d911c2800eb82d4281bc1ae5b6dad50"}, + {file = "pyzmq-26.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:949067079e14ea1973bd740255e0840118c163d4bce8837f539d749f145cf5c3"}, + {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37e7edfa6cf96d036a403775c96afa25058d1bb940a79786a9a2fc94a783abe3"}, + {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:903cc7a84a7d4326b43755c368780800e035aa3d711deae84a533fdffa8755b0"}, + {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6cb2e41af165e5f327d06fbdd79a42a4e930267fade4e9f92d17f3ccce03f3a7"}, + {file = "pyzmq-26.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:55353b8189adcfc4c125fc4ce59d477744118e9c0ec379dd0999c5fa120ac4f5"}, + {file = "pyzmq-26.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f961423ff6236a752ced80057a20e623044df95924ed1009f844cde8b3a595f9"}, + {file = "pyzmq-26.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ba77fe84fe4f5f3dc0ef681a6d366685c8ffe1c8439c1d7530997b05ac06a04b"}, + {file = "pyzmq-26.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:52589f0a745ef61b9c75c872cf91f8c1f7c0668eb3dd99d7abd639d8c0fb9ca7"}, + {file = "pyzmq-26.0.2-cp310-cp310-win32.whl", hash = "sha256:b7b6d2a46c7afe2ad03ec8faf9967090c8ceae85c4d8934d17d7cae6f9062b64"}, + {file = "pyzmq-26.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:86531e20de249d9204cc6d8b13d5a30537748c78820215161d8a3b9ea58ca111"}, + {file = "pyzmq-26.0.2-cp310-cp310-win_arm64.whl", hash = "sha256:f26a05029ecd2bd306b941ff8cb80f7620b7901421052bc429d238305b1cbf2f"}, + {file = "pyzmq-26.0.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:70770e296a9cb03d955540c99360aab861cbb3cba29516abbd106a15dbd91268"}, + {file = "pyzmq-26.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2740fd7161b39e178554ebf21aa5667a1c9ef0cd2cb74298fd4ef017dae7aec4"}, + {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5e3706c32dea077faa42b1c92d825b7f86c866f72532d342e0be5e64d14d858"}, + {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fa1416876194927f7723d6b7171b95e1115602967fc6bfccbc0d2d51d8ebae1"}, + {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ef9a79a48794099c57dc2df00340b5d47c5caa1792f9ddb8c7a26b1280bd575"}, + {file = "pyzmq-26.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1c60fcdfa3229aeee4291c5d60faed3a813b18bdadb86299c4bf49e8e51e8605"}, + {file = "pyzmq-26.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e943c39c206b04df2eb5d71305761d7c3ca75fd49452115ea92db1b5b98dbdef"}, + {file = "pyzmq-26.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8da0ed8a598693731c76659880a668f4748b59158f26ed283a93f7f04d47447e"}, + {file = "pyzmq-26.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7bf51970b11d67096bede97cdbad0f4333f7664f4708b9b2acb352bf4faa3140"}, + {file = "pyzmq-26.0.2-cp311-cp311-win32.whl", hash = "sha256:6f8e6bd5d066be605faa9fe5ec10aa1a46ad9f18fc8646f2b9aaefc8fb575742"}, + {file = "pyzmq-26.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:6d03da3a0ae691b361edcb39530075461202f699ce05adbb15055a0e1c9bcaa4"}, + {file = "pyzmq-26.0.2-cp311-cp311-win_arm64.whl", hash = "sha256:f84e33321b68ff00b60e9dbd1a483e31ab6022c577c8de525b8e771bd274ce68"}, + {file = "pyzmq-26.0.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:44c33ebd1c62a01db7fbc24e18bdda569d6639217d13d5929e986a2b0f69070d"}, + {file = "pyzmq-26.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ac04f904b4fce4afea9cdccbb78e24d468cb610a839d5a698853e14e2a3f9ecf"}, + {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2133de5ba9adc5f481884ccb699eac9ce789708292945c05746880f95b241c0"}, + {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7753c67c570d7fc80c2dc59b90ca1196f1224e0e2e29a548980c95fe0fe27fc1"}, + {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d4e51632e6b12e65e8d9d7612446ecda2eda637a868afa7bce16270194650dd"}, + {file = "pyzmq-26.0.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:d6c38806f6ecd0acf3104b8d7e76a206bcf56dadd6ce03720d2fa9d9157d5718"}, + {file = "pyzmq-26.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:48f496bbe14686b51cec15406323ae6942851e14022efd7fc0e2ecd092c5982c"}, + {file = "pyzmq-26.0.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e84a3161149c75bb7a7dc8646384186c34033e286a67fec1ad1bdedea165e7f4"}, + {file = "pyzmq-26.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:dabf796c67aa9f5a4fcc956d47f0d48b5c1ed288d628cf53aa1cf08e88654343"}, + {file = "pyzmq-26.0.2-cp312-cp312-win32.whl", hash = "sha256:3eee4c676af1b109f708d80ef0cf57ecb8aaa5900d1edaf90406aea7e0e20e37"}, + {file = "pyzmq-26.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:26721fec65846b3e4450dad050d67d31b017f97e67f7e0647b5f98aa47f828cf"}, + {file = "pyzmq-26.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:653955c6c233e90de128a1b8e882abc7216f41f44218056bd519969c8c413a15"}, + {file = "pyzmq-26.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:becd8d8fb068fbb5a52096efd83a2d8e54354383f691781f53a4c26aee944542"}, + {file = "pyzmq-26.0.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7a15e5465e7083c12517209c9dd24722b25e9b63c49a563922922fc03554eb35"}, + {file = "pyzmq-26.0.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e8158ac8616941f874841f9fa0f6d2f1466178c2ff91ea08353fdc19de0d40c2"}, + {file = "pyzmq-26.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea2c6a53e28c7066ea7db86fcc0b71d78d01b818bb11d4a4341ec35059885295"}, + {file = "pyzmq-26.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bdbc7dab0b0e9c62c97b732899c4242e3282ba803bad668e03650b59b165466e"}, + {file = "pyzmq-26.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e74b6d5ef57bb65bf1b4a37453d8d86d88550dde3fb0f23b1f1a24e60c70af5b"}, + {file = "pyzmq-26.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ed4c6ee624ecbc77b18aeeb07bf0700d26571ab95b8f723f0d02e056b5bce438"}, + {file = "pyzmq-26.0.2-cp37-cp37m-win32.whl", hash = "sha256:8a98b3cb0484b83c19d8fb5524c8a469cd9f10e743f5904ac285d92678ee761f"}, + {file = "pyzmq-26.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:aa5f95d71b6eca9cec28aa0a2f8310ea53dea313b63db74932879ff860c1fb8d"}, + {file = "pyzmq-26.0.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:5ff56c76ce77b9805378a7a73032c17cbdb1a5b84faa1df03c5d3e306e5616df"}, + {file = "pyzmq-26.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bab697fc1574fee4b81da955678708567c43c813c84c91074e452bda5346c921"}, + {file = "pyzmq-26.0.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c0fed8aa9ba0488ee1cbdaa304deea92d52fab43d373297002cfcc69c0a20c5"}, + {file = "pyzmq-26.0.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:606b922699fcec472ed814dda4dc3ff7c748254e0b26762a0ba21a726eb1c107"}, + {file = "pyzmq-26.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45f0fd82bad4d199fa993fbf0ac586a7ac5879addbe436a35a389df7e0eb4c91"}, + {file = "pyzmq-26.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:166c5e41045939a52c01e6f374e493d9a6a45dfe677360d3e7026e38c42e8906"}, + {file = "pyzmq-26.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d566e859e8b8d5bca08467c093061774924b3d78a5ba290e82735b2569edc84b"}, + {file = "pyzmq-26.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:264ee0e72b72ca59279dc320deab5ae0fac0d97881aed1875ce4bde2e56ffde0"}, + {file = "pyzmq-26.0.2-cp38-cp38-win32.whl", hash = "sha256:3152bbd3a4744cbdd83dfb210ed701838b8b0c9065cef14671d6d91df12197d0"}, + {file = "pyzmq-26.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:bf77601d75ca692c179154b7e5943c286a4aaffec02c491afe05e60493ce95f2"}, + {file = "pyzmq-26.0.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:c770a7545b3deca2db185b59175e710a820dd4ed43619f4c02e90b0e227c6252"}, + {file = "pyzmq-26.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d47175f0a380bfd051726bc5c0054036ae4a5d8caf922c62c8a172ccd95c1a2a"}, + {file = "pyzmq-26.0.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bce298c1ce077837e110367c321285dc4246b531cde1abfc27e4a5bbe2bed4d"}, + {file = "pyzmq-26.0.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c40b09b7e184d6e3e1be1c8af2cc320c0f9f610d8a5df3dd866e6e6e4e32b235"}, + {file = "pyzmq-26.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d420d856bf728713874cefb911398efe69e1577835851dd297a308a78c14c249"}, + {file = "pyzmq-26.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d792d3cab987058451e55c70c5926e93e2ceb68ca5a2334863bb903eb860c9cb"}, + {file = "pyzmq-26.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:83ec17729cf6d3464dab98a11e98294fcd50e6b17eaabd3d841515c23f6dbd3a"}, + {file = "pyzmq-26.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47c17d5ebfa88ae90f08960c97b49917098665b8cd8be31f2c24e177bcf37a0f"}, + {file = "pyzmq-26.0.2-cp39-cp39-win32.whl", hash = "sha256:d509685d1cd1d018705a811c5f9d5bc237790936ead6d06f6558b77e16cc7235"}, + {file = "pyzmq-26.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:c7cc8cc009e8f6989a6d86c96f87dae5f5fb07d6c96916cdc7719d546152c7db"}, + {file = "pyzmq-26.0.2-cp39-cp39-win_arm64.whl", hash = "sha256:3ada31cb879cd7532f4a85b501f4255c747d4813ab76b35c49ed510ce4865b45"}, + {file = "pyzmq-26.0.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0a6ceaddc830dd3ca86cb8451cf373d1f05215368e11834538c2902ed5205139"}, + {file = "pyzmq-26.0.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a967681463aa7a99eb9a62bb18229b653b45c10ff0947b31cc0837a83dfb86f"}, + {file = "pyzmq-26.0.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6472a73bc115bc40a2076609a90894775abe6faf19a78375675a2f889a613071"}, + {file = "pyzmq-26.0.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d6aea92bcccfe5e5524d3c70a6f16ffdae548390ddad26f4207d55c55a40593"}, + {file = "pyzmq-26.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e025f6351e49d48a5aa2f5a09293aa769b0ee7369c25bed551647234b7fa0c75"}, + {file = "pyzmq-26.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:40bd7ebe4dbb37d27f0c56e2a844f360239343a99be422085e13e97da13f73f9"}, + {file = "pyzmq-26.0.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1dd40d586ad6f53764104df6e01810fe1b4e88fd353774629a5e6fe253813f79"}, + {file = "pyzmq-26.0.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f2aca15e9ad8c8657b5b3d7ae3d1724dc8c1c1059c06b4b674c3aa36305f4930"}, + {file = "pyzmq-26.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:450ec234736732eb0ebeffdb95a352450d4592f12c3e087e2a9183386d22c8bf"}, + {file = "pyzmq-26.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f43be2bebbd09360a2f23af83b243dc25ffe7b583ea8c722e6df03e03a55f02f"}, + {file = "pyzmq-26.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:867f55e54aff254940bcec5eec068e7c0ac1e6bf360ab91479394a8bf356b0e6"}, + {file = "pyzmq-26.0.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b4dbc033c5ad46f8c429bf238c25a889b8c1d86bfe23a74e1031a991cb3f0000"}, + {file = "pyzmq-26.0.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6e8dd2961462e337e21092ec2da0c69d814dcb1b6e892955a37444a425e9cfb8"}, + {file = "pyzmq-26.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35391e72df6c14a09b697c7b94384947c1dd326aca883ff98ff137acdf586c33"}, + {file = "pyzmq-26.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1c3d3c92fa54eda94ab369ca5b8d35059987c326ba5e55326eb068862f64b1fc"}, + {file = "pyzmq-26.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:e7aa61a9cc4f0523373e31fc9255bf4567185a099f85ca3598e64de484da3ab2"}, + {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee53a8191271f144cc20b12c19daa9f1546adc84a2f33839e3338039b55c373c"}, + {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac60a980f07fa988983f7bfe6404ef3f1e4303f5288a01713bc1266df6d18783"}, + {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88896b1b4817d7b2fe1ec7205c4bbe07bf5d92fb249bf2d226ddea8761996068"}, + {file = "pyzmq-26.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:18dfffe23751edee917764ffa133d5d3fef28dfd1cf3adebef8c90bc854c74c4"}, + {file = "pyzmq-26.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6926dd14cfe6967d3322640b6d5c3c3039db71716a5e43cca6e3b474e73e0b36"}, + {file = "pyzmq-26.0.2.tar.gz", hash = "sha256:f0f9bb370449158359bb72a3e12c658327670c0ffe6fbcd1af083152b64f9df0"}, ] [package.dependencies] @@ -2032,104 +2024,104 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "regex" -version = "2023.12.25" +version = "2024.4.16" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.7" files = [ - {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, - {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, - {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, - {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, - {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, - {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, - {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, - {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, - {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, - {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, - {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, - {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, - {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, - {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, - {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, - {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, - {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, - {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, - {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, - {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, - {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, - {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, - {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, - {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, - {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, - {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, - {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, - {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, - {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, - {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, - {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, - {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, - {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, + {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb83cc090eac63c006871fd24db5e30a1f282faa46328572661c0a24a2323a08"}, + {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c91e1763696c0eb66340c4df98623c2d4e77d0746b8f8f2bee2c6883fd1fe18"}, + {file = "regex-2024.4.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10188fe732dec829c7acca7422cdd1bf57d853c7199d5a9e96bb4d40db239c73"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:956b58d692f235cfbf5b4f3abd6d99bf102f161ccfe20d2fd0904f51c72c4c66"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a70b51f55fd954d1f194271695821dd62054d949efd6368d8be64edd37f55c86"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c02fcd2bf45162280613d2e4a1ca3ac558ff921ae4e308ecb307650d3a6ee51"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ed75ea6892a56896d78f11006161eea52c45a14994794bcfa1654430984b22"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd727ad276bb91928879f3aa6396c9a1d34e5e180dce40578421a691eeb77f47"}, + {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7cbc5d9e8a1781e7be17da67b92580d6ce4dcef5819c1b1b89f49d9678cc278c"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:78fddb22b9ef810b63ef341c9fcf6455232d97cfe03938cbc29e2672c436670e"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:445ca8d3c5a01309633a0c9db57150312a181146315693273e35d936472df912"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:95399831a206211d6bc40224af1c635cb8790ddd5c7493e0bd03b85711076a53"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7731728b6568fc286d86745f27f07266de49603a6fdc4d19c87e8c247be452af"}, + {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4facc913e10bdba42ec0aee76d029aedda628161a7ce4116b16680a0413f658a"}, + {file = "regex-2024.4.16-cp310-cp310-win32.whl", hash = "sha256:911742856ce98d879acbea33fcc03c1d8dc1106234c5e7d068932c945db209c0"}, + {file = "regex-2024.4.16-cp310-cp310-win_amd64.whl", hash = "sha256:e0a2df336d1135a0b3a67f3bbf78a75f69562c1199ed9935372b82215cddd6e2"}, + {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1210365faba7c2150451eb78ec5687871c796b0f1fa701bfd2a4a25420482d26"}, + {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ab40412f8cd6f615bfedea40c8bf0407d41bf83b96f6fc9ff34976d6b7037fd"}, + {file = "regex-2024.4.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fd80d1280d473500d8086d104962a82d77bfbf2b118053824b7be28cd5a79ea5"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bb966fdd9217e53abf824f437a5a2d643a38d4fd5fd0ca711b9da683d452969"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20b7a68444f536365af42a75ccecb7ab41a896a04acf58432db9e206f4e525d6"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b74586dd0b039c62416034f811d7ee62810174bb70dffcca6439f5236249eb09"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c8290b44d8b0af4e77048646c10c6e3aa583c1ca67f3b5ffb6e06cf0c6f0f89"}, + {file = "regex-2024.4.16-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2d80a6749724b37853ece57988b39c4e79d2b5fe2869a86e8aeae3bbeef9eb0"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3a1018e97aeb24e4f939afcd88211ace472ba566efc5bdf53fd8fd7f41fa7170"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8d015604ee6204e76569d2f44e5a210728fa917115bef0d102f4107e622b08d5"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:3d5ac5234fb5053850d79dd8eb1015cb0d7d9ed951fa37aa9e6249a19aa4f336"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:0a38d151e2cdd66d16dab550c22f9521ba79761423b87c01dae0a6e9add79c0d"}, + {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:159dc4e59a159cb8e4e8f8961eb1fa5d58f93cb1acd1701d8aff38d45e1a84a6"}, + {file = "regex-2024.4.16-cp311-cp311-win32.whl", hash = "sha256:ba2336d6548dee3117520545cfe44dc28a250aa091f8281d28804aa8d707d93d"}, + {file = "regex-2024.4.16-cp311-cp311-win_amd64.whl", hash = "sha256:8f83b6fd3dc3ba94d2b22717f9c8b8512354fd95221ac661784df2769ea9bba9"}, + {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:80b696e8972b81edf0af2a259e1b2a4a661f818fae22e5fa4fa1a995fb4a40fd"}, + {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d61ae114d2a2311f61d90c2ef1358518e8f05eafda76eaf9c772a077e0b465ec"}, + {file = "regex-2024.4.16-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ba6745440b9a27336443b0c285d705ce73adb9ec90e2f2004c64d95ab5a7598"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295004b2dd37b0835ea5c14a33e00e8cfa3c4add4d587b77287825f3418d310"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4aba818dcc7263852aabb172ec27b71d2abca02a593b95fa79351b2774eb1d2b"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0800631e565c47520aaa04ae38b96abc5196fe8b4aa9bd864445bd2b5848a7a"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08dea89f859c3df48a440dbdcd7b7155bc675f2fa2ec8c521d02dc69e877db70"}, + {file = "regex-2024.4.16-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eeaa0b5328b785abc344acc6241cffde50dc394a0644a968add75fcefe15b9d4"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4e819a806420bc010489f4e741b3036071aba209f2e0989d4750b08b12a9343f"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:c2d0e7cbb6341e830adcbfa2479fdeebbfbb328f11edd6b5675674e7a1e37730"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:91797b98f5e34b6a49f54be33f72e2fb658018ae532be2f79f7c63b4ae225145"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:d2da13568eff02b30fd54fccd1e042a70fe920d816616fda4bf54ec705668d81"}, + {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:370c68dc5570b394cbaadff50e64d705f64debed30573e5c313c360689b6aadc"}, + {file = "regex-2024.4.16-cp312-cp312-win32.whl", hash = "sha256:904c883cf10a975b02ab3478bce652f0f5346a2c28d0a8521d97bb23c323cc8b"}, + {file = "regex-2024.4.16-cp312-cp312-win_amd64.whl", hash = "sha256:785c071c982dce54d44ea0b79cd6dfafddeccdd98cfa5f7b86ef69b381b457d9"}, + {file = "regex-2024.4.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2f142b45c6fed48166faeb4303b4b58c9fcd827da63f4cf0a123c3480ae11fb"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e87ab229332ceb127a165612d839ab87795972102cb9830e5f12b8c9a5c1b508"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81500ed5af2090b4a9157a59dbc89873a25c33db1bb9a8cf123837dcc9765047"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b340cccad138ecb363324aa26893963dcabb02bb25e440ebdf42e30963f1a4e0"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c72608e70f053643437bd2be0608f7f1c46d4022e4104d76826f0839199347a"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a01fe2305e6232ef3e8f40bfc0f0f3a04def9aab514910fa4203bafbc0bb4682"}, + {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:03576e3a423d19dda13e55598f0fd507b5d660d42c51b02df4e0d97824fdcae3"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:549c3584993772e25f02d0656ac48abdda73169fe347263948cf2b1cead622f3"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:34422d5a69a60b7e9a07a690094e824b66f5ddc662a5fc600d65b7c174a05f04"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:5f580c651a72b75c39e311343fe6875d6f58cf51c471a97f15a938d9fe4e0d37"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3399dd8a7495bbb2bacd59b84840eef9057826c664472e86c91d675d007137f5"}, + {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d1f86f3f4e2388aa3310b50694ac44daefbd1681def26b4519bd050a398dc5a"}, + {file = "regex-2024.4.16-cp37-cp37m-win32.whl", hash = "sha256:dd5acc0a7d38fdc7a3a6fd3ad14c880819008ecb3379626e56b163165162cc46"}, + {file = "regex-2024.4.16-cp37-cp37m-win_amd64.whl", hash = "sha256:ba8122e3bb94ecda29a8de4cf889f600171424ea586847aa92c334772d200331"}, + {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:743deffdf3b3481da32e8a96887e2aa945ec6685af1cfe2bcc292638c9ba2f48"}, + {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7571f19f4a3fd00af9341c7801d1ad1967fc9c3f5e62402683047e7166b9f2b4"}, + {file = "regex-2024.4.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:df79012ebf6f4efb8d307b1328226aef24ca446b3ff8d0e30202d7ebcb977a8c"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e757d475953269fbf4b441207bb7dbdd1c43180711b6208e129b637792ac0b93"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4313ab9bf6a81206c8ac28fdfcddc0435299dc88cad12cc6305fd0e78b81f9e4"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d83c2bc678453646f1a18f8db1e927a2d3f4935031b9ad8a76e56760461105dd"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9df1bfef97db938469ef0a7354b2d591a2d438bc497b2c489471bec0e6baf7c4"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62120ed0de69b3649cc68e2965376048793f466c5a6c4370fb27c16c1beac22d"}, + {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c2ef6f7990b6e8758fe48ad08f7e2f66c8f11dc66e24093304b87cae9037bb4a"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8fc6976a3395fe4d1fbeb984adaa8ec652a1e12f36b56ec8c236e5117b585427"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:03e68f44340528111067cecf12721c3df4811c67268b897fbe695c95f860ac42"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ec7e0043b91115f427998febaa2beb82c82df708168b35ece3accb610b91fac1"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c21fc21a4c7480479d12fd8e679b699f744f76bb05f53a1d14182b31f55aac76"}, + {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:12f6a3f2f58bb7344751919a1876ee1b976fe08b9ffccb4bbea66f26af6017b9"}, + {file = "regex-2024.4.16-cp38-cp38-win32.whl", hash = "sha256:479595a4fbe9ed8f8f72c59717e8cf222da2e4c07b6ae5b65411e6302af9708e"}, + {file = "regex-2024.4.16-cp38-cp38-win_amd64.whl", hash = "sha256:0534b034fba6101611968fae8e856c1698da97ce2efb5c2b895fc8b9e23a5834"}, + {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a7ccdd1c4a3472a7533b0a7aa9ee34c9a2bef859ba86deec07aff2ad7e0c3b94"}, + {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f2f017c5be19984fbbf55f8af6caba25e62c71293213f044da3ada7091a4455"}, + {file = "regex-2024.4.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:803b8905b52de78b173d3c1e83df0efb929621e7b7c5766c0843704d5332682f"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:684008ec44ad275832a5a152f6e764bbe1914bea10968017b6feaecdad5736e0"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65436dce9fdc0aeeb0a0effe0839cb3d6a05f45aa45a4d9f9c60989beca78b9c"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea355eb43b11764cf799dda62c658c4d2fdb16af41f59bb1ccfec517b60bcb07"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98c1165f3809ce7774f05cb74e5408cd3aa93ee8573ae959a97a53db3ca3180d"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cccc79a9be9b64c881f18305a7c715ba199e471a3973faeb7ba84172abb3f317"}, + {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00169caa125f35d1bca6045d65a662af0202704489fada95346cfa092ec23f39"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6cc38067209354e16c5609b66285af17a2863a47585bcf75285cab33d4c3b8df"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:23cff1b267038501b179ccbbd74a821ac4a7192a1852d1d558e562b507d46013"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b9d320b3bf82a39f248769fc7f188e00f93526cc0fe739cfa197868633d44701"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:89ec7f2c08937421bbbb8b48c54096fa4f88347946d4747021ad85f1b3021b3c"}, + {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4918fd5f8b43aa7ec031e0fef1ee02deb80b6afd49c85f0790be1dc4ce34cb50"}, + {file = "regex-2024.4.16-cp39-cp39-win32.whl", hash = "sha256:684e52023aec43bdf0250e843e1fdd6febbe831bd9d52da72333fa201aaa2335"}, + {file = "regex-2024.4.16-cp39-cp39-win_amd64.whl", hash = "sha256:e697e1c0238133589e00c244a8b676bc2cfc3ab4961318d902040d099fec7483"}, + {file = "regex-2024.4.16.tar.gz", hash = "sha256:fa454d26f2e87ad661c4f0c5a5fe4cf6aab1e307d1b94f16ffdfcb089ba685c0"}, ] [[package]] @@ -2155,28 +2147,28 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.3.5" +version = "0.4.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:aef5bd3b89e657007e1be6b16553c8813b221ff6d92c7526b7e0227450981eac"}, - {file = "ruff-0.3.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:89b1e92b3bd9fca249153a97d23f29bed3992cff414b222fcd361d763fc53f12"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e55771559c89272c3ebab23326dc23e7f813e492052391fe7950c1a5a139d89"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dabc62195bf54b8a7876add6e789caae0268f34582333cda340497c886111c39"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a05f3793ba25f194f395578579c546ca5d83e0195f992edc32e5907d142bfa3"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:dfd3504e881082959b4160ab02f7a205f0fadc0a9619cc481982b6837b2fd4c0"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87258e0d4b04046cf1d6cc1c56fadbf7a880cc3de1f7294938e923234cf9e498"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:712e71283fc7d9f95047ed5f793bc019b0b0a29849b14664a60fd66c23b96da1"}, - {file = "ruff-0.3.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a532a90b4a18d3f722c124c513ffb5e5eaff0cc4f6d3aa4bda38e691b8600c9f"}, - {file = "ruff-0.3.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:122de171a147c76ada00f76df533b54676f6e321e61bd8656ae54be326c10296"}, - {file = "ruff-0.3.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d80a6b18a6c3b6ed25b71b05eba183f37d9bc8b16ace9e3d700997f00b74660b"}, - {file = "ruff-0.3.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a7b6e63194c68bca8e71f81de30cfa6f58ff70393cf45aab4c20f158227d5936"}, - {file = "ruff-0.3.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a759d33a20c72f2dfa54dae6e85e1225b8e302e8ac655773aff22e542a300985"}, - {file = "ruff-0.3.5-py3-none-win32.whl", hash = "sha256:9d8605aa990045517c911726d21293ef4baa64f87265896e491a05461cae078d"}, - {file = "ruff-0.3.5-py3-none-win_amd64.whl", hash = "sha256:dc56bb16a63c1303bd47563c60482a1512721053d93231cf7e9e1c6954395a0e"}, - {file = "ruff-0.3.5-py3-none-win_arm64.whl", hash = "sha256:faeeae9905446b975dcf6d4499dc93439b131f1443ee264055c5716dd947af55"}, - {file = "ruff-0.3.5.tar.gz", hash = "sha256:a067daaeb1dc2baf9b82a32dae67d154d95212080c80435eb052d95da647763d"}, + {file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:2d9ef6231e3fbdc0b8c72404a1a0c46fd0dcea84efca83beb4681c318ea6a953"}, + {file = "ruff-0.4.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:9485f54a7189e6f7433e0058cf8581bee45c31a25cd69009d2a040d1bd4bfaef"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2921ac03ce1383e360e8a95442ffb0d757a6a7ddd9a5be68561a671e0e5807e"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eec8d185fe193ad053eda3a6be23069e0c8ba8c5d20bc5ace6e3b9e37d246d3f"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa27d9d72a94574d250f42b7640b3bd2edc4c58ac8ac2778a8c82374bb27984"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f1ee41580bff1a651339eb3337c20c12f4037f6110a36ae4a2d864c52e5ef954"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0926cefb57fc5fced629603fbd1a23d458b25418681d96823992ba975f050c2b"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c6e37f2e3cd74496a74af9a4fa67b547ab3ca137688c484749189bf3a686ceb"}, + {file = "ruff-0.4.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:efd703a5975ac1998c2cc5e9494e13b28f31e66c616b0a76e206de2562e0843c"}, + {file = "ruff-0.4.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b92f03b4aa9fa23e1799b40f15f8b95cdc418782a567d6c43def65e1bbb7f1cf"}, + {file = "ruff-0.4.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1c859f294f8633889e7d77de228b203eb0e9a03071b72b5989d89a0cf98ee262"}, + {file = "ruff-0.4.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:b34510141e393519a47f2d7b8216fec747ea1f2c81e85f076e9f2910588d4b64"}, + {file = "ruff-0.4.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6e68d248ed688b9d69fd4d18737edcbb79c98b251bba5a2b031ce2470224bdf9"}, + {file = "ruff-0.4.1-py3-none-win32.whl", hash = "sha256:b90506f3d6d1f41f43f9b7b5ff845aeefabed6d2494307bc7b178360a8805252"}, + {file = "ruff-0.4.1-py3-none-win_amd64.whl", hash = "sha256:c7d391e5936af5c9e252743d767c564670dc3889aff460d35c518ee76e4b26d7"}, + {file = "ruff-0.4.1-py3-none-win_arm64.whl", hash = "sha256:a1eaf03d87e6a7cd5e661d36d8c6e874693cb9bc3049d110bc9a97b350680c43"}, + {file = "ruff-0.4.1.tar.gz", hash = "sha256:d592116cdbb65f8b1b7e2a2b48297eb865f6bdc20641879aa9d7b9c11d86db79"}, ] [[package]] @@ -2223,18 +2215,18 @@ test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "po [[package]] name = "setuptools" -version = "69.2.0" +version = "69.5.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, - {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, + {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, + {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "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-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "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.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -2322,28 +2314,28 @@ files = [ [[package]] name = "traitlets" -version = "5.14.2" +version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, - {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"}, + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.1)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "types-pytz" -version = "2024.1.0.20240203" +version = "2024.1.0.20240417" description = "Typing stubs for pytz" optional = false python-versions = ">=3.8" files = [ - {file = "types-pytz-2024.1.0.20240203.tar.gz", hash = "sha256:c93751ee20dfc6e054a0148f8f5227b9a00b79c90a4d3c9f464711a73179c89e"}, - {file = "types_pytz-2024.1.0.20240203-py3-none-any.whl", hash = "sha256:9679eef0365db3af91ef7722c199dbb75ee5c1b67e3c4dd7bfbeb1b8a71c21a3"}, + {file = "types-pytz-2024.1.0.20240417.tar.gz", hash = "sha256:6810c8a1f68f21fdf0f4f374a432487c77645a0ac0b31de4bf4690cf21ad3981"}, + {file = "types_pytz-2024.1.0.20240417-py3-none-any.whl", hash = "sha256:8335d443310e2db7b74e007414e74c4f53b67452c0cb0d228ca359ccfba59659"}, ] [[package]] @@ -2387,13 +2379,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.25.1" +version = "20.25.3" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.1-py3-none-any.whl", hash = "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a"}, - {file = "virtualenv-20.25.1.tar.gz", hash = "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197"}, + {file = "virtualenv-20.25.3-py3-none-any.whl", hash = "sha256:8aac4332f2ea6ef519c648d0bc48a5b1d324994753519919bddbb1aff25a104e"}, + {file = "virtualenv-20.25.3.tar.gz", hash = "sha256:7bb554bbdfeaacc3349fa614ea5bff6ac300fc7c335e9facf3a3bcfc703f45be"}, ] [package.dependencies] @@ -2402,7 +2394,7 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] @@ -2477,4 +2469,4 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "25ea9cebdf9b320ce36a7452f0031d3961093dd780c355ecc39ff6b2a5f9449e" +content-hash = "a59b6ed2c047dad5ef237d1a4d29fe7c932d60bbd6d742d547bf9f426d154e0d" diff --git a/pyproject.toml b/pyproject.toml index 04612262..21ac3d38 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,14 +48,14 @@ pandas = {version = ">=1.4", optional = true} codespell = "^2.2.6" hypothesis = {version = "^6.100.1", extras = ["numpy"]} pre-commit = "^3.7.0" -pyright = "^1.1.358" +pyright = "^1.1.359" pytest = "^8.1.1" -ruff = "^0.3.5" +ruff = "^0.4.1" tomli = {version = "^2.0.1", python = "<3.11"} [tool.poetry.group.docs.dependencies] mkdocs = "^1.5.3" -mkdocs-material = "^9.5.17" +mkdocs-material = "^9.5.18" mkdocs-include-markdown-plugin = "^6.0.5" mkdocstrings = {version = "^0.24.3", extras = ["python"]} mkdocs-git-revision-date-localized-plugin = "^1.2.4" From 1449534835c5a74d96e040c53460b6fe8e501740 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 02:15:20 +0200 Subject: [PATCH 35/44] fix `PLR6104` violations --- lmo/contrib/pandas.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lmo/contrib/pandas.py b/lmo/contrib/pandas.py index 0add490f..ff6d0452 100644 --- a/lmo/contrib/pandas.py +++ b/lmo/contrib/pandas.py @@ -512,7 +512,7 @@ def l_comoment( msg = 'rowvar=True is not supported; use df.T instead' raise TypeError(msg) - kwargs = kwargs | {'rowvar': False} + kwargs |= {'rowvar': False} out = pd.DataFrame( _l_comoment(self, _r := int(r), trim=trim, **kwargs), index=self.columns, @@ -554,7 +554,7 @@ def l_coratio( msg = 'rowvar=True is not supported; use df.T instead' raise TypeError(msg) - kwargs = kwargs | {'rowvar': False} + kwargs |= {'rowvar': False} out = pd.DataFrame( _l_coratio(self, _r := int(r), _k := int(k), trim=trim, **kwargs), index=self.columns, From 7882c65bd6168e97d7e1cdb4d7eeb09061b3b668 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 02:52:45 +0200 Subject: [PATCH 36/44] ignore `.cache` --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 24c3e6f3..c70430a1 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ dist/ site/ # Cache +.cache .hypothesis .pytest_cache/ .ruff_cache/ From 3f2f4c10fab01e9fd64794443faabf6fcf65a9b5 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 03:11:44 +0200 Subject: [PATCH 37/44] fix katex comment syntax error in distirbutions.md --- docs/distributions.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/distributions.md b/docs/distributions.md index e48a4f2d..90720d1f 100644 --- a/docs/distributions.md +++ b/docs/distributions.md @@ -193,7 +193,6 @@ exist (in closed form). \( \displaystyle - % \frac{23 - 33 \ln 2}{3 - 3 \ln 2} \\ \frac 1 3 \left( \frac{-10}{1 - \ln 2} + 33 \right) \\ @@ -540,7 +539,6 @@ Right-trimmed LL-stats of some simple left-bound distributions. \( \displaystyle \frac{5}{36} \left( - % \frac{233 - 336 \ln 2}{3 - 4 \ln 2} \frac{-19}{3 - 4 \ln 2} + 84 \right) \\ \approx 0.06263 From 62cda673f13061d34e30ef532c7f204c280c3f50 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 03:22:12 +0200 Subject: [PATCH 38/44] install & configure `mkdocs-minify` --- mkdocs.yml | 44 +++++++++++++++++++++++++++++++++----------- poetry.lock | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 1 + 3 files changed, 82 insertions(+), 12 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index e050f478..b612ca00 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -10,14 +10,14 @@ strict: true nav: - Overview: index.md + - Reference: api.md - Distributions: distributions.md - - API Reference: api.md - Contributing: contributing.md theme: name: material - logo: img/logo.png favicon: img/favicon.ico + logo: img/logo.png features: - content.tabs.link - content.tooltips @@ -28,13 +28,13 @@ theme: - navigation.tracking - toc.follow - toc.integrate + font: + text: Fira Sans + code: Fira Mono palette: scheme: slate primary: nose accent: skin - font: - text: Fira Sans - code: Fira Mono extra: social: @@ -42,9 +42,29 @@ extra: link: https://github.com/jorenham/ plugins: - - include-markdown + # https://github.com/mkdocstrings/autorefs - autorefs - - search + + # https://github.com/timvink/mkdocs-git-revision-date-localized-plugin + - git-revision-date-localized: + type: iso_date + + # https://github.com/mondeja/mkdocs-include-markdown-plugin + - include-markdown + + # https://github.com/byrnereese/mkdocs-minify-plugin + - minify: + cache_safe: true + minify_css: true + minify_html: true + minify_js: true + js_files: + - scripts/katex.js + css_files: + - styles/theme.css + + # https://github.com/mkdocstrings/mkdocstrings + # https://github.com/mkdocstrings/python - mkdocstrings: default_handler: python handlers: @@ -68,14 +88,17 @@ plugins: show_source: false show_submodules: false signature_crossrefs: true - - git-revision-date-localized: - type: iso_date + + # https://squidfunk.github.io/mkdocs-material/plugins/search/ + - search markdown_extensions: # https://python-markdown.github.io/extensions/ - abbr - attr_list + - def_list - extra + - footnotes - md_in_html - sane_lists - smarty @@ -95,7 +118,7 @@ markdown_extensions: emoji_generator: !!python/name:material.extensions.emoji.to_svg - pymdownx.highlight - pymdownx.inlinehilite - - pymdownx.snippets: + - pymdownx.snippets - pymdownx.striphtml - pymdownx.superfences - pymdownx.tabbed: @@ -117,7 +140,6 @@ extra_javascript: - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/auto-render.min.js - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/copy-tex.min.js - watch: - docs - lmo diff --git a/poetry.lock b/poetry.lock index 2f8fb50b..537510ba 100644 --- a/poetry.lock +++ b/poetry.lock @@ -380,6 +380,16 @@ mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pill test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] +[[package]] +name = "csscompressor" +version = "0.9.5" +description = "A python port of YUI CSS Compressor" +optional = false +python-versions = "*" +files = [ + {file = "csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05"}, +] + [[package]] name = "cycler" version = "0.12.1" @@ -620,6 +630,16 @@ files = [ [package.dependencies] colorama = ">=0.4" +[[package]] +name = "htmlmin2" +version = "0.1.13" +description = "An HTML Minifier" +optional = false +python-versions = "*" +files = [ + {file = "htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2"}, +] + [[package]] name = "hypothesis" version = "6.100.1" @@ -797,6 +817,16 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jsmin" +version = "3.0.1" +description = "JavaScript minifier." +optional = false +python-versions = "*" +files = [ + {file = "jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc"}, +] + [[package]] name = "jupyter-client" version = "8.6.1" @@ -1230,6 +1260,23 @@ files = [ {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] +[[package]] +name = "mkdocs-minify-plugin" +version = "0.8.0" +description = "An MkDocs plugin to minify HTML, JS or CSS files prior to being written to disk" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d"}, + {file = "mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6"}, +] + +[package.dependencies] +csscompressor = ">=0.9.5" +htmlmin2 = ">=0.1.13" +jsmin = ">=3.0.1" +mkdocs = ">=1.4.1" + [[package]] name = "mkdocstrings" version = "0.24.3" @@ -2469,4 +2516,4 @@ pandas = ["pandas"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<3.14" -content-hash = "a59b6ed2c047dad5ef237d1a4d29fe7c932d60bbd6d742d547bf9f426d154e0d" +content-hash = "aa630d95ec4b3318f8e0cf9cafbd631f1c85d569ce3ecb6bfaf1e938e85e5e7a" diff --git a/pyproject.toml b/pyproject.toml index 21ac3d38..cbc0c73c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,6 +59,7 @@ mkdocs-material = "^9.5.18" mkdocs-include-markdown-plugin = "^6.0.5" mkdocstrings = {version = "^0.24.3", extras = ["python"]} mkdocs-git-revision-date-localized-plugin = "^1.2.4" +mkdocs-minify-plugin = "^0.8.0" [tool.poetry.group.debug.dependencies] ipython = "^8.23.0" From 98ad6582dbec71368bb8d169bdc3f1f94eabbe16 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 03:29:52 +0200 Subject: [PATCH 39/44] remove `%` latex comment --- lmo/diagnostic.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/lmo/diagnostic.py b/lmo/diagnostic.py index 8b04200c..839d078b 100644 --- a/lmo/diagnostic.py +++ b/lmo/diagnostic.py @@ -530,8 +530,6 @@ def l_ratio_bounds( \[ \dot{w}_r^{(s, t)} = - % \frac{r + s + t}{r (r - 1)} - % \frac{\B(r,\ r + s + t)}{\B(r + s,\ r + t)}. \frac{\B(r - 1,\ r + s + t + 1)}{r \B(r + s,\ r + t)}. \] From c32f15da5ed0caedd08d71e8ea36a2dd70015b84 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 06:51:08 +0200 Subject: [PATCH 40/44] several maths fixes in distributions.md --- docs/distributions.md | 511 ++++++++++++++++-------------------------- 1 file changed, 192 insertions(+), 319 deletions(-) diff --git a/docs/distributions.md b/docs/distributions.md index 90720d1f..d4ee6792 100644 --- a/docs/distributions.md +++ b/docs/distributions.md @@ -57,9 +57,9 @@ exist (in closed form). [Uniform](https://w.wiki/8gGh)
[`uniform()`][scipy.stats.uniform] - \( [0, 1] \) - \( \displaystyle \frac 1 2 \) - \( \displaystyle \frac 1 6 \) + + \( \dfrac 1 2 \\ = 0.5 \) + \( \dfrac 1 6 \\ = 0.16\overline{6} \dots \) \( 0 \) \( 0 \) @@ -70,12 +70,11 @@ exist (in closed form). \( 0 \) - \( \displaystyle \frac{1}{\sqrt \pi} \\ \approx 0.5642 \) + \( \dfrac{1}{\sqrt \pi} \\ \approx 0.5642 \) \( 0 \) \( - \displaystyle 30 \ - \frac{\href{#const-theta_m}{\theta_m}}{\pi} - 9 \\ + 30 \dfrac{\href{#const-theta_m}{\theta_m}}{\pi} - 9 \\ \approx 0.1226 \) @@ -89,7 +88,7 @@ exist (in closed form). \( 0 \) \( 1 \) \( 0 \) - \( \displaystyle 1 / 6 \)
+ \( \dfrac 1 6 \\ = 0.16\overline{6} \dots \) @@ -98,9 +97,9 @@ exist (in closed form). \( 0 \) - \( \displaystyle \frac 3 4 \) + \( \dfrac 3 4 \\ = 0.75 \) \( 0 \) - \( \displaystyle \frac{17}{72} \\ \approx 0.2361 \) + \( \dfrac{17}{72} \\ \approx 0.2361 \) @@ -109,9 +108,9 @@ exist (in closed form). \( \nu = 2 \) \( 0 \) - \( \displaystyle \frac{\pi}{2 \sqrt 2} \\ \approx 1.1107 \) + \( \dfrac{\pi}{2 \sqrt 2} \\ \approx 1.1107 \) \( 0 \) - \( \displaystyle \frac 3 8 \\ = 0.375 \) + \( \dfrac 3 8 \\ = 0.375 \) @@ -120,19 +119,9 @@ exist (in closed form). \( \nu = 3 \) \( 0 \) - - \( - \displaystyle \frac{3 \sqrt 3}{\vphantom{\pi^2}2 \pi} \\ - \approx 0.8270 - \) - + \( \dfrac{3 \sqrt 3}{2 \pi} \\ \approx 0.8270 \) \( 0 \) - - \( - \displaystyle 1 - \frac{\vphantom{\sqrt 3}175}{24 \pi^2} \\ - \approx 0.2612 - \) - + \( 1 - \dfrac{175}{24 \pi^2} \\ \approx 0.2612 \) @@ -141,9 +130,9 @@ exist (in closed form). \( \nu = 4 \) \( 0 \) - \( \displaystyle \frac{15}{64} \pi \\ \approx 0.7363 \) + \( \dfrac{15}{64} \pi \\ \approx 0.7363 \) \( 0 \) - \( \displaystyle \frac{111}{512} \\ \approx 0.2168 \) + \( \dfrac{111}{512} \\ \approx 0.2168 \) @@ -151,10 +140,10 @@ exist (in closed form). [`expon()`][scipy.stats.expon] - \( \displaystyle 1 \) - \( \displaystyle \frac 1 2 \) - \( \displaystyle \frac 1 3 \) - \( \displaystyle \frac 1 6 \) + \( 1 \) + \( \dfrac 1 2 \\ = 0.5 \) + \( \dfrac 1 3 \\ = 0.3\overline{3} \dots \) + \( \dfrac 1 6 \\ = 0.16\overline{6} \dots \) @@ -166,10 +155,9 @@ exist (in closed form). \( \sqrt 2 - 1 \\ \approx 0.4142 \) \( - \displaystyle - 7 + 4 \sqrt 2 - 12 (2 - \sqrt 2) \frac - {\href{#const-theta_m}{\theta_m}} - {\pi} + 7 + + 4 \sqrt 2 + - 12 (2 - \sqrt 2) \dfrac{\href{#const-theta_m}{\theta_m}}{\pi} \\ \approx 0.1983 \) @@ -183,22 +171,8 @@ exist (in closed form). \( 2 \ln 2 \\ \approx 1.386 \) \( 1 \) - - \( - \displaystyle - \frac{1}{1 - \ln 2} - 3 \\ - \approx 0.2589 - \) - - - \( - \displaystyle - \frac 1 3 \left( - \frac{-10}{1 - \ln 2} + 33 - \right) \\ - \approx 0.1370 - \) - + \( \dfrac{1}{1 - \ln 2} - 3 \\ \approx 0.2589 \) + \( 11 - \dfrac{10}{3 - \ln 8} \\ \approx 0.1370 \) @@ -206,33 +180,23 @@ exist (in closed form). [`rayleigh()`][scipy.stats.rayleigh] + \( \sqrt{\pi / 2} \\ \approx 1.253 \) \( - \displaystyle - \frac 1 2 \sqrt{2 \pi} \\ - \approx 1.253 - \) - - - \( - \displaystyle - \frac {\sqrt 2 - 1}{2} \sqrt{\pi} \\ + \sqrt{\pi / 2} - \sqrt{\pi / 4} \\ \approx 0.3671 \) \( - \displaystyle - \frac{2 + \sqrt 2}{\sqrt 3} - - \frac{4 + \sqrt{2}}{\sqrt 2} \\ + \dfrac{2 + \sqrt 2}{\sqrt 3} - \dfrac{4 + \sqrt 2}{\sqrt 2} \\ \approx 0.1140 \) \( - \displaystyle - 10 \frac{2 + \sqrt 2}{\sqrt 3} - - 3 \frac{5 + 3 \sqrt 2}{\sqrt 2} \\ + 10 \dfrac{2 + \sqrt 2}{\sqrt 3} + - 3 \dfrac{5 + 3 \sqrt 2}{\sqrt 2} \\ \approx 0.1054 \) @@ -256,8 +220,8 @@ exist (in closed form). \( k = 2 \) \( 2 \) \( 1 \) - \( \displaystyle \frac 1 3 \) - \( \displaystyle \frac 1 6 \) + \( \dfrac 1 3 \\ = 0.3\overline{3} \dots \) + \( \dfrac 1 6 \\ = 0.16\overline{6} \dots \) @@ -266,15 +230,9 @@ exist (in closed form). \( k = 4 \) \( 4 \) - \( \displaystyle \frac 3 2 \) - \( \displaystyle \frac{19}{81} \\ \approx 0.2346 \) - - \( - \displaystyle - \frac{367}{2^5 \cdot 3^4} \\ - \approx 0.1416 - \) - + \( \dfrac 3 2 \\ = 1.5 \) + \( \dfrac{19}{81} \\ \approx 0.2346 \) + \( \dfrac{367}{2^5 \cdot 3^4} \\ \approx 0.1416 \) @@ -283,15 +241,9 @@ exist (in closed form). \( k = 6 \) \( 6 \) - \( \displaystyle \frac{15}{8} \) - \( \displaystyle \frac{139}{729} \\ \approx 0.2346 \) - - \( - \displaystyle - \frac{200\ 827}{2^{11} \cdot 3^6} \\ - \approx 0.1345 - \) - + \( \dfrac{15}{8} \\ = 1.875 \) + \( \dfrac{139}{729} \\ \approx 0.1907 \) + \( \dfrac{200\ 827}{2^{11} \cdot 3^6} \\ \approx 0.1345 \) @@ -313,9 +265,9 @@ Symmetrically trimmed TL-stats of some symmetric distributions. [Uniform](https://w.wiki/8gGh)
[`uniform()`][scipy.stats.uniform] - \( [0, 1] \) - \( \displaystyle \frac 1 2 \) - \( \displaystyle \frac{1}{10} \) + + \( \dfrac 1 2 \\ = 0.5 \) + \( \dfrac{1}{10} \\ = 0.1 \) \( 0 \) \( 0 \) @@ -328,11 +280,9 @@ Symmetrically trimmed TL-stats of some symmetric distributions. \( 0 \) \( - \displaystyle - \frac{6}{\sqrt \pi} - \left( - 1 - 3 \frac{\href{#const-theta_m}{\theta_m}}{\pi} - \right) \\ + \dfrac{6}{\sqrt \pi} \left( + 1 - 3 \dfrac{\href{#const-theta_m}{\theta_m}}{\pi}\right + ) \\ \approx 0.2970 \) @@ -346,9 +296,9 @@ Symmetrically trimmed TL-stats of some symmetric distributions. \( 0 \) - \( \displaystyle \frac 1 2 \) + \( \dfrac 1 2 \\ = 0.5 \) \( 0 \) - \( \displaystyle \frac{1}{12} \\ = 0.083\overline{3} \dots \) + \( \dfrac{1}{12} \\ = 0.083\overline{3} \dots \) @@ -357,9 +307,9 @@ Symmetrically trimmed TL-stats of some symmetric distributions. \( 0 \) - \( \displaystyle \frac{11}{32} \\ = 0.34375 \) + \( \dfrac{11}{32} \\ = 0.34375 \) \( 0 \) - \( \displaystyle \frac{3}{22} \\ = 0.136\overline{36} \dots \) + \( \dfrac{3}{22} \\ = 0.136\overline{36} \dots \) @@ -368,21 +318,12 @@ Symmetrically trimmed TL-stats of some symmetric distributions. \( 0 \) - - \( - \displaystyle - \frac{18}{\pi^3} \ \href{#const-zeta}{\zeta}(3) \\ - \approx 0.6978 - \) - + \( \dfrac{18}{\pi^3} \ \zeta(3) \\ \approx 0.6978 \) \( 0 \) \( - \displaystyle - \frac{25}{6} - \frac{175}{4 \pi^2} \frac - {\href{#const-zeta}{\zeta}(5)} - {\href{#const-zeta}{\zeta}(3)} - \\ + \dfrac{25}{6} + - \dfrac{175}{4 \pi^2} \frac \zeta(5) \zeta(3) \\ \approx 0.3428 \) @@ -394,9 +335,9 @@ Symmetrically trimmed TL-stats of some symmetric distributions. \( \nu = 2 \) \( 0 \) - \( \displaystyle \frac{3 \pi}{16 \sqrt 2} \\ \approx 0.4165 \) + \( \dfrac{3 \pi}{16 \sqrt 2} \\ \approx 0.4165 \) \( 0 \) - \( \displaystyle \frac{5}{32} \\ = 0.15625 \) + \( \dfrac{5}{32} \\ = 0.15625 \) @@ -405,18 +346,11 @@ Symmetrically trimmed TL-stats of some symmetric distributions. \( \nu = 3 \) \( 0 \) - - \( - \displaystyle - \frac{105 \sqrt 3}{16 \pi^3} \\ - \approx 0.3666 - \) - + \( \dfrac{105 \sqrt 3}{16 \pi^3} \\ \approx 0.3666 \) \( 0 \) \( - \displaystyle - \frac{25}{6} - \frac{23 \ 023}{(24 \pi)^2} \\ + \dfrac{25}{6} - \frac{23 \ 023}{(24 \pi)^2} \\ \approx 0.1168 \) @@ -428,21 +362,9 @@ Symmetrically trimmed TL-stats of some symmetric distributions. \( \nu = 4 \) \( 0 \) - - \( - \displaystyle - \frac{3\ 609\ \pi}{32\ 768} \\ - \approx 0.3460 - \) - + \( \dfrac{3\ 609\ \pi}{32\ 768} \\ \approx 0.3460 \) \( 0 \) - - \( - \displaystyle - \frac{164 \ 975}{1 \ 642 \ 496} \\ - \approx 0.1004 - \) - + \( \dfrac{164 \ 975}{1 \ 642 \ 496} \\ \approx 0.1004 \) @@ -452,25 +374,22 @@ Symmetrically trimmed TL-stats of some symmetric distributions. \( - \displaystyle \href{#const-euler}{\gamma_e} - 2 \ln 3 + 3 \ln 2 \\ \approx 0.4594 \) - \( \displaystyle 6 \ln 3 - 9 \ln 2 \\ \approx 0.3533 \) + \( 6 \ln 3 - 9 \ln 2 \\ \approx 0.3533 \) \( - \displaystyle - -\frac{10}{9} - \frac{5 - 2 \log_2(5)}{3 - 2 \log_2(3)} - \frac{20}{9} \\ + - \dfrac{10}{9} \dfrac{5 - 2 \log_2(5)}{3 - 2 \log_2(3)} + - \frac{20}{9} \\ \approx 0.1065 \) \( - \displaystyle - \frac{35}{6} - \frac{7 - 3 \log_2(5)}{3 - 2 \log_2(3)} + \frac{5}{4} \\ + \dfrac{35}{6} \dfrac{7 - 3 \log_2(5)}{3 - 2 \log_2(3)} + + \dfrac{5}{4} \\ \approx 0.07541 \) @@ -496,10 +415,10 @@ Right-trimmed LL-stats of some simple left-bound distributions. [`expon()`][scipy.stats.expon] - \( \displaystyle \frac 1 2 \) - \( \displaystyle \frac 1 4 \) - \( \displaystyle \frac 2 9 \\ = 0.2\overline{2} \dots \) - \( \displaystyle \frac{1}{12} \\ = 0.083\overline{3} \dots \) + \( \dfrac 1 2 \\ = 0.5 \) + \( \dfrac 1 4 \\ = 0.25 \) + \( \dfrac 2 9 \\ = 0.2\overline{2} \dots \) + \( \dfrac{1}{12} \\ = 0.083\overline{3} \dots \) @@ -510,9 +429,8 @@ Right-trimmed LL-stats of some simple left-bound distributions. \( 2 - \sqrt 2 \\ \approx 0.5858 \) \( - \displaystyle - 9 \sqrt 2 \ \frac{\href{#const-theta_m}{\theta_m}}{\pi} - - 3 \frac{1 + \sqrt 2}{2} \\ + 9 \sqrt 2 \ \dfrac{\href{#const-theta_m}{\theta_m}}{\pi} + - 3 \dfrac{1 + \sqrt 2}{2} \\ \approx 0.2491 \) @@ -528,19 +446,14 @@ Right-trimmed LL-stats of some simple left-bound distributions. \( 1 \) \( - \displaystyle - \frac{4}{27} \left( - \frac{5}{3 - 4 \ln 2} - 21 - \right) \\ + \dfrac{4}{27} \left( \dfrac{5}{3 - 4 \ln 2} - 21 \right) \\ \approx 0.1462 \) \( - \displaystyle - \frac{5}{36} \left( - \frac{-19}{3 - 4 \ln 2} + 84 - \right) \\ + \dfrac{5}{36} + \left( \dfrac{-19}{3 - 4 \ln 2} + 84 \right) \\ \approx 0.06263 \) @@ -550,32 +463,30 @@ Right-trimmed LL-stats of some simple left-bound distributions. [Half-Cauchy](https://w.wiki/8hTq)
[`halfcauchy()`][scipy.stats.halfcauchy] - \( \displaystyle \frac{4 \ln 2}{\pi} \\ \approx 0.8825 \) + \( \dfrac{4 \ln 2}{\pi} \\ \approx 0.8825 \) \( - \displaystyle - \frac{63 \href{#const-zeta}{\mathop{\zeta}}(3)}{2 \pi^3} - - \frac{3 \ln 2}{\pi} \\ + \dfrac{63 \href{#const-zeta}{\mathop{\zeta}}(3)}{2 \pi^3} + - \dfrac{3 \ln 2}{\pi} \\ \approx 0.5593 \) \( - \displaystyle - \frac + \dfrac {40 \mathop{\zeta}(3)} {63 \mathop{\zeta}(3) - 9 \pi^2 \ln 2} - - \frac 8 9 \\ + - \frac 8 9 \\ \approx 0.4974 \) \( - \displaystyle - \frac{155}{2} \frac + \dfrac{155}{2} + \dfrac {3 \mathop{\zeta}(3) - 35 \pi^{-2} \mathop{\zeta}(5)} {21 \mathop{\zeta}(3) - 2 \pi^2 \ln 2} - + \frac{5}{6}\\ + + \dfrac 5 6 \\ \approx 0.3572 \) @@ -586,30 +497,19 @@ Right-trimmed LL-stats of some simple left-bound distributions. [`rayleigh()`][scipy.stats.rayleigh] - \( \displaystyle \frac{\sqrt \pi}{2} \\ \approx 0.8862 \) + \( \dfrac{\sqrt \pi}{2} \\ \approx 0.8862 \) + \( \dfrac{3 - \sqrt 6}{4} \sqrt \pi \\ \approx 0.2439 \) \( - \displaystyle - \frac{3 - \sqrt 6}{4} \sqrt \pi \\ - \approx 0.2439 - \) - - - \( - \displaystyle - \frac{10}{9} \left( - 3 \sqrt 2 + 2 \sqrt 3 - 2 \sqrt 6 - \right) - \frac{28}{9} \\ + \dfrac{10}{9} \left( 3 \sqrt 2 + 2 \sqrt 3 - 2 \sqrt 6 \right) + - \frac{28}{9} \\ \approx 0.008\ 625 \) \( - \displaystyle - \frac{1}{4} \frac - {80 - 75 \sqrt 2 + 14 \sqrt{10}} - {\sqrt 6 - 3} - + \frac{25}{3} \\ + \dfrac 1 4 \dfrac{80 - 75 \sqrt 2 + 14 \sqrt{10}}{\sqrt 6 - 3} + + \dfrac{25}{3} \\ \approx 0.06561 \) @@ -620,35 +520,19 @@ Right-trimmed LL-stats of some simple left-bound distributions. [`gumbel_r()`][scipy.stats.gumbel_r] - - \( - \displaystyle - \href{#const-euler}{\gamma_e} - \ln 2 \\ - \approx -0.1159 - \) + \( \href{#const-euler}{\gamma_e} - \ln 2 \\ \approx -0.1159 \) + \( 3 \ln 2 - \dfrac 3 2 \ln 3 \\ \approx 0.4315 \) \( - \displaystyle - 3 \ln 2 - \frac{3}{2} \ln 3 \\ - \approx 0.4315 - \) - - - \( - \displaystyle - \frac{4}{9} \left( - \frac{5}{2 - \log_2(3)} - 12 - \right) \\ + \dfrac 4 9 \left( \dfrac{5}{2 - \log_2(3)} - 12 \right) \\ \approx 0.02094 \) \( - \displaystyle - \frac{5}{6} \left( - \frac{8 - 7 \log_2(5)}{2 - \hphantom{1}\log_2(3)} + 20 - \right) \\ + \dfrac 5 6 + \left( \dfrac{8 - 7 \log_2(5)}{2 - \log_2(3)} + 20 \right) \\ \approx 0.09488 \) @@ -660,9 +544,9 @@ Right-trimmed LL-stats of some simple left-bound distributions. \( k = 2 \) \( 1 \) - \( \displaystyle \frac 1 2 \) - \( \displaystyle \frac 2 9 \) - \( \displaystyle \frac{1}{12} \) + \( \dfrac 1 2 \\ = 0.5 \) + \( \dfrac 2 9 \\ = 0.2\overline{2}\ldots \) + \( \dfrac{1}{12} \\ = 0.083\overline{3}\ldots \) @@ -670,16 +554,10 @@ Right-trimmed LL-stats of some simple left-bound distributions. [`chi2(4)`][scipy.stats.chi2] \( k = 4 \) - \( \displaystyle \frac 5 2 \) - \( \displaystyle \frac{31}{36} \\ = 0.861\overline{1}\dots \) - \( \displaystyle \frac{241}{2\ 232} \\ \approx 0.1080 \) - - \( - \displaystyle - \frac{282\ 127}{372 \cdot 10^4} \\ - \approx 0.07584 - \) - + \( \dfrac 5 2 \\ = 2.5 \) + \( \dfrac{31}{36} \\ = 0.861\overline{1}\dots \) + \( \dfrac{241}{2\ 232} \\ \approx 0.1080 \) + \( \dfrac{282\ 127}{372 \cdot 10^4} \\ \approx 0.07584 \) @@ -687,19 +565,12 @@ Right-trimmed LL-stats of some simple left-bound distributions. [`chi2(6)`][scipy.stats.chi2] \( k = 6 \) - \( \displaystyle \frac{33}{8} \) - \( \displaystyle \frac{1\ 475}{1\ 296} \\ \approx 1.138 \) + \( \dfrac{33}{8} \\ = 4.125 \) + \( \dfrac{1\ 475}{1\ 296} \\ \approx 1.138 \) + \( \dfrac{16\ 769}{271\ 872} \\ \approx 0.06168 \) \( - \displaystyle - \frac{16\ 769}{271\ 872} \\ - \approx 0.06168 - \) - - - \( - \displaystyle - \frac{550\ 465\ 668\ 887}{708 \cdot 10^{10}} \\ + \dfrac{550\ 465\ 668\ 887}{708 \cdot 10^{10}} \\ \approx 0.07775 \) @@ -1072,12 +943,12 @@ There are several notable special cases of the Burr XII distribution: [Pareto IV](https://w.wiki/8htG#Pareto_types_I–IV) : Burr XII is a reparametrized standard *Pareto type IV* distribution with -shapes \( \gamma \equiv 1 / \alpha \) and \( \alpha' \equiv \beta \), location -\( \mu = 0 \), and scale \( \sigma = 1 \). +shapes \( \gamma \equiv 1 / \alpha \) and \( \alpha^{\prime} \equiv \beta \), +location \( \mu = 0 \), and scale \( \sigma = 1 \). [Lomax](https://wikipedia.org/wiki/Lomax_distribution) : With \( \alpha = 1 \) Burr XII is *Lomax* with shape -\( \alpha' \equiv \beta \) and scale \( \sigma = 1 \). +\( \alpha^{\prime} \equiv \beta \) and scale \( \sigma = 1 \). [Log-logistic / Fisk](https://wikipedia.org/wiki/Log-logistic_distribution) : With \( \beta = 1 \) Burr XII is *Log-logistic* with shape @@ -1572,17 +1443,15 @@ and constants. \( \gamma_e \) - $$ - \begin{align\*} - &= \lim_{x \to 0} \left( \frac 1 x - \Gamma(x) \right) \\\\ - &= \int_1^\infty - \left( - \frac{1}{\lfloor x \rfloor} - \frac 1 x - \right) \ - \mathrm{d} x \\\\ - &\approx 0.5772 \vphantom{\frac 1 1} - \end{align\*} - $$ + \( + \displaystyle + = \lim_{x \to 0} + \left( {1 \over x} - \Gamma(x) \right) \\ + = \int_1^\infty + \left( {1 \over \lfloor x \rfloor} - {1 \over x} \right) + \dd{x} \\ + \approx 0.5772 \vphantom{\frac 1 1} + \) [`numpy.euler_gamma`][numpy.euler_gamma] @@ -1592,12 +1461,11 @@ and constants. \( \theta_m \) - $$ - \begin{align\*} - &= \tan^{-1} \sqrt 2 = \cos^{-1} \frac{1}{\sqrt 3} \\\\ - &\approx 0.9553 - \end{align\*} - $$ + \( + = \arctan \sqrt 2 \\ + = \arccos \dfrac{1}{\sqrt 3} \\ + \approx 0.9553 + \) [`lmo.constants.theta_m`][lmo.constants.theta_m] @@ -1608,9 +1476,10 @@ and constants. \( \Gamma_a(z) \) - $$ - = \int_a^\infty t^{z - 1} e^{-t} \, \mathrm{d} t - $$ + \( + \displaystyle + = \int_a^\infty t^{z - 1} \ e^{-t} \dd{t} + \) [`lmo.special.gamma2`][lmo.special.gamma2] @@ -1634,13 +1503,18 @@ and constants. \( \digamma(z) \) - $$ - \begin{align\*} - &= \frac{\mathrm{d}}{\mathrm{d}z} \ln \Gamma(z) - = \frac{\Gamma'(z)}{\Gamma(z)} \\\\ - &= \int_0^1 \frac{1 - t^z}{1 - t} \mathrm{d} t - \gamma_e - \end{align\*} - $$ + \( + \displaystyle + = \frac + {\Gamma^{\prime}(z)} + {\Gamma(z)} \\ + = \int_{\lbrack 0, 1 \rbrack} + \frac + {1 - t^z} + {1 - t^{\hphantom{1}}} + \dd{t} + - \gamma_e + \) [`scipy.special.digamma`][scipy.special.digamma] @@ -1650,12 +1524,14 @@ and constants. \( \B(x,\ y) \) - $$ - \begin{align\*} - &= \frac{\Gamma(x) \Gamma(y)}{\Gamma(x + y)} \\\\ - &= \int_0^1 t^{x - 1} (1 - t)^{y - 1} \ \mathrm{d} t - \end{align\*} - $$ + \( + \displaystyle + = \frac + {\Gamma(x) \ \Gamma(y)} + {\Gamma(x + y)} \\ + = \int_{\lbrack 0, 1 \rbrack} + t^{x - 1} \ (1 - t)^{y - 1} \dd{t} + \) [`scipy.special.beta`][scipy.special.beta] @@ -1666,9 +1542,9 @@ and constants. \( \zeta(z) \) - $$ - = \sum_{n = 1}^{\infty} \frac{1}{n^z} - $$ + \( + = \displaystyle \sum_{n = 1}^{\infty} n^{-z} + \) [`scipy.special.zeta`][scipy.special.zeta] @@ -1676,16 +1552,12 @@ and constants. [Factorial](https://wikipedia.org/wiki/Factorial) - $$ n! \vphantom{\prod_{k=1}^n k} $$ + \( n! \vphantom{\prod_{k=1}^n k} \) - $$ - = \begin{cases} - \displaystyle \prod_{k=1}^n k - & \text{if } n \in \mathbb{N} \\\\ - \displaystyle \Gamma(n - 1) - & \text{otherwise} - \end{cases} - $$ + \( + = \displaystyle \prod_{k = 1}^n n \\ + = \Gamma(n - 1) + \) [`math.factorial`][math.factorial]
@@ -1700,11 +1572,12 @@ and constants. \( \ffact{x}{n} \) - $$ - = \frac{x!}{(x - n)!} - = \frac{\Gamma(x + 1)}{\Gamma(x - n + 1)} - = \rfact{x - n + 1}{n} - $$ + \( + \displaystyle + = \frac{x!}{(x - n)!} \\ + = \frac{\Gamma(x + 1)}{\Gamma(x - n + 1)} \\ + = \rfact{x - n + 1}{n} \\ + \) [`lmo.special.fpow`][lmo.special.fpow] @@ -1716,11 +1589,12 @@ and constants. \( \rfact{x}{n} \) - $$ - = \frac{\Gamma(x + n)}{\Gamma(x)} - = \frac{(x + n - 1)!}{(x - 1)!} + \( + \displaystyle + = \frac{\Gamma(x + n)}{\Gamma(x)} \\ + = \frac{(x + n - 1)!}{(x - 1)!} \\ = \ffact{x + n - 1}{n} - $$ + \) [`scipy.special.poch`][scipy.special.poch] @@ -1729,12 +1603,13 @@ and constants. [Binomial coefficient ](https://wikipedia.org/wiki/Binomial_coefficient) - $$ \binom n k $$ + \( \displaystyle \binom n k \) - $$ - = \frac{n!}{k! \ (n - k)!} + \( + \displaystyle + = \frac{n!}{k! \ (n - k)!} \\ = \frac{1}{k \ \B(k,\ n - k + 1)} - $$ + \) [`math.comb`][math.comb]
@@ -1748,14 +1623,14 @@ and constants. \( H_n \) - $$ - = \begin{cases} - \displaystyle \sum_{k=1}^n \frac{1}{k} - & \text{if } n \in \mathbb{N} \\\\ - \displaystyle \digamma(n + 1) + \gamma_e - & \text{otherwise} - \end{cases} - $$ + \( + = \begin{cases} + \displaystyle \sum_{k=1}^n \frac 1 k + & \text{if } n \in \naturals \\ + \digamma(n + 1) + \gamma_e + & \text{otherwise} + \end{cases} + \) [`lmo.special.harmonic`][lmo.special.harmonic] @@ -1765,13 +1640,15 @@ and constants. \( \jacobi{n}{\alpha}{\beta}{x} \) - $$ - = \frac{1}{2^n} \sum_{k=0}^n - \binom{n + \alpha}{k} - \binom{n + \beta}{n - k} - (x + 1)^{n + k} - (x - 1)^{n - k} - $$ + \( + = \displaystyle + \frac{1}{2^n} + \sum_{k=0}^n + \binom{n + \alpha}{k} + \binom{n + \beta}{n - k} + (x + 1)^{n + k} + (x - 1)^{n - k} + \) [`scipy.special.eval_jacobi`][scipy.special.eval_jacobi] @@ -1781,14 +1658,12 @@ and constants. \( \qexp{1 - q}{x} \) - $$ - = \begin{cases} - \displaystyle e^x - & \text{if } q = 0 \\\\ - \displaystyle (1 + q x)^{\frac{1}{q}} - & \text{otherwise} - \end{cases} - $$ + \( + = \begin{cases} + e^x & \text{if } q = 0 \\ + (1 + q x)^{\frac{1}{q}} & \text{otherwise} + \end{cases} + \) [`scipy.special.inv_boxcox`][scipy.special.boxcox] @@ -1800,14 +1675,12 @@ and constants. \( \qlog{1 - q}{y} \) - $$ - = \begin{cases} - \displaystyle \ln y - & \text{if } q = 0 \\\\ - \displaystyle \frac{y^q - 1}{q} - & \text{otherwise} + \( + = \begin{cases} + \ln y & \text{if } q = 0 \\ + (y^q - 1) / q & \text{otherwise} \end{cases} - $$ + \) [`scipy.special.boxcox`][scipy.special.boxcox] From ce683ab11fc40188be45f86180301660149ce1e0 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 06:54:27 +0200 Subject: [PATCH 41/44] improved katex readability and error handling --- docs/scripts/katex.js | 6 ++++-- docs/styles/katex.css | 18 ++++++++++++++++++ mkdocs.yml | 5 +++-- 3 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 docs/styles/katex.css diff --git a/docs/scripts/katex.js b/docs/scripts/katex.js index 0df54122..a82c3386 100644 --- a/docs/scripts/katex.js +++ b/docs/scripts/katex.js @@ -1,13 +1,15 @@ document$.subscribe(({ body }) => { renderMathInElement(body, { + // strict: "error", + strict: "error", + throwOnError: true, + trust: true, delimiters: [ {left: "$$", right: "$$", display: true}, {left: "$", right: "$", display: false}, {left: "\\(", right: "\\)", display: false}, {left: "\\[", right: "\\]", display: true}, ], - throwOnError: false, - trust: true, macros: { // Statistical operators "\\E": "\\mathop{\\mathrm{E}}", diff --git a/docs/styles/katex.css b/docs/styles/katex.css new file mode 100644 index 00000000..04adc752 --- /dev/null +++ b/docs/styles/katex.css @@ -0,0 +1,18 @@ +.katex { + font-size: 1.125em; +} + +.katex-display { + margin: 0; + overflow: auto hidden; +} +.katex-display > .katex { + font-size: 1.2em; +} +.katex-display > .base { + margin: 0.25em 0; +} + +.katex-html .newline { + min-height: 0.375em; +} diff --git a/mkdocs.yml b/mkdocs.yml index b612ca00..e30bf577 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -131,14 +131,15 @@ markdown_extensions: custom_checkbox: true extra_css: - - styles/theme.css - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.css + - styles/theme.css + - styles/katex.css extra_javascript: - - scripts/katex.js - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.js - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/auto-render.min.js - https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/copy-tex.min.js + - scripts/katex.js watch: - docs From 58317a3aff9776db2720e4f61fe7a6e4d2681625 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 07:07:06 +0200 Subject: [PATCH 42/44] add pre-commit hook for `mkdocs build` --- .pre-commit-config.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 77679832..1a0c488e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -23,6 +23,15 @@ repos: args: [--markdown-linebreak-ext=md] exclude_types: [svg] + - repo: local + hooks: + - id: mkdocs-build + name: mkdocs build + entry: bash -c 'poetry run mkdocs build' + language: system + types: [markdown] + pass_filenames: false + - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.39.0 hooks: From bac007d033450b455b268fa7c4a6d9a45087a6fa Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 07:17:36 +0200 Subject: [PATCH 43/44] connect GA4 property --- mkdocs.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mkdocs.yml b/mkdocs.yml index e30bf577..28f8b94e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -37,6 +37,9 @@ theme: accent: skin extra: + analytics: + provider: google + property: G-KH79N7XQCE social: - icon: fontawesome/brands/github link: https://github.com/jorenham/ From 9a009756f5a157d33c6ad4a4a7e86a67c7affa17 Mon Sep 17 00:00:00 2001 From: jorenham Date: Sun, 21 Apr 2024 07:28:31 +0200 Subject: [PATCH 44/44] bump to 0.13.1 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index cbc0c73c..d1d051c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api" [tool.poetry] name = "lmo" -version = "0.13.0" +version = "0.13.1" description = "L-Moments for robust statistics & inference." authors = ["Joren Hammudoglu "] readme = "README.md"