diff --git a/mkdocs.yml b/mkdocs.yml index 571dbfa..f3f375d 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -49,6 +49,9 @@ plugins: - literate-nav: nav_file: nav_file.md implicit_index: false +- redirects: + redirect_maps: + 'index.md': 'home/installation.md' - mkdocstrings: handlers: diff --git a/poetry.lock b/poetry.lock index 6ee4645..a9dcdb5 100644 --- a/poetry.lock +++ b/poetry.lock @@ -242,13 +242,13 @@ typeguard = ">=2.13.3,<2.14.0" [[package]] name = "babel" -version = "2.14.0" +version = "2.15.0" description = "Internationalization utilities" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] [package.extras] @@ -335,13 +335,13 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "blinker" -version = "1.8.0" +version = "1.8.2" description = "Fast, simple object-to-object and broadcast signaling" optional = false python-versions = ">=3.8" files = [ - {file = "blinker-1.8.0-py3-none-any.whl", hash = "sha256:5f2c330c2586b5d4c5ece65e4dd9fa6512192d946f7c1aaac31ca0380d5d041f"}, - {file = "blinker-1.8.0.tar.gz", hash = "sha256:a07839c713d30141433647247db269dd896895b0bf56d2362f663496feae562b"}, + {file = "blinker-1.8.2-py3-none-any.whl", hash = "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01"}, + {file = "blinker-1.8.2.tar.gz", hash = "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83"}, ] [[package]] @@ -1236,13 +1236,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -1253,13 +1253,13 @@ i18n = ["Babel (>=2.7)"] [[package]] name = "jsii" -version = "1.97.0" +version = "1.98.0" description = "Python client for jsii runtime" optional = true python-versions = "~=3.8" files = [ - {file = "jsii-1.97.0-py3-none-any.whl", hash = "sha256:5dd347cc9d279072c109829aaff11dae1c7f13169ce60887f1c1ab2c4cd4abcd"}, - {file = "jsii-1.97.0.tar.gz", hash = "sha256:e6db98e34730cd972d180b7f4e21182b9a5105f537672716940b930ee933a1f2"}, + {file = "jsii-1.98.0-py3-none-any.whl", hash = "sha256:3067d523126ce8178374dd958c60350efc831fc2ef3eb94a0a755d64fa4cc22d"}, + {file = "jsii-1.98.0.tar.gz", hash = "sha256:64bbaf9c494626bc0afd1b95834f0dba66a2f2ecbb0da97fa3000c4b01d67857"}, ] [package.dependencies] @@ -1284,13 +1284,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.21.1" +version = "4.22.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, - {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, + {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, + {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, ] [package.dependencies] @@ -1820,6 +1820,24 @@ files = [ [package.dependencies] mkdocs = "*" +[[package]] +name = "mkdocs-redirects" +version = "1.2.1" +description = "A MkDocs plugin for dynamic page redirects to prevent broken links." +optional = true +python-versions = ">=3.6" +files = [ + {file = "mkdocs-redirects-1.2.1.tar.gz", hash = "sha256:9420066d70e2a6bb357adf86e67023dcdca1857f97f07c7fe450f8f1fb42f861"}, +] + +[package.dependencies] +mkdocs = ">=1.1.1" + +[package.extras] +dev = ["autoflake", "black", "isort", "pytest", "twine (>=1.13.0)"] +release = ["twine (>=1.13.0)"] +test = ["autoflake", "black", "isort", "pytest"] + [[package]] name = "mkdocstrings" version = "0.24.0" @@ -2029,13 +2047,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.16.3" +version = "7.16.4" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"}, - {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"}, + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, ] [package.dependencies] @@ -2057,9 +2075,9 @@ tinycss2 = "*" traitlets = ">=5.1" [package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] +qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] @@ -2431,13 +2449,13 @@ ptyprocess = ">=0.5" [[package]] name = "platformdirs" -version = "4.2.1" +version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, - {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] @@ -2697,17 +2715,16 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] @@ -2729,13 +2746,13 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] [[package]] name = "pymdown-extensions" -version = "10.8" +version = "10.8.1" description = "Extension pack for Python Markdown." optional = true python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.8-py3-none-any.whl", hash = "sha256:3539003ff0d5e219ba979d2dc961d18fcad5ac259e66c764482e8347b4c0503c"}, - {file = "pymdown_extensions-10.8.tar.gz", hash = "sha256:91ca336caf414e1e5e0626feca86e145de9f85a3921a7bcbd32890b51738c428"}, + {file = "pymdown_extensions-10.8.1-py3-none-any.whl", hash = "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb"}, + {file = "pymdown_extensions-10.8.1.tar.gz", hash = "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940"}, ] [package.dependencies] @@ -2996,13 +3013,13 @@ py = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "referencing" -version = "0.35.0" +version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.35.0-py3-none-any.whl", hash = "sha256:8080727b30e364e5783152903672df9b6b091c926a146a759080b62ca3126cd6"}, - {file = "referencing-0.35.0.tar.gz", hash = "sha256:191e936b0c696d0af17ad7430a3dc68e88bc11be6514f4757dc890f04ab05889"}, + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] [package.dependencies] @@ -3011,104 +3028,90 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2024.4.16" +version = "2024.5.15" description = "Alternative regular expression module, to replace re." optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {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"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, + {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, + {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, + {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, + {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, + {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, + {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, + {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, + {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, + {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, + {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, + {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, ] [[package]] @@ -3173,110 +3176,110 @@ files = [ [[package]] name = "rpds-py" -version = "0.18.0" +version = "0.18.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, - {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"}, - {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"}, - {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"}, - {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"}, - {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"}, - {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"}, - {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"}, - {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"}, - {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"}, - {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"}, - {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"}, - {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"}, + {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"}, + {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"}, + {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"}, + {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"}, + {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"}, + {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"}, + {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"}, + {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"}, + {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"}, + {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"}, + {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"}, ] [[package]] @@ -3403,17 +3406,18 @@ doc = ["ipython", "numpydoc", "sphinx (>=1.1,<6)", "sphinx-rtd-theme"] [[package]] name = "tenacity" -version = "8.2.3" +version = "8.3.0" description = "Retry code until it succeeds" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, - {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, + {file = "tenacity-8.3.0-py3-none-any.whl", hash = "sha256:3649f6443dbc0d9b01b9d8020a9c4ec7a1ff5f6f3c6c8a036ef371f573fe9185"}, + {file = "tenacity-8.3.0.tar.gz", hash = "sha256:953d4e6ad24357bceffbc9707bc74349aca9d245f68eb65419cf0c249a1949a2"}, ] [package.extras] -doc = ["reno", "sphinx", "tornado (>=4.5)"] +doc = ["reno", "sphinx"] +test = ["pytest", "tornado (>=4.5)", "typeguard"] [[package]] name = "terminado" @@ -3683,13 +3687,13 @@ test = ["websockets"] [[package]] name = "werkzeug" -version = "3.0.2" +version = "3.0.3" description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.2-py3-none-any.whl", hash = "sha256:3aac3f5da756f93030740bc235d3e09449efcf65f2f55e3602e1d851b8f48795"}, - {file = "werkzeug-3.0.2.tar.gz", hash = "sha256:e39b645a6ac92822588e7b39a692e7828724ceae0b0d702ef96701f90e70128d"}, + {file = "werkzeug-3.0.3-py3-none-any.whl", hash = "sha256:fc9645dc43e03e4d630d23143a04a7f947a9a3b5727cd535fdfe155a17cc48c8"}, + {file = "werkzeug-3.0.3.tar.gz", hash = "sha256:097e5bfda9f0aba8da6b8545146def481d06aa7d3266e7448e2cccf67dd8bd18"}, ] [package.dependencies] @@ -3711,24 +3715,24 @@ files = [ [[package]] name = "zipp" -version = "3.18.1" +version = "3.18.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zipp-3.18.2-py3-none-any.whl", hash = "sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e"}, + {file = "zipp-3.18.2.tar.gz", hash = "sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] dev = ["aws-cdk-lib", "bcrypt", "cryptography", "fastapi", "httpx", "mangum", "mysql-connector-python", "pyjwt", "uvicorn"] -docs = ["griffe", "mkdocs", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material", "mkdocs-open-in-new-tab", "mkdocstrings", "python-multipart"] +docs = ["griffe", "mkdocs", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material", "mkdocs-open-in-new-tab", "mkdocs-redirects", "mkdocstrings", "python-multipart"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.13" -content-hash = "eb3dcf4780c15bf84bac49543948aa24e5aba6b9f9b3d87f734941a4348ed449" +content-hash = "9ad84188abf201bd2d21bc61ad6d8b58969693ffc10ee0726719be304086d407" diff --git a/pyproject.toml b/pyproject.toml index 3525a18..0c9434d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -41,11 +41,12 @@ mkdocs-gen-files = { version = "0.5.0", optional = true } mkdocs-literate-nav = {version = "0.6.1", optional = true} mkdocs-material = { version = "9.4.14", optional = true } mkdocs-open-in-new-tab = { version = "1.0.3", optional = true } +mkdocs-redirects = { version = "1.2.1", optional = true } python-multipart = {version = "0.0.9", optional = true} [tool.poetry.extras] dev = ["aws-cdk-lib", "bcrypt", "cryptography", "fastapi", "httpx", "mangum", "mysql-connector-python", "pyjwt", "uvicorn"] -docs = ["griffe", "mkdocs", "mkdocstrings", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material", "mkdocs-open-in-new-tab", "python-multipart"] +docs = ["griffe", "mkdocs", "mkdocstrings", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material", "mkdocs-open-in-new-tab", "mkdocs-redirects", "python-multipart"] [build-system] requires = ["poetry-core"] diff --git a/tests/strategy/nb_strat_tester_long.ipynb b/tests/strategy/nb_strat_tester_long.ipynb deleted file mode 100644 index 8d57918..0000000 --- a/tests/strategy/nb_strat_tester_long.ipynb +++ /dev/null @@ -1,593 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# import sys\n", - "# import os\n", - "\n", - "# sys.dont_write_bytecode = True\n", - "# os.environ[\"NUMBA_DISABLE_JIT\"] = \"1\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from env import MufexKeys\n", - "from quantfreedom.exchanges.mufex import Mufex\n", - "from quantfreedom.enums import *\n", - "from numba import njit, typed, types\n", - "from quantfreedom.nb_funcs.nb_custom_logger import *\n", - "from quantfreedom.nb_funcs.nb_helper_funcs import nb_float_to_str\n", - "from quantfreedom.helper_funcs import dos_cart_product\n", - "from quantfreedom.nb_funcs.nb_helper_funcs import nb_get_dos\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_stop_loss import *\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_increase_position import *\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_leverage import *\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_take_profit import *\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_decrease_position import *\n", - "\n", - "\n", - "mufex_main = Mufex(\n", - " api_key=MufexKeys.api_key,\n", - " secret_key=MufexKeys.secret_key,\n", - " use_testnet=False,\n", - ")\n", - "\n", - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "candles = mufex_main.get_candles(\n", - " symbol=\"BTCUSDT\",\n", - " timeframe=\"5m\",\n", - " candles_to_dl=200,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "mufex_main.set_exchange_settings(\n", - " symbol=\"BTCUSDT\",\n", - " position_mode=PositionModeType.HedgeMode,\n", - " leverage_mode=LeverageModeType.Isolated,\n", - ")\n", - "\n", - "# backtest_settings_tuple = BacktestSettings(\n", - "# array_size=1000,\n", - "# gains_pct_filter=0,\n", - "# total_trade_filter=40,\n", - "# upside_filter=0,\n", - "# )\n", - "\n", - "backtest_settings_tuple = BacktestSettings()\n", - "dos_tuple = DynamicOrderSettings(\n", - " max_equity_risk_pct=np.array([12]),\n", - " max_trades=np.array([5]),\n", - " account_pct_risk_per_trade=np.array([3]),\n", - " risk_reward=np.array([2.5]),\n", - " sl_based_on_add_pct=np.array([0.05, 0.1, 0.15]),\n", - " sl_based_on_lookback=np.array([20]),\n", - " sl_bcb_type=np.array([CandleBodyType.Low]),\n", - " sl_to_be_cb_type=np.array([CandleBodyType.Nothing]),\n", - " sl_to_be_when_pct=np.array([0]),\n", - " trail_sl_bcb_type=np.array([CandleBodyType.Low]),\n", - " trail_sl_by_pct=np.array([0.5]),\n", - " trail_sl_when_pct=np.array([1]),\n", - ")\n", - "static_os_tuple = StaticOrderSettings(\n", - " increase_position_type=IncreasePositionType.RiskPctAccountEntrySize,\n", - " leverage_strategy_type=LeverageStrategyType.Dynamic,\n", - " logger_bool=True,\n", - " num_candles=50,\n", - " pg_min_max_sl_bcb=\"min\",\n", - " sl_strategy_type=StopLossStrategyType.SLBasedOnCandleBody,\n", - " sl_to_be_bool=False,\n", - " starting_bar=50,\n", - " starting_equity=1000.0,\n", - " static_leverage=None,\n", - " tp_fee_type=\"limit\",\n", - " tp_strategy_type=TakeProfitStrategyType.RiskReward,\n", - " trail_sl_bool=True,\n", - " z_or_e_type=None,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "dos_tuple = dos_cart_product(\n", - " dos_tuple=dos_tuple,\n", - ")\n", - "dynamic_order_settings = nb_get_dos(\n", - " dos_tuple=dos_tuple,\n", - " set_idx=0,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "log_func_type = types.void(types.unicode_type)\n", - "logger = typed.List.empty_list(log_func_type.as_type())\n", - "\n", - "str_func_type = types.unicode_type(types.float64)\n", - "stringer = typed.List.empty_list(str_func_type.as_type())\n", - "\n", - "# logger.append(nb_logger_pass)\n", - "# logger.append(nb_logger_pass)\n", - "# logger.append(nb_logger_pass)\n", - "# logger.append(nb_logger_pass)\n", - "\n", - "# stringer.append(nb_stringer_pass)\n", - "# stringer.append(nb_stringer_pass)\n", - "# stringer.append(nb_stringer_pass)\n", - "# stringer.append(nb_stringer_pass)\n", - "# stringer.append(nb_stringer_pass)\n", - "\n", - "logger.append(nb_log_debug)\n", - "logger.append(nb_log_info)\n", - "logger.append(nb_log_warning)\n", - "logger.append(nb_log_error)\n", - "\n", - "stringer.append(nb_float_to_str)\n", - "stringer.append(nb_log_datetime)\n", - "stringer.append(nb_candle_body_str)\n", - "stringer.append(nb_z_or_e_str)\n", - "stringer.append(nb_os_to_str)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "account_state = AccountState(\n", - " # where we are at\n", - " set_idx=-1,\n", - " set_idx=-1,\n", - " bar_index=-1,\n", - " timestamp=-1,\n", - " # account info\n", - " available_balance=static_os_tuple.starting_equity,\n", - " cash_borrowed=0.0,\n", - " cash_used=0.0,\n", - " equity=static_os_tuple.starting_equity,\n", - " fees_paid=0.0,\n", - " total_possible_loss=0.0,\n", - " realized_pnl=0.0,\n", - " total_trades=0,\n", - ")\n", - "order_result = OrderResult(\n", - " average_entry=0.0,\n", - " can_move_sl_to_be=False,\n", - " entry_price=0.0,\n", - " entry_size_asset=0.0,\n", - " entry_size_usd=0.0,\n", - " exit_price=0.0,\n", - " leverage=1.0,\n", - " liq_price=0.0,\n", - " order_status=OrderStatus.Nothing,\n", - " position_size_asset=0.0,\n", - " position_size_usd=0.0,\n", - " sl_pct=0.0,\n", - " sl_price=0.0,\n", - " tp_pct=0.0,\n", - " tp_price=0.0,\n", - ")\n", - "\n", - "market_fee_pct = mufex_main.exchange_settings_tuple.market_fee_pct\n", - "leverage_tick_step = mufex_main.exchange_settings_tuple.leverage_tick_step\n", - "limit_fee_pct = mufex_main.exchange_settings_tuple.limit_fee_pct\n", - "price_tick_step = mufex_main.exchange_settings_tuple.price_tick_step\n", - "asset_tick_step = mufex_main.exchange_settings_tuple.asset_tick_step\n", - "min_asset_size = mufex_main.exchange_settings_tuple.min_asset_size\n", - "max_asset_size = mufex_main.exchange_settings_tuple.max_asset_size\n", - "max_leverage = mufex_main.exchange_settings_tuple.max_leverage\n", - "min_leverage = mufex_main.exchange_settings_tuple.min_leverage\n", - "mmr_pct = mufex_main.exchange_settings_tuple.mmr_pct" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "# stop loss\n", - "if static_os_tuple.sl_strategy_type == StopLossStrategyType.SLBasedOnCandleBody:\n", - " nb_sl_calculator = nb_sl_based_on_candle_body\n", - " nb_checker_sl_hit = nb_check_sl_hit\n", - " if static_os_tuple.pg_min_max_sl_bcb.lower() == \"min\":\n", - " nb_sl_bcb_price_getter = nb_min_price_getter\n", - " elif static_os_tuple.pg_min_max_sl_bcb.lower() == \"max\":\n", - " nb_sl_bcb_price_getter = nb_max_price_getter\n", - " else:\n", - " raise Exception(\"min or max are the only options for pg_min_max_sl_bcb\")\n", - "else:\n", - " nb_sl_calculator = nb_sl_calculator_pass\n", - " nb_checker_sl_hit = nb_check_sl_hit_pass\n", - " nb_sl_bcb_price_getter = nb_price_getter_pass\n", - "\n", - "# SL break even\n", - "if static_os_tuple.sl_to_be_bool:\n", - " nb_checker_sl_to_be = nb_check_move_sl_to_be\n", - " # setting up stop loss be zero or entry\n", - " if static_os_tuple.z_or_e_type.lower() == \"zero\":\n", - " nb_zero_or_entry_calc = nb_sl_to_zero\n", - " elif static_os_tuple.z_or_e_type.lower() == \"entry\":\n", - " nb_zero_or_entry_calc = nb_sl_to_entry\n", - " else:\n", - " raise Exception(\"zero or entry are the only options for z_or_e_type\")\n", - "else:\n", - " nb_checker_sl_to_be = nb_cm_sl_to_be_pass\n", - " nb_zero_or_entry_calc = nb_sl_to_z_e_pass\n", - "\n", - "# Trailing stop loss\n", - "if static_os_tuple.trail_sl_bool:\n", - " nb_checker_tsl = nb_check_move_tsl\n", - "else:\n", - " nb_checker_tsl = nb_cm_tsl_pass\n", - "\n", - "if static_os_tuple.trail_sl_bool or static_os_tuple.sl_to_be_bool:\n", - " nb_sl_mover = nb_move_stop_loss\n", - "else:\n", - " nb_sl_mover = nb_move_stop_loss_pass\n", - "\n", - "if static_os_tuple.sl_strategy_type == StopLossStrategyType.SLBasedOnCandleBody:\n", - " if static_os_tuple.increase_position_type == IncreasePositionType.RiskPctAccountEntrySize:\n", - " nb_inc_pos_calculator = nb_rpa_slbcb\n", - " elif static_os_tuple.increase_position_type == IncreasePositionType.SmalletEntrySizeAsset:\n", - " nb_inc_pos_calculator = nb_min_asset_amount\n", - "\n", - "if static_os_tuple.leverage_strategy_type == LeverageStrategyType.Dynamic:\n", - " nb_lev_calculator = nb_dynamic_lev\n", - "\n", - "nb_checker_liq_hit = nb_check_liq_hit\n", - "\n", - "if static_os_tuple.tp_strategy_type == TakeProfitStrategyType.RiskReward:\n", - " nb_tp_calculator = nb_tp_rr\n", - " nb_checker_tp_hit = nb_c_tp_hit_regular\n", - "\n", - "if static_os_tuple.tp_fee_type == TakeProfitFeeType.Market:\n", - " exit_fee_pct = market_fee_pct\n", - "else:\n", - " exit_fee_pct = limit_fee_pct" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "long_short = \"long\"\n", - "bar_index = 60\n", - "\n", - "if long_short.lower() == \"long\":\n", - " # stop loss\n", - " nb_sl_to_zero_price = nb_long_sl_to_zero_price\n", - " nb_get_sl_hit = nb_long_sl_hit_bool\n", - " nb_move_sl_bool = nb_num_greater_than_num\n", - " nb_sl_price_calc = nb_long_sl_price_calc\n", - "\n", - " # increase position\n", - " nb_entry_calc_p = nb_long_entry_size_p\n", - " nb_entry_calc_np = nb_long_entry_size_np\n", - "\n", - " # leverage\n", - " nb_calc_dynamic_lev = nb_long_calc_dynamic_lev\n", - " nb_get_liq_price = nb_long_get_liq_price\n", - " nb_get_bankruptcy_price = nb_long_get_bankruptcy_price\n", - " nb_liq_hit_bool = nb_long_liq_hit_bool\n", - "\n", - " # Take Profit\n", - " nb_get_tp_price = nb_long_tp_price\n", - " nb_get_check_tp_candle_price = nb_long_c_tp_candle\n", - "\n", - " # Decrease position\n", - " nb_pnl_calc = long_pnl_calc\n", - "\n", - "elif long_short.lower() == \"short\":\n", - " # stop loss\n", - " nb_sl_to_zero_price = nb_short_sl_to_zero_price\n", - " nb_get_sl_hit = nb_short_sl_hit_bool\n", - " nb_move_sl_bool = nb_num_less_than_num\n", - " nb_sl_price_calc = nb_short_sl_price_calc\n", - "\n", - " # increase position\n", - " nb_entry_calc_p = nb_short_entry_size_p\n", - " nb_entry_calc_np = nb_short_entry_size_np\n", - "\n", - " # leverage\n", - " nb_calc_dynamic_lev = nb_short_calc_dynamic_lev\n", - " nb_get_liq_price = nb_short_get_liq_price\n", - " nb_get_bankruptcy_price = nb_short_get_bankruptcy_price\n", - " nb_liq_hit_bool = nb_short_liq_hit_bool\n", - "\n", - " # take profit\n", - " nb_get_tp_price = nb_short_tp_price\n", - " nb_get_check_tp_candle_price = nb_short_c_tp_candle\n", - "\n", - " # Decrease position\n", - " nb_pnl_calc = short_pnl_calc" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nb_stop_loss.py - sl_bcb() - lookback to index= 40.000\n", - "nb_stop_loss.py - sl_bcb() - candle_body= 37441.300\n", - "nb_stop_loss.py - sl_bcb() - sl_price= 37422.599\n" - ] - } - ], - "source": [ - "sl_price = nb_sl_calculator(\n", - " bar_index=60,\n", - " candles=candles,\n", - " logger=logger,\n", - " nb_sl_bcb_price_getter=nb_sl_bcb_price_getter,\n", - " nb_sl_price_calc=nb_sl_price_calc,\n", - " price_tick_step=price_tick_step,\n", - " sl_based_on_add_pct=dynamic_order_settings.sl_based_on_add_pct,\n", - " sl_based_on_lookback=dynamic_order_settings.sl_based_on_lookback,\n", - " sl_bcb_type=CandleBodyType.Low,\n", - " stringer=stringer,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nb_increase_position.py - nb_long_rpa_slbcb() - Not in a position\n", - "nb_increase_position.py - nb_rpa_slbcb_np() - Calculating\n", - "nb_increase_position.py - nb_c_pl_ra_ps() - Inside\n", - "nb_increase_position.py - nb_c_pl_ra_ps() - total_possible_loss= -30\n", - "nb_increase_position.py - nb_c_pl_ra_ps() - max_equity_risk= -120\n", - "nb_increase_position.py - nb_c_pl_ra_ps() - PL is fine total_possible_loss= -30 max risk= -120 total trades= 1\n", - "nb_increase_position.py - nb_rpa_slbcb_np() - entry_size_usd= 6072.340\n", - "nb_increase_position.py - nb_c_too_b_s() - Entry size is fineentry_size_asset= 0.162\n", - "nb_increase_position.py - nb_rpa_slbcb_np() - sl_pct= 0.300\n", - "nb_increase_position.py - nb_rpa_slbcb_np() - \n", - "average_entry= 37540.599\n", - "entry_price= 37540.599\n", - "entry_size_asset= 0.162\n", - "entry_size_usd= 6072.340\n", - "position_size_asset= 0.162\n", - "position_size_usd= 6072.340\n", - "total_possible_loss= -30.000\n", - "total_trades= 1.000\n", - "sl_pct= 0.300\n" - ] - } - ], - "source": [ - "(\n", - " average_entry,\n", - " entry_price,\n", - " entry_size_asset,\n", - " entry_size_usd,\n", - " position_size_asset,\n", - " position_size_usd,\n", - " total_possible_loss,\n", - " total_trades,\n", - " sl_pct,\n", - ") = nb_inc_pos_calculator(\n", - " acc_ex_other=AccExOther(\n", - " equity=account_state.equity,\n", - " asset_tick_step=asset_tick_step,\n", - " market_fee_pct=market_fee_pct,\n", - " max_asset_size=max_asset_size,\n", - " min_asset_size=min_asset_size,\n", - " total_possible_loss=account_state.total_possible_loss,\n", - " price_tick_step=price_tick_step,\n", - " total_trades=account_state.total_trades,\n", - " ),\n", - " order_info=OrderInfo(\n", - " average_entry=order_result.average_entry,\n", - " entry_price=candles[bar_index, CandleBodyType.Close],\n", - " in_position=order_result.position_size_usd > 0,\n", - " max_equity_risk_pct=dynamic_order_settings.max_equity_risk_pct,\n", - " max_trades=dynamic_order_settings.max_trades,\n", - " position_size_asset=order_result.position_size_asset,\n", - " position_size_usd=order_result.position_size_usd,\n", - " account_pct_risk_per_trade=dynamic_order_settings.account_pct_risk_per_trade,\n", - " sl_price=sl_price,\n", - " ),\n", - " logger=logger,\n", - " stringer=stringer,\n", - " nb_entry_calc_p=nb_entry_calc_p,\n", - " nb_entry_calc_np=nb_entry_calc_np,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nb_leverage.py - nb_calculate_leverage() - Leverage= 122.849\n", - "nb_leverage.py - nb_calc_liq_price() -\n", - "initial_margin= 49.503\n", - "fee_to_open= 5.472\n", - "bankruptcy_price= 37235.019\n", - "cash_used= 60.405\n", - "nb_leverage.py - nb_calc_liq_price() -\n", - "available_balance= 939.594\n", - "new cash_used= 60.405\n", - "cash_borrowed= 6011.934\n", - "liq_price= 37385.199\n" - ] - } - ], - "source": [ - "(\n", - " available_balance,\n", - " cash_borrowed,\n", - " cash_used,\n", - " leverage,\n", - " liq_price,\n", - ") = nb_lev_calculator(\n", - " available_balance=account_state.available_balance,\n", - " average_entry=average_entry,\n", - " cash_borrowed=account_state.cash_borrowed,\n", - " cash_used=account_state.cash_used,\n", - " leverage_tick_step=leverage_tick_step,\n", - " logger=logger,\n", - " market_fee_pct=market_fee_pct,\n", - " max_leverage=max_leverage,\n", - " min_leverage=min_leverage,\n", - " mmr_pct=mmr_pct,\n", - " nb_calc_dynamic_lev=nb_calc_dynamic_lev,\n", - " nb_get_bankruptcy_price=nb_get_bankruptcy_price,\n", - " nb_get_liq_price=nb_get_liq_price,\n", - " position_size_asset=position_size_asset,\n", - " position_size_usd=position_size_usd,\n", - " price_tick_step=price_tick_step,\n", - " sl_price=sl_price,\n", - " static_leverage=static_os_tuple.static_leverage,\n", - " stringer=stringer,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nb_take_profit.py - nb_tp_rr() - profit= 75.000\n", - "nb_take_profit.py - nb_tp_rr() - tp_price= 38049.500\n", - "nb_take_profit.py - nb_tp_rr() - tp_pct= 1.400\n", - "nb_take_profit.py - nb_tp_rr() - can_move_sl_to_be= True\n" - ] - } - ], - "source": [ - "(\n", - " can_move_sl_to_be,\n", - " tp_price,\n", - " tp_pct,\n", - ") = nb_tp_calculator(\n", - " average_entry=average_entry,\n", - " logger=logger,\n", - " market_fee_pct=market_fee_pct,\n", - " nb_get_tp_price=nb_get_tp_price,\n", - " position_size_usd=position_size_usd,\n", - " total_possible_loss=total_possible_loss,\n", - " price_tick_step=price_tick_step,\n", - " risk_reward=dynamic_order_settings.risk_reward,\n", - " stringer=stringer,\n", - " tp_fee_pct=exit_fee_pct,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [], - "source": [ - "account_state = AccountState(\n", - " # where we are at\n", - " set_idx=0,\n", - " set_idx=0,\n", - " bar_index=bar_index + 1, # put plus 1 because we need to place entry on next bar\n", - " timestamp=int(candles[bar_index + 1, CandleBodyType.OpenTimestamp]),\n", - " # account info\n", - " available_balance=available_balance,\n", - " cash_borrowed=cash_borrowed,\n", - " cash_used=cash_used,\n", - " equity=account_state.equity,\n", - " fees_paid=0.0,\n", - " total_possible_loss=total_possible_loss,\n", - " realized_pnl=0.0,\n", - " total_trades=total_trades,\n", - ")\n", - "order_result = OrderResult(\n", - " average_entry=average_entry,\n", - " can_move_sl_to_be=can_move_sl_to_be,\n", - " entry_price=entry_price,\n", - " entry_size_asset=entry_size_asset,\n", - " entry_size_usd=entry_size_usd,\n", - " exit_price=0.0,\n", - " leverage=leverage,\n", - " liq_price=liq_price,\n", - " order_status=OrderStatus.EntryFilled,\n", - " position_size_asset=position_size_asset,\n", - " position_size_usd=position_size_usd,\n", - " sl_pct=sl_pct,\n", - " sl_price=sl_price,\n", - " tp_pct=tp_pct,\n", - " tp_price=tp_price,\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "qfFree", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.10" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tests/strategy/nb_strat_tester_short.ipynb b/tests/strategy/nb_strat_tester_short.ipynb deleted file mode 100644 index 64a928f..0000000 --- a/tests/strategy/nb_strat_tester_short.ipynb +++ /dev/null @@ -1,678 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# import sys\n", - "# import os\n", - "\n", - "# sys.dont_write_bytecode = True\n", - "# os.environ[\"NUMBA_DISABLE_JIT\"] = \"1\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from env import MufexKeys\n", - "from quantfreedom.exchanges.mufex import Mufex\n", - "from quantfreedom.enums import *\n", - "from numba import njit, typed, types\n", - "from quantfreedom.nb_funcs.nb_custom_logger import *\n", - "from quantfreedom.nb_funcs.nb_helper_funcs import nb_float_to_str\n", - "from quantfreedom.helper_funcs import dos_cart_product\n", - "from quantfreedom.nb_funcs.nb_helper_funcs import nb_get_dos\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_stop_loss import *\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_increase_position import *\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_leverage import *\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_take_profit import *\n", - "from quantfreedom.nb_funcs.nb_order_handler.nb_decrease_position import *\n", - "\n", - "mufex_main = Mufex(\n", - " api_key=MufexKeys.api_key,\n", - " secret_key=MufexKeys.secret_key,\n", - " use_testnet=False,\n", - ")\n", - "\n", - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "candles = mufex_main.get_candles(\n", - " symbol=\"BTCUSDT\",\n", - " timeframe=\"5m\",\n", - " candles_to_dl=200,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], - "source": [ - "mufex_main.set_exchange_settings(\n", - " symbol=\"BTCUSDT\",\n", - " position_mode=PositionModeType.HedgeMode,\n", - " leverage_mode=LeverageModeType.Isolated,\n", - ")\n", - "\n", - "# backtest_settings_tuple = BacktestSettings(\n", - "# array_size=1000,\n", - "# gains_pct_filter=0,\n", - "# total_trade_filter=40,\n", - "# upside_filter=0,\n", - "# )\n", - "\n", - "backtest_settings_tuple = BacktestSettings()\n", - "dos_tuple = DynamicOrderSettings(\n", - " max_equity_risk_pct=np.array([12]),\n", - " max_trades=np.array([5]),\n", - " account_pct_risk_per_trade=np.array([3]),\n", - " risk_reward=np.array([2.5]),\n", - " sl_based_on_add_pct=np.array([0.05, 0.1, 0.15]),\n", - " sl_based_on_lookback=np.array([20]),\n", - " sl_bcb_type=np.array([CandleBodyType.High]),\n", - " sl_to_be_cb_type=np.array([CandleBodyType.Open]),\n", - " sl_to_be_when_pct=np.array([0.1]),\n", - " trail_sl_bcb_type=np.array([CandleBodyType.High]),\n", - " trail_sl_by_pct=np.array([0.01]),\n", - " trail_sl_when_pct=np.array([1]),\n", - ")\n", - "static_os_tuple = StaticOrderSettings(\n", - " increase_position_type=IncreasePositionType.RiskPctAccountEntrySize,\n", - " leverage_strategy_type=LeverageStrategyType.Dynamic,\n", - " logger_bool=True,\n", - " starting_bar=50,\n", - " pg_min_max_sl_bcb=\"max\",\n", - " sl_strategy_type=StopLossStrategyType.SLBasedOnCandleBody,\n", - " sl_to_be_bool=True,\n", - " starting_equity=1000.0,\n", - " static_leverage=None,\n", - " tp_fee_type=\"limit\",\n", - " tp_strategy_type=TakeProfitStrategyType.RiskReward,\n", - " trail_sl_bool=True,\n", - " z_or_e_type=\"zero\",\n", - ")\n", - "dos_tuple = dos_cart_product(\n", - " dos_tuple=dos_tuple,\n", - ")\n", - "dynamic_order_settings = nb_get_dos(\n", - " dos_tuple=dos_tuple,\n", - " set_idx=0,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "log_func_type = types.void(types.unicode_type)\n", - "logger = typed.List.empty_list(log_func_type.as_type())\n", - "\n", - "str_func_type = types.unicode_type(types.float64)\n", - "stringer = typed.List.empty_list(str_func_type.as_type())\n", - "\n", - "if static_os_tuple.logger_bool:\n", - " logger.append(nb_log_debug)\n", - " logger.append(nb_log_info)\n", - " logger.append(nb_log_warning)\n", - " logger.append(nb_log_error)\n", - "\n", - " stringer.append(nb_float_to_str)\n", - " stringer.append(nb_log_datetime)\n", - " stringer.append(nb_candle_body_str)\n", - " stringer.append(nb_z_or_e_str)\n", - " stringer.append(nb_os_to_str)\n", - "\n", - "else:\n", - " logger.append(nb_logger_pass)\n", - " logger.append(nb_logger_pass)\n", - " logger.append(nb_logger_pass)\n", - " logger.append(nb_logger_pass)\n", - "\n", - " stringer.append(nb_stringer_pass)\n", - " stringer.append(nb_stringer_pass)\n", - " stringer.append(nb_stringer_pass)\n", - " stringer.append(nb_stringer_pass)\n", - " stringer.append(nb_stringer_pass)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "account_state = AccountState(\n", - " # where we are at\n", - " set_idx=-1,\n", - " set_idx=-1,\n", - " bar_index=-1,\n", - " timestamp=-1,\n", - " # account info\n", - " available_balance=static_os_tuple.starting_equity,\n", - " cash_borrowed=0.0,\n", - " cash_used=0.0,\n", - " equity=static_os_tuple.starting_equity,\n", - " fees_paid=0.0,\n", - " total_possible_loss=0.0,\n", - " realized_pnl=0.0,\n", - " total_trades=0,\n", - ")\n", - "order_result = OrderResult(\n", - " average_entry=0.0,\n", - " can_move_sl_to_be=False,\n", - " entry_price=0.0,\n", - " entry_size_asset=0.0,\n", - " entry_size_usd=0.0,\n", - " exit_price=0.0,\n", - " leverage=1.0,\n", - " liq_price=0.0,\n", - " order_status=OrderStatus.Nothing,\n", - " position_size_asset=0.0,\n", - " position_size_usd=0.0,\n", - " sl_pct=0.0,\n", - " sl_price=0.0,\n", - " tp_pct=0.0,\n", - " tp_price=0.0,\n", - ")\n", - "\n", - "market_fee_pct = mufex_main.exchange_settings_tuple.market_fee_pct\n", - "leverage_tick_step = mufex_main.exchange_settings_tuple.leverage_tick_step\n", - "price_tick_step = mufex_main.exchange_settings_tuple.price_tick_step\n", - "limit_fee_pct = mufex_main.exchange_settings_tuple.limit_fee_pct\n", - "asset_tick_step = mufex_main.exchange_settings_tuple.asset_tick_step\n", - "min_asset_size = mufex_main.exchange_settings_tuple.min_asset_size\n", - "max_asset_size = mufex_main.exchange_settings_tuple.max_asset_size\n", - "max_leverage = mufex_main.exchange_settings_tuple.max_leverage\n", - "min_leverage = mufex_main.exchange_settings_tuple.min_leverage\n", - "mmr_pct = mufex_main.exchange_settings_tuple.mmr_pct" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "long_short = \"short\"\n", - "bar_index = 60\n", - "\n", - "if long_short.lower() == \"long\":\n", - " # stop loss\n", - " nb_sl_hit_bool = nb_long_sl_hit_bool\n", - " nb_move_sl_bool = nb_num_greater_than_num\n", - " nb_sl_price_calc = nb_long_sl_price_calc\n", - "\n", - " # increase position\n", - " nb_entry_calc_p = nb_long_entry_size_p\n", - " nb_entry_calc_np = nb_long_entry_size_np\n", - "\n", - " # leverage\n", - " nb_calc_dynamic_lev = nb_long_calc_dynamic_lev\n", - " nb_get_liq_price = nb_long_get_liq_price\n", - " nb_get_bankruptcy_price = nb_long_get_bankruptcy_price\n", - " nb_liq_hit_bool = nb_long_liq_hit_bool\n", - "\n", - " # Take Profit\n", - " nb_get_tp_price = nb_long_tp_price\n", - " nb_tp_hit_bool = nb_long_tp_hit_bool\n", - "\n", - " # Decrease position\n", - " nb_pnl_calc = nb_long_pnl_calc\n", - "elif long_short.lower() == \"short\":\n", - " # stop loss\n", - " nb_sl_hit_bool = nb_short_sl_hit_bool\n", - " nb_move_sl_bool = nb_num_less_than_num\n", - " nb_sl_price_calc = nb_short_sl_price_calc\n", - "\n", - " # increase position\n", - " nb_entry_calc_p = nb_short_entry_size_p\n", - " nb_entry_calc_np = nb_short_entry_size_np\n", - "\n", - " # leverage\n", - " nb_calc_dynamic_lev = nb_short_calc_dynamic_lev\n", - " nb_get_liq_price = nb_short_get_liq_price\n", - " nb_get_bankruptcy_price = nb_short_get_bankruptcy_price\n", - " nb_liq_hit_bool = nb_short_liq_hit_bool\n", - "\n", - " # take profit\n", - " nb_get_tp_price = nb_short_tp_price\n", - " nb_tp_hit_bool = nb_short_tp_hit_bool\n", - "\n", - " # Decrease position\n", - " nb_pnl_calc = nb_short_pnl_calc" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "# stop loss\n", - "if static_os_tuple.sl_strategy_type == StopLossStrategyType.SLBasedOnCandleBody:\n", - " nb_sl_calculator = nb_sl_based_on_candle_body\n", - " nb_checker_sl_hit = nb_check_sl_hit\n", - " if static_os_tuple.pg_min_max_sl_bcb.lower() == \"min\":\n", - " nb_sl_bcb_price_getter = nb_min_price_getter\n", - " elif static_os_tuple.pg_min_max_sl_bcb.lower() == \"max\":\n", - " nb_sl_bcb_price_getter = nb_max_price_getter\n", - " else:\n", - " raise Exception(\"min or max are the only options for pg_min_max_sl_bcb\")\n", - "else:\n", - " nb_sl_calculator = nb_sl_calculator_pass\n", - " nb_checker_sl_hit = nb_check_sl_hit_pass\n", - " nb_sl_bcb_price_getter = nb_price_getter_pass\n", - "\n", - "# SL break even\n", - "if static_os_tuple.sl_to_be_bool:\n", - " nb_checker_sl_to_be = nb_check_move_sl_to_be\n", - " # setting up stop loss be zero or entry\n", - " if static_os_tuple.z_or_e_type.lower() == \"entry\":\n", - " nb_zero_or_entry_calc = nb_sl_to_entry\n", - " if static_os_tuple.z_or_e_type.lower() == \"zero\":\n", - " if long_short.lower() == \"long\":\n", - " nb_zero_or_entry_calc = nb_long_sl_to_zero\n", - " elif long_short.lower() == \"short\":\n", - " nb_zero_or_entry_calc = nb_short_sl_to_zero\n", - " else:\n", - " raise Exception(\"zero or entry are the only options for z_or_e_type\")\n", - "else:\n", - " nb_checker_sl_to_be = nb_cm_sl_to_be_pass\n", - " nb_zero_or_entry_calc = nb_sl_to_z_e_pass\n", - "\n", - "# Trailing stop loss\n", - "if static_os_tuple.trail_sl_bool:\n", - " nb_checker_tsl = nb_check_move_tsl\n", - "else:\n", - " nb_checker_tsl = nb_cm_tsl_pass\n", - "\n", - "if static_os_tuple.trail_sl_bool or static_os_tuple.sl_to_be_bool:\n", - " nb_sl_mover = nb_move_stop_loss\n", - "else:\n", - " nb_sl_mover = nb_move_stop_loss_pass\n", - "\n", - "# Increase Position\n", - "if static_os_tuple.sl_strategy_type == StopLossStrategyType.SLBasedOnCandleBody:\n", - " if static_os_tuple.increase_position_type == IncreasePositionType.RiskPctAccountEntrySize:\n", - " nb_inc_pos_calculator = nb_rpa_slbcb\n", - " elif static_os_tuple.increase_position_type == IncreasePositionType.SmalletEntrySizeAsset:\n", - " nb_inc_pos_calculator = nb_min_asset_amount\n", - "\n", - "# Leverage\n", - "if static_os_tuple.leverage_strategy_type == LeverageStrategyType.Dynamic:\n", - " nb_lev_calculator = nb_dynamic_lev\n", - "\n", - "# Take Profit\n", - "if static_os_tuple.tp_strategy_type == TakeProfitStrategyType.RiskReward:\n", - " nb_tp_calculator = nb_tp_rr\n", - " nb_checker_tp_hit = nb_c_tp_hit_regular\n", - "\n", - "if static_os_tuple.tp_fee_type == TakeProfitFeeType.Market:\n", - " exit_fee_pct = market_fee_pct\n", - "else:\n", - " exit_fee_pct = limit_fee_pct" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nb_stop_loss.py - sl_bcb() - lookback to index= 40.000\n", - "nb_stop_loss.py - sl_bcb() - candle_body= 36648.599\n", - "nb_stop_loss.py - sl_bcb() - sl_price= 36666.900\n" - ] - } - ], - "source": [ - "sl_price = nb_sl_calculator(\n", - " bar_index=60,\n", - " candles=candles,\n", - " logger=logger,\n", - " nb_sl_bcb_price_getter=nb_sl_bcb_price_getter,\n", - " nb_sl_price_calc=nb_sl_price_calc,\n", - " price_tick_step=price_tick_step,\n", - " sl_based_on_add_pct=dynamic_order_settings.sl_based_on_add_pct,\n", - " sl_based_on_lookback=dynamic_order_settings.sl_based_on_lookback,\n", - " sl_bcb_type=CandleBodyType.High,\n", - " stringer=stringer,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "nb_increase_position.py - nb_long_rpa_slbcb() - Not in a position\n", - "nb_increase_position.py - nb_rpa_slbcb_np() - Calculating\n", - "nb_increase_position.py - nb_c_pl_ra_ps() - Inside\n", - "nb_increase_position.py - nb_c_pl_ra_ps() - possible_loss= -30\n", - "nb_increase_position.py - nb_c_pl_ra_ps() - max_equity_risk= -120\n", - "nb_increase_position.py - nb_c_pl_ra_ps() - PL is fine possible_loss= -30 max risk= -120 total trades= 1\n", - "nb_increase_position.py - nb_rpa_slbcb_np() - entry_size_usd= 7266.760\n", - "nb_increase_position.py - nb_c_too_b_s() - Entry size is fineentry_size_asset= 0.199\n", - "nb_increase_position.py - nb_rpa_slbcb_np() - sl_pct= 0.200\n", - "nb_increase_position.py - nb_rpa_slbcb_np() - \n", - "average_entry= 36581.800\n", - "entry_price= 36581.800\n", - "entry_size_asset= 0.199\n", - "entry_size_usd= 7266.760\n", - "position_size_asset= 0.199\n", - "position_size_usd= 7266.760\n", - "possible_loss= -30.000\n", - "total_trades= 1.000\n", - "sl_pct= 0.200\n" - ] - } - ], - "source": [ - "(\n", - " average_entry,\n", - " entry_price,\n", - " entry_size_asset,\n", - " entry_size_usd,\n", - " position_size_asset,\n", - " position_size_usd,\n", - " total_possible_loss,\n", - " total_trades,\n", - " sl_pct,\n", - ") = nb_inc_pos_calculator(\n", - " acc_ex_other=AccExOther(\n", - " equity=account_state.equity,\n", - " asset_tick_step=asset_tick_step,\n", - " market_fee_pct=market_fee_pct,\n", - " max_asset_size=max_asset_size,\n", - " min_asset_size=min_asset_size,\n", - " total_possible_loss=account_state.total_possible_loss,\n", - " price_tick_step=price_tick_step,\n", - " total_trades=account_state.total_trades,\n", - " ),\n", - " order_info=OrderInfo(\n", - " average_entry=order_result.average_entry,\n", - " entry_price=candles[bar_index, CandleBodyType.Close],\n", - " in_position=order_result.position_size_usd > 0,\n", - " max_equity_risk_pct=dynamic_order_settings.max_equity_risk_pct,\n", - " max_trades=dynamic_order_settings.max_trades,\n", - " position_size_asset=order_result.position_size_asset,\n", - " position_size_usd=order_result.position_size_usd,\n", - " account_pct_risk_per_trade=dynamic_order_settings.account_pct_risk_per_trade,\n", - " sl_price=sl_price,\n", - " ),\n", - " logger=logger,\n", - " stringer=stringer,\n", - " nb_entry_calc_p=nb_entry_calc_p,\n", - " nb_entry_calc_np=nb_entry_calc_np,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "too many arguments: expected 7, got 19", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32me:\\Coding\\backtesters\\QuantFreedom\\tests\\strategy\\nb_strat_tester_short.ipynb Cell 11\u001b[0m line \u001b[0;36m7\n\u001b[0;32m 1\u001b[0m (\n\u001b[0;32m 2\u001b[0m available_balance,\n\u001b[0;32m 3\u001b[0m cash_borrowed,\n\u001b[0;32m 4\u001b[0m cash_used,\n\u001b[0;32m 5\u001b[0m leverage,\n\u001b[0;32m 6\u001b[0m liq_price,\n\u001b[1;32m----> 7\u001b[0m ) \u001b[39m=\u001b[39m nb_lev_calculator(\n\u001b[0;32m 8\u001b[0m available_balance\u001b[39m=\u001b[39;49maccount_state\u001b[39m.\u001b[39;49mavailable_balance,\n\u001b[0;32m 9\u001b[0m average_entry\u001b[39m=\u001b[39;49maverage_entry,\n\u001b[0;32m 10\u001b[0m cash_borrowed\u001b[39m=\u001b[39;49maccount_state\u001b[39m.\u001b[39;49mcash_borrowed,\n\u001b[0;32m 11\u001b[0m cash_used\u001b[39m=\u001b[39;49maccount_state\u001b[39m.\u001b[39;49mcash_used,\n\u001b[0;32m 12\u001b[0m leverage_tick_step\u001b[39m=\u001b[39;49mleverage_tick_step,\n\u001b[0;32m 13\u001b[0m logger\u001b[39m=\u001b[39;49mlogger,\n\u001b[0;32m 14\u001b[0m market_fee_pct\u001b[39m=\u001b[39;49mmarket_fee_pct,\n\u001b[0;32m 15\u001b[0m max_leverage\u001b[39m=\u001b[39;49mmax_leverage,\n\u001b[0;32m 16\u001b[0m min_leverage\u001b[39m=\u001b[39;49mmin_leverage,\n\u001b[0;32m 17\u001b[0m mmr_pct\u001b[39m=\u001b[39;49mmmr_pct,\n\u001b[0;32m 18\u001b[0m nb_calc_dynamic_lev\u001b[39m=\u001b[39;49mnb_calc_dynamic_lev,\n\u001b[0;32m 19\u001b[0m nb_get_bankruptcy_price\u001b[39m=\u001b[39;49mnb_get_bankruptcy_price,\n\u001b[0;32m 20\u001b[0m nb_get_liq_price\u001b[39m=\u001b[39;49mnb_get_liq_price,\n\u001b[0;32m 21\u001b[0m position_size_asset\u001b[39m=\u001b[39;49mposition_size_asset,\n\u001b[0;32m 22\u001b[0m position_size_usd\u001b[39m=\u001b[39;49mposition_size_usd,\n\u001b[0;32m 23\u001b[0m price_tick_step\u001b[39m=\u001b[39;49mprice_tick_step,\n\u001b[0;32m 24\u001b[0m sl_price\u001b[39m=\u001b[39;49msl_price,\n\u001b[0;32m 25\u001b[0m static_leverage\u001b[39m=\u001b[39;49mstatic_os\u001b[39m.\u001b[39;49mstatic_leverage,\n\u001b[0;32m 26\u001b[0m stringer\u001b[39m=\u001b[39;49mstringer,\n\u001b[0;32m 27\u001b[0m )\n", - "\u001b[1;31mTypeError\u001b[0m: too many arguments: expected 7, got 19" - ] - } - ], - "source": [ - "(\n", - " available_balance,\n", - " cash_borrowed,\n", - " cash_used,\n", - " leverage,\n", - " liq_price,\n", - ") = nb_lev_calculator(\n", - " available_balance=account_state.available_balance,\n", - " average_entry=average_entry,\n", - " cash_borrowed=account_state.cash_borrowed,\n", - " cash_used=account_state.cash_used,\n", - " leverage_tick_step=leverage_tick_step,\n", - " logger=logger,\n", - " market_fee_pct=market_fee_pct,\n", - " max_leverage=max_leverage,\n", - " min_leverage=min_leverage,\n", - " mmr_pct=mmr_pct,\n", - " nb_calc_dynamic_lev=nb_calc_dynamic_lev,\n", - " nb_get_bankruptcy_price=nb_get_bankruptcy_price,\n", - " nb_get_liq_price=nb_get_liq_price,\n", - " position_size_asset=position_size_asset,\n", - " position_size_usd=position_size_usd,\n", - " price_tick_step=price_tick_step,\n", - " sl_price=sl_price,\n", - " static_leverage=static_os_tuple.static_leverage,\n", - " stringer=stringer,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "(\n", - " can_move_sl_to_be,\n", - " tp_price,\n", - " tp_pct,\n", - ") = nb_tp_calculator(\n", - " average_entry=average_entry,\n", - " logger=logger,\n", - " market_fee_pct=market_fee_pct,\n", - " nb_get_tp_price=nb_get_tp_price,\n", - " position_size_usd=position_size_usd,\n", - " total_possible_loss=total_possible_loss,\n", - " price_tick_step=price_tick_step,\n", - " risk_reward=dynamic_order_settings.risk_reward,\n", - " stringer=stringer,\n", - " tp_fee_pct=exit_fee_pct,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "account_state = AccountState(\n", - " # where we are at\n", - " set_idx=0,\n", - " set_idx=0,\n", - " bar_index=bar_index + 1, # put plus 1 because we need to place entry on next bar\n", - " timestamp=int(candles[bar_index + 1, CandleBodyType.OpenTimestamp]),\n", - " # account info\n", - " available_balance=available_balance,\n", - " cash_borrowed=cash_borrowed,\n", - " cash_used=cash_used,\n", - " equity=account_state.equity,\n", - " fees_paid=0.0,\n", - " total_possible_loss=total_possible_loss,\n", - " realized_pnl=0.0,\n", - " total_trades=total_trades,\n", - ")\n", - "order_result = OrderResult(\n", - " average_entry=average_entry,\n", - " can_move_sl_to_be=can_move_sl_to_be,\n", - " entry_price=entry_price,\n", - " entry_size_asset=entry_size_asset,\n", - " entry_size_usd=entry_size_usd,\n", - " exit_price=0.0,\n", - " leverage=leverage,\n", - " liq_price=liq_price,\n", - " order_status=OrderStatus.EntryFilled,\n", - " position_size_asset=position_size_asset,\n", - " position_size_usd=position_size_usd,\n", - " sl_pct=sl_pct,\n", - " sl_price=sl_price,\n", - " tp_pct=tp_pct,\n", - " tp_price=tp_price,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "nb_checker_sl_hit(\n", - " current_candle=candles[bar_index, :],\n", - " logger=logger,\n", - " nb_sl_hit_bool=nb_sl_hit_bool,\n", - " sl_price=order_result.sl_price,\n", - " stringer=stringer,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "nb_check_liq_hit(\n", - " current_candle=candles[bar_index, :],\n", - " logger=logger,\n", - " nb_liq_hit_bool=nb_liq_hit_bool,\n", - " liq_price=order_result.liq_price,\n", - " stringer=stringer,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "nb_c_tp_hit_regular(\n", - " current_candle=candles[bar_index, :],\n", - " logger=logger,\n", - " nb_tp_hit_bool=nb_tp_hit_bool,\n", - " tp_price=order_result.tp_price,\n", - " stringer=stringer,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "temp_sl, temp_sl_pct = nb_check_move_sl_to_be(\n", - " average_entry=order_result.average_entry,\n", - " can_move_sl_to_be=order_result.can_move_sl_to_be,\n", - " current_candle=candles[bar_index, :],\n", - " logger=logger,\n", - " market_fee_pct=market_fee_pct,\n", - " nb_move_sl_bool=nb_move_sl_bool,\n", - " nb_zero_or_entry_calc=nb_zero_or_entry_calc,\n", - " price_tick_step=price_tick_step,\n", - " sl_price=order_result.sl_price,\n", - " sl_to_be_cb_type=dynamic_order_settings.sl_to_be_cb_type,\n", - " sl_to_be_when_pct=dynamic_order_settings.sl_to_be_when_pct,\n", - " stringer=stringer,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "account_state, order_result = nb_move_stop_loss(\n", - " account_state=account_state,\n", - " bar_index=bar_index,\n", - " can_move_sl_to_be=False,\n", - " set_idx=0,\n", - " set_idx=0,\n", - " logger=logger,\n", - " order_result=order_result,\n", - " order_status=OrderStatus.MovedSLToBE,\n", - " sl_price=temp_sl,\n", - " sl_pct=temp_sl_pct,\n", - " timestamp=int(candles[bar_index, CandleBodyType.OpenTimestamp]),\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "nb_check_move_tsl(\n", - " average_entry=order_result.average_entry,\n", - " current_candle=candles[bar_index, :],\n", - " logger=logger,\n", - " nb_move_sl_bool=nb_move_sl_bool,\n", - " nb_sl_price_calc=nb_sl_price_calc,\n", - " price_tick_step=price_tick_step,\n", - " sl_price=order_result.sl_price,\n", - " stringer=stringer,\n", - " trail_sl_bcb_type=dynamic_order_settings.trail_sl_bcb_type,\n", - " trail_sl_by_pct=dynamic_order_settings.trail_sl_by_pct,\n", - " trail_sl_when_pct=dynamic_order_settings.trail_sl_when_pct,\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "qfFree", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.10" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/tests/strategy/nb_video_strat.ipynb b/tests/strategy/nb_video_strat.ipynb deleted file mode 100644 index 52d40f9..0000000 --- a/tests/strategy/nb_video_strat.ipynb +++ /dev/null @@ -1,575 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "# import sys\n", - "# import os\n", - "# sys.dont_write_bytecode = True\n", - "# os.environ[\"NUMBA_DISABLE_JIT\"] = \"1\"" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from env import MufexKeys\n", - "from quantfreedom.exchanges.mufex import Mufex\n", - "from quantfreedom.enums import *\n", - "from quantfreedom.nb_funcs.nb_strategies.nb_strategy import *\n", - "from quantfreedom.nb_funcs.nb_simulate.nb_sim_base import nb_sim_backtest\n", - "from quantfreedom.helper_funcs import dl_ex_candles, candles_to_df\n", - "\n", - "mufex_main = Mufex(\n", - " api_key=MufexKeys.api_key,\n", - " secret_key=MufexKeys.secret_key,\n", - " use_testnet=False,\n", - ")\n", - "\n", - "%load_ext autoreload\n", - "%autoreload 2" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "candles = mufex_main.get_candles(\n", - " symbol=\"BTCUSDT\",\n", - " timeframe=\"5m\",\n", - " since_timestamp=1686787200000,\n", - " until_timestamp=1687478400000,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - " | timestamp | \n", - "open | \n", - "high | \n", - "low | \n", - "close | \n", - "volume | \n", - "
---|---|---|---|---|---|---|
datetime | \n", - "\n", - " | \n", - " | \n", - " | \n", - " | \n", - " | \n", - " |
2023-06-15 00:00:00 | \n", - "1686787200000 | \n", - "25115.0 | \n", - "25116.0 | \n", - "25079.5 | \n", - "25085.5 | \n", - "1.991 | \n", - "
2023-06-15 00:05:00 | \n", - "1686787500000 | \n", - "25085.5 | \n", - "25102.5 | \n", - "25071.0 | \n", - "25095.5 | \n", - "1.578 | \n", - "
2023-06-15 00:10:00 | \n", - "1686787800000 | \n", - "25095.5 | \n", - "25115.0 | \n", - "25095.5 | \n", - "25114.0 | \n", - "2.594 | \n", - "
2023-06-15 00:15:00 | \n", - "1686788100000 | \n", - "25114.0 | \n", - "25135.5 | \n", - "25092.0 | \n", - "25130.0 | \n", - "2.197 | \n", - "
2023-06-15 00:20:00 | \n", - "1686788400000 | \n", - "25130.0 | \n", - "25135.5 | \n", - "25126.0 | \n", - "25132.0 | \n", - "1.169 | \n", - "
... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "
2023-06-22 23:35:00 | \n", - "1687476900000 | \n", - "29978.7 | \n", - "29988.6 | \n", - "29972.2 | \n", - "29972.8 | \n", - "1.925 | \n", - "
2023-06-22 23:40:00 | \n", - "1687477200000 | \n", - "29972.8 | \n", - "29976.7 | \n", - "29935.9 | \n", - "29947.9 | \n", - "4.660 | \n", - "
2023-06-22 23:45:00 | \n", - "1687477500000 | \n", - "29947.9 | \n", - "29969.3 | \n", - "29941.0 | \n", - "29946.6 | \n", - "6.870 | \n", - "
2023-06-22 23:50:00 | \n", - "1687477800000 | \n", - "29946.6 | \n", - "29949.7 | \n", - "29878.0 | \n", - "29902.5 | \n", - "14.681 | \n", - "
2023-06-22 23:55:00 | \n", - "1687478100000 | \n", - "29902.5 | \n", - "29911.5 | \n", - "29877.5 | \n", - "29878.3 | \n", - "10.107 | \n", - "
2304 rows × 6 columns
\n", - "\n", - " | ind_set_idx | \n", - "set_idx | \n", - "total_trades | \n", - "wins | \n", - "losses | \n", - "gains_pct | \n", - "win_rate | \n", - "qf_score | \n", - "fees_paid | \n", - "total_pnl | \n", - "ending_eq | \n", - "
---|---|---|---|---|---|---|---|---|---|---|---|
261 | \n", - "4 | \n", - "2062 | \n", - "43.0 | \n", - "12 | \n", - "31 | \n", - "203.255 | \n", - "27.907 | \n", - "0.735 | \n", - "3192.821 | \n", - "2032.555 | \n", - "3032.555 | \n", - "
360 | \n", - "5 | \n", - "2062 | \n", - "43.0 | \n", - "12 | \n", - "31 | \n", - "205.030 | \n", - "27.907 | \n", - "0.735 | \n", - "3202.702 | \n", - "2050.299 | \n", - "3050.299 | \n", - "
23 | \n", - "2 | \n", - "982 | \n", - "43.0 | \n", - "12 | \n", - "31 | \n", - "147.448 | \n", - "27.907 | \n", - "0.733 | \n", - "2527.731 | \n", - "1474.475 | \n", - "2474.475 | \n", - "
331 | \n", - "5 | \n", - "1522 | \n", - "43.0 | \n", - "12 | \n", - "31 | \n", - "187.219 | \n", - "27.907 | \n", - "0.732 | \n", - "3022.387 | \n", - "1872.188 | \n", - "2872.188 | \n", - "
233 | \n", - "4 | \n", - "1522 | \n", - "43.0 | \n", - "12 | \n", - "31 | \n", - "187.018 | \n", - "27.907 | \n", - "0.731 | \n", - "3022.762 | \n", - "1870.183 | \n", - "2870.183 | \n", - "
... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "
287 | \n", - "5 | \n", - "504 | \n", - "42.0 | \n", - "8 | \n", - "34 | \n", - "22.187 | \n", - "19.048 | \n", - "0.002 | \n", - "2056.699 | \n", - "221.865 | \n", - "1221.865 | \n", - "
197 | \n", - "4 | \n", - "664 | \n", - "49.0 | \n", - "20 | \n", - "29 | \n", - "0.149 | \n", - "40.816 | \n", - "0.001 | \n", - "1222.687 | \n", - "1.485 | \n", - "1001.485 | \n", - "
295 | \n", - "5 | \n", - "664 | \n", - "49.0 | \n", - "20 | \n", - "29 | \n", - "0.149 | \n", - "40.816 | \n", - "0.001 | \n", - "1222.687 | \n", - "1.485 | \n", - "1001.485 | \n", - "
293 | \n", - "5 | \n", - "634 | \n", - "51.0 | \n", - "20 | \n", - "31 | \n", - "1.929 | \n", - "39.216 | \n", - "0.001 | \n", - "1415.570 | \n", - "19.286 | \n", - "1019.286 | \n", - "
195 | \n", - "4 | \n", - "634 | \n", - "51.0 | \n", - "20 | \n", - "31 | \n", - "1.929 | \n", - "39.216 | \n", - "0.001 | \n", - "1415.570 | \n", - "19.286 | \n", - "1019.286 | \n", - "
367 rows × 11 columns
\n", - "