From d13716d29c9ddd3651b49b7936eb49d2f798accb Mon Sep 17 00:00:00 2001 From: Brandon Hancock Date: Thu, 26 Sep 2024 11:47:49 -0400 Subject: [PATCH] drop visualizer --- poetry.lock | 581 +++++++++++++++++- pyproject.toml | 3 + src/crewai/flow/basic_flow.py | 52 -- src/crewai/flow/decorators.py | 1 - src/crewai/flow/examples/context.py | 13 - src/crewai/flow/examples/longer.py | 17 - src/crewai/flow/examples/router.py | 22 - src/crewai/flow/examples/simple.py | 13 - src/crewai/flow/examples/simple_with_crew.py | 19 - src/crewai/flow/flow.py | 101 --- src/crewai/flow/flow_graph.png | Bin 54627 -> 0 bytes src/crewai/flow/flow_output_test.py | 26 - src/crewai/flow/large_flow.py | 119 ---- src/crewai/flow/structured_test_flow.py | 44 -- src/crewai/flow/structured_test_flow_and.py | 27 - src/crewai/flow/structured_test_flow_or.py | 27 - .../flow/structured_test_flow_router.py | 41 -- src/crewai/flow/super_simple_ai_flow.py | 52 -- src/crewai/flow/unstructured_test_flow.py | 34 - 19 files changed, 583 insertions(+), 609 deletions(-) delete mode 100644 src/crewai/flow/basic_flow.py delete mode 100644 src/crewai/flow/decorators.py delete mode 100644 src/crewai/flow/examples/context.py delete mode 100644 src/crewai/flow/examples/longer.py delete mode 100644 src/crewai/flow/examples/router.py delete mode 100644 src/crewai/flow/examples/simple.py delete mode 100644 src/crewai/flow/examples/simple_with_crew.py delete mode 100644 src/crewai/flow/flow_graph.png delete mode 100644 src/crewai/flow/flow_output_test.py delete mode 100644 src/crewai/flow/large_flow.py delete mode 100644 src/crewai/flow/structured_test_flow.py delete mode 100644 src/crewai/flow/structured_test_flow_and.py delete mode 100644 src/crewai/flow/structured_test_flow_or.py delete mode 100644 src/crewai/flow/structured_test_flow_router.py delete mode 100644 src/crewai/flow/super_simple_ai_flow.py delete mode 100644 src/crewai/flow/unstructured_test_flow.py diff --git a/poetry.lock b/poetry.lock index 842db35ff..dda60c3a0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -239,6 +239,24 @@ typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} [package.extras] tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] +[[package]] +name = "asttokens" +version = "2.4.1" +description = "Annotate AST trees with source code positions" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, +] + +[package.dependencies] +six = ">=1.12.0" + +[package.extras] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] + [[package]] name = "async-timeout" version = "4.0.3" @@ -883,6 +901,90 @@ humanfriendly = ">=9.1" [package.extras] cron = ["capturer (>=2.4)"] +[[package]] +name = "contourpy" +version = "1.3.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +optional = false +python-versions = ">=3.9" +files = [ + {file = "contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7"}, + {file = "contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589"}, + {file = "contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d"}, + {file = "contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223"}, + {file = "contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f"}, + {file = "contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad"}, + {file = "contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1"}, + {file = "contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c"}, + {file = "contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb"}, + {file = "contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c"}, + {file = "contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f"}, + {file = "contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06"}, + {file = "contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd"}, + {file = "contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35"}, + {file = "contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb"}, + {file = "contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3"}, + {file = "contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b"}, + {file = "contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14"}, + {file = "contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8"}, + {file = "contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294"}, + {file = "contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8"}, + {file = "contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8"}, + {file = "contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2"}, + {file = "contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8"}, + {file = "contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc"}, + {file = "contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e"}, + {file = "contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800"}, + {file = "contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5"}, + {file = "contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779"}, + {file = "contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102"}, + {file = "contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb"}, + {file = "contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4"}, +] + +[package.dependencies] +numpy = ">=1.23" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.11.1)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + [[package]] name = "crashtest" version = "0.4.1" @@ -989,6 +1091,21 @@ webencodings = "*" doc = ["sphinx", "sphinx_rtd_theme"] test = ["flake8", "isort", "pytest"] +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, + {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, +] + +[package.extras] +docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] +tests = ["pytest", "pytest-cov", "pytest-xdist"] + [[package]] name = "dataclasses-json" version = "0.6.7" @@ -1275,6 +1392,20 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "executing" +version = "2.1.0" +description = "Get the currently executing AST node of a frame, and other information" +optional = false +python-versions = ">=3.8" +files = [ + {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, + {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, +] + +[package.extras] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] + [[package]] name = "fastapi" version = "0.114.2" @@ -1382,6 +1513,77 @@ files = [ {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, ] +[[package]] +name = "fonttools" +version = "4.54.1" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.54.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7ed7ee041ff7b34cc62f07545e55e1468808691dddfd315d51dd82a6b37ddef2"}, + {file = "fonttools-4.54.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41bb0b250c8132b2fcac148e2e9198e62ff06f3cc472065dff839327945c5882"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7965af9b67dd546e52afcf2e38641b5be956d68c425bef2158e95af11d229f10"}, + {file = "fonttools-4.54.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:278913a168f90d53378c20c23b80f4e599dca62fbffae4cc620c8eed476b723e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0e88e3018ac809b9662615072dcd6b84dca4c2d991c6d66e1970a112503bba7e"}, + {file = "fonttools-4.54.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4aa4817f0031206e637d1e685251ac61be64d1adef111060df84fdcbc6ab6c44"}, + {file = "fonttools-4.54.1-cp310-cp310-win32.whl", hash = "sha256:7e3b7d44e18c085fd8c16dcc6f1ad6c61b71ff463636fcb13df7b1b818bd0c02"}, + {file = "fonttools-4.54.1-cp310-cp310-win_amd64.whl", hash = "sha256:dd9cc95b8d6e27d01e1e1f1fae8559ef3c02c76317da650a19047f249acd519d"}, + {file = "fonttools-4.54.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5419771b64248484299fa77689d4f3aeed643ea6630b2ea750eeab219588ba20"}, + {file = "fonttools-4.54.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:301540e89cf4ce89d462eb23a89464fef50915255ece765d10eee8b2bf9d75b2"}, + {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76ae5091547e74e7efecc3cbf8e75200bc92daaeb88e5433c5e3e95ea8ce5aa7"}, + {file = "fonttools-4.54.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82834962b3d7c5ca98cb56001c33cf20eb110ecf442725dc5fdf36d16ed1ab07"}, + {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d26732ae002cc3d2ecab04897bb02ae3f11f06dd7575d1df46acd2f7c012a8d8"}, + {file = "fonttools-4.54.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:58974b4987b2a71ee08ade1e7f47f410c367cdfc5a94fabd599c88165f56213a"}, + {file = "fonttools-4.54.1-cp311-cp311-win32.whl", hash = "sha256:ab774fa225238986218a463f3fe151e04d8c25d7de09df7f0f5fce27b1243dbc"}, + {file = "fonttools-4.54.1-cp311-cp311-win_amd64.whl", hash = "sha256:07e005dc454eee1cc60105d6a29593459a06321c21897f769a281ff2d08939f6"}, + {file = "fonttools-4.54.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:54471032f7cb5fca694b5f1a0aaeba4af6e10ae989df408e0216f7fd6cdc405d"}, + {file = "fonttools-4.54.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fa92cb248e573daab8d032919623cc309c005086d743afb014c836636166f08"}, + {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a911591200114969befa7f2cb74ac148bce5a91df5645443371aba6d222e263"}, + {file = "fonttools-4.54.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93d458c8a6a354dc8b48fc78d66d2a8a90b941f7fec30e94c7ad9982b1fa6bab"}, + {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5eb2474a7c5be8a5331146758debb2669bf5635c021aee00fd7c353558fc659d"}, + {file = "fonttools-4.54.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c9c563351ddc230725c4bdf7d9e1e92cbe6ae8553942bd1fb2b2ff0884e8b714"}, + {file = "fonttools-4.54.1-cp312-cp312-win32.whl", hash = "sha256:fdb062893fd6d47b527d39346e0c5578b7957dcea6d6a3b6794569370013d9ac"}, + {file = "fonttools-4.54.1-cp312-cp312-win_amd64.whl", hash = "sha256:e4564cf40cebcb53f3dc825e85910bf54835e8a8b6880d59e5159f0f325e637e"}, + {file = "fonttools-4.54.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6e37561751b017cf5c40fce0d90fd9e8274716de327ec4ffb0df957160be3bff"}, + {file = "fonttools-4.54.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:357cacb988a18aace66e5e55fe1247f2ee706e01debc4b1a20d77400354cddeb"}, + {file = "fonttools-4.54.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e953cc0bddc2beaf3a3c3b5dd9ab7554677da72dfaf46951e193c9653e515a"}, + {file = "fonttools-4.54.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:58d29b9a294573d8319f16f2f79e42428ba9b6480442fa1836e4eb89c4d9d61c"}, + {file = "fonttools-4.54.1-cp313-cp313-win32.whl", hash = "sha256:9ef1b167e22709b46bf8168368b7b5d3efeaaa746c6d39661c1b4405b6352e58"}, + {file = "fonttools-4.54.1-cp313-cp313-win_amd64.whl", hash = "sha256:262705b1663f18c04250bd1242b0515d3bbae177bee7752be67c979b7d47f43d"}, + {file = "fonttools-4.54.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ed2f80ca07025551636c555dec2b755dd005e2ea8fbeb99fc5cdff319b70b23b"}, + {file = "fonttools-4.54.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9dc080e5a1c3b2656caff2ac2633d009b3a9ff7b5e93d0452f40cd76d3da3b3c"}, + {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d152d1be65652fc65e695e5619e0aa0982295a95a9b29b52b85775243c06556"}, + {file = "fonttools-4.54.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8583e563df41fdecef31b793b4dd3af8a9caa03397be648945ad32717a92885b"}, + {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:0d1d353ef198c422515a3e974a1e8d5b304cd54a4c2eebcae708e37cd9eeffb1"}, + {file = "fonttools-4.54.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fda582236fee135d4daeca056c8c88ec5f6f6d88a004a79b84a02547c8f57386"}, + {file = "fonttools-4.54.1-cp38-cp38-win32.whl", hash = "sha256:e7d82b9e56716ed32574ee106cabca80992e6bbdcf25a88d97d21f73a0aae664"}, + {file = "fonttools-4.54.1-cp38-cp38-win_amd64.whl", hash = "sha256:ada215fd079e23e060157aab12eba0d66704316547f334eee9ff26f8c0d7b8ab"}, + {file = "fonttools-4.54.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f5b8a096e649768c2f4233f947cf9737f8dbf8728b90e2771e2497c6e3d21d13"}, + {file = "fonttools-4.54.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4e10d2e0a12e18f4e2dd031e1bf7c3d7017be5c8dbe524d07706179f355c5dac"}, + {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:31c32d7d4b0958600eac75eaf524b7b7cb68d3a8c196635252b7a2c30d80e986"}, + {file = "fonttools-4.54.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c39287f5c8f4a0c5a55daf9eaf9ccd223ea59eed3f6d467133cc727d7b943a55"}, + {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a7a310c6e0471602fe3bf8efaf193d396ea561486aeaa7adc1f132e02d30c4b9"}, + {file = "fonttools-4.54.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d3b659d1029946f4ff9b6183984578041b520ce0f8fb7078bb37ec7445806b33"}, + {file = "fonttools-4.54.1-cp39-cp39-win32.whl", hash = "sha256:e96bc94c8cda58f577277d4a71f51c8e2129b8b36fd05adece6320dd3d57de8a"}, + {file = "fonttools-4.54.1-cp39-cp39-win_amd64.whl", hash = "sha256:e8a4b261c1ef91e7188a30571be6ad98d1c6d9fa2427244c545e2fa0a2494dd7"}, + {file = "fonttools-4.54.1-py3-none-any.whl", hash = "sha256:37cddd62d83dc4f72f7c3f3c2bcf2697e89a30efb152079896544a93907733bd"}, + {file = "fonttools-4.54.1.tar.gz", hash = "sha256:957f669d4922f92c171ba01bef7f29410668db09f6c02111e22b2bce446f3285"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "pycairo", "scipy"] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.1.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + [[package]] name = "frozenlist" version = "1.4.1" @@ -2389,6 +2591,44 @@ mistralai = ["mistralai (>=0.1.8,<0.2.0)"] test-docs = ["anthropic (>=0.27.0,<0.28.0)", "cohere (>=5.1.8,<6.0.0)", "diskcache (>=5.6.3,<6.0.0)", "fastapi (>=0.109.2,<0.110.0)", "groq (>=0.4.2,<0.5.0)", "litellm (>=1.35.31,<2.0.0)", "mistralai (>=0.1.8,<0.2.0)", "pandas (>=2.2.0,<3.0.0)", "pydantic_extra_types (>=2.6.0,<3.0.0)", "redis (>=5.0.1,<6.0.0)", "tabulate (>=0.9.0,<0.10.0)"] vertexai = ["google-cloud-aiplatform (>=1.52.0,<2.0.0)", "jsonref (>=1.1.0,<2.0.0)"] +[[package]] +name = "ipython" +version = "8.27.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.10" +files = [ + {file = "ipython-8.27.0-py3-none-any.whl", hash = "sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c"}, + {file = "ipython-8.27.0.tar.gz", hash = "sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt-toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5.13.0" +typing-extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} + +[package.extras] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "intersphinx-registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing-extensions"] +kernel = ["ipykernel"] +matplotlib = ["matplotlib"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] + [[package]] name = "isort" version = "5.13.2" @@ -2421,6 +2661,25 @@ more-itertools = "*" docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +[[package]] +name = "jedi" +version = "0.19.1" +description = "An autocompletion tool for Python that can be used for text editors." +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, +] + +[package.dependencies] +parso = ">=0.8.3,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + [[package]] name = "jeepney" version = "0.8.0" @@ -2639,6 +2898,129 @@ completion = ["shtab (>=1.1.0)"] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +[[package]] +name = "kiwisolver" +version = "1.4.7" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.8" +files = [ + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17"}, + {file = "kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05"}, + {file = "kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895"}, + {file = "kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c"}, + {file = "kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95"}, + {file = "kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052"}, + {file = "kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3"}, + {file = "kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b"}, + {file = "kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a"}, + {file = "kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258"}, + {file = "kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383"}, + {file = "kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb"}, + {file = "kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6"}, + {file = "kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34"}, + {file = "kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a"}, + {file = "kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76"}, + {file = "kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5d5abf8f8ec1f4e22882273c423e16cae834c36856cac348cfbfa68e01c40f3a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:aeb3531b196ef6f11776c21674dba836aeea9d5bd1cf630f869e3d90b16cfade"}, + {file = "kiwisolver-1.4.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7d755065e4e866a8086c9bdada157133ff466476a2ad7861828e17b6026e22c"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08471d4d86cbaec61f86b217dd938a83d85e03785f51121e791a6e6689a3be95"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bbfcb7165ce3d54a3dfbe731e470f65739c4c1f85bb1018ee912bae139e263b"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d34eb8494bea691a1a450141ebb5385e4b69d38bb8403b5146ad279f4b30fa3"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9242795d174daa40105c1d86aba618e8eab7bf96ba8c3ee614da8302a9f95503"}, + {file = "kiwisolver-1.4.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a0f64a48bb81af7450e641e3fe0b0394d7381e342805479178b3d335d60ca7cf"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8e045731a5416357638d1700927529e2b8ab304811671f665b225f8bf8d8f933"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4322872d5772cae7369f8351da1edf255a604ea7087fe295411397d0cfd9655e"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e1631290ee9271dffe3062d2634c3ecac02c83890ada077d225e081aca8aab89"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:edcfc407e4eb17e037bca59be0e85a2031a2ac87e4fed26d3e9df88b4165f92d"}, + {file = "kiwisolver-1.4.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4d05d81ecb47d11e7f8932bd8b61b720bf0b41199358f3f5e36d38e28f0532c5"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win32.whl", hash = "sha256:b38ac83d5f04b15e515fd86f312479d950d05ce2368d5413d46c088dda7de90a"}, + {file = "kiwisolver-1.4.7-cp38-cp38-win_amd64.whl", hash = "sha256:d83db7cde68459fc803052a55ace60bea2bae361fc3b7a6d5da07e11954e4b09"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583"}, + {file = "kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb"}, + {file = "kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4"}, + {file = "kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4"}, + {file = "kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bfa1acfa0c54932d5607e19a2c24646fb4c1ae2694437789129cf099789a3b00"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:eee3ea935c3d227d49b4eb85660ff631556841f6e567f0f7bda972df6c2c9935"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f3160309af4396e0ed04db259c3ccbfdc3621b5559b5453075e5de555e1f3a1b"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a17f6a29cf8935e587cc8a4dbfc8368c55edc645283db0ce9801016f83526c2d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10849fb2c1ecbfae45a693c070e0320a91b35dd4bcf58172c023b994283a124d"}, + {file = "kiwisolver-1.4.7-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ac542bf38a8a4be2dc6b15248d36315ccc65f0743f7b1a76688ffb6b5129a5c2"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225"}, + {file = "kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0"}, + {file = "kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60"}, +] + [[package]] name = "kubernetes" version = "30.1.0" @@ -3034,6 +3416,83 @@ dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.13)", "sphinx (==8.0.2)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] tests = ["pytest", "pytz", "simplejson"] +[[package]] +name = "matplotlib" +version = "3.9.2" +description = "Python plotting package" +optional = false +python-versions = ">=3.9" +files = [ + {file = "matplotlib-3.9.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9d78bbc0cbc891ad55b4f39a48c22182e9bdaea7fc0e5dbd364f49f729ca1bbb"}, + {file = "matplotlib-3.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c375cc72229614632c87355366bdf2570c2dac01ac66b8ad048d2dabadf2d0d4"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d94ff717eb2bd0b58fe66380bd8b14ac35f48a98e7c6765117fe67fb7684e64"}, + {file = "matplotlib-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab68d50c06938ef28681073327795c5db99bb4666214d2d5f880ed11aeaded66"}, + {file = "matplotlib-3.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65aacf95b62272d568044531e41de26285d54aec8cb859031f511f84bd8b495a"}, + {file = "matplotlib-3.9.2-cp310-cp310-win_amd64.whl", hash = "sha256:3fd595f34aa8a55b7fc8bf9ebea8aa665a84c82d275190a61118d33fbc82ccae"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8dd059447824eec055e829258ab092b56bb0579fc3164fa09c64f3acd478772"}, + {file = "matplotlib-3.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c797dac8bb9c7a3fd3382b16fe8f215b4cf0f22adccea36f1545a6d7be310b41"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d719465db13267bcef19ea8954a971db03b9f48b4647e3860e4bc8e6ed86610f"}, + {file = "matplotlib-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8912ef7c2362f7193b5819d17dae8629b34a95c58603d781329712ada83f9447"}, + {file = "matplotlib-3.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7741f26a58a240f43bee74965c4882b6c93df3e7eb3de160126d8c8f53a6ae6e"}, + {file = "matplotlib-3.9.2-cp311-cp311-win_amd64.whl", hash = "sha256:ae82a14dab96fbfad7965403c643cafe6515e386de723e498cf3eeb1e0b70cc7"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ac43031375a65c3196bee99f6001e7fa5bdfb00ddf43379d3c0609bdca042df9"}, + {file = "matplotlib-3.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be0fc24a5e4531ae4d8e858a1a548c1fe33b176bb13eff7f9d0d38ce5112a27d"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf81de2926c2db243c9b2cbc3917619a0fc85796c6ba4e58f541df814bbf83c7"}, + {file = "matplotlib-3.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ee45bc4245533111ced13f1f2cace1e7f89d1c793390392a80c139d6cf0e6c"}, + {file = "matplotlib-3.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:306c8dfc73239f0e72ac50e5a9cf19cc4e8e331dd0c54f5e69ca8758550f1e1e"}, + {file = "matplotlib-3.9.2-cp312-cp312-win_amd64.whl", hash = "sha256:5413401594cfaff0052f9d8b1aafc6d305b4bd7c4331dccd18f561ff7e1d3bd3"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:18128cc08f0d3cfff10b76baa2f296fc28c4607368a8402de61bb3f2eb33c7d9"}, + {file = "matplotlib-3.9.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4876d7d40219e8ae8bb70f9263bcbe5714415acfdf781086601211335e24f8aa"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d9f07a80deab4bb0b82858a9e9ad53d1382fd122be8cde11080f4e7dfedb38b"}, + {file = "matplotlib-3.9.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7c0410f181a531ec4e93bbc27692f2c71a15c2da16766f5ba9761e7ae518413"}, + {file = "matplotlib-3.9.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:909645cce2dc28b735674ce0931a4ac94e12f5b13f6bb0b5a5e65e7cea2c192b"}, + {file = "matplotlib-3.9.2-cp313-cp313-win_amd64.whl", hash = "sha256:f32c7410c7f246838a77d6d1eff0c0f87f3cb0e7c4247aebea71a6d5a68cab49"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:37e51dd1c2db16ede9cfd7b5cabdfc818b2c6397c83f8b10e0e797501c963a03"}, + {file = "matplotlib-3.9.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b82c5045cebcecd8496a4d694d43f9cc84aeeb49fe2133e036b207abe73f4d30"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f053c40f94bc51bc03832a41b4f153d83f2062d88c72b5e79997072594e97e51"}, + {file = "matplotlib-3.9.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbe196377a8248972f5cede786d4c5508ed5f5ca4a1e09b44bda889958b33f8c"}, + {file = "matplotlib-3.9.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5816b1e1fe8c192cbc013f8f3e3368ac56fbecf02fb41b8f8559303f24c5015e"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:cef2a73d06601437be399908cf13aee74e86932a5ccc6ccdf173408ebc5f6bb2"}, + {file = "matplotlib-3.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e0830e188029c14e891fadd99702fd90d317df294c3298aad682739c5533721a"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ba9c1299c920964e8d3857ba27173b4dbb51ca4bab47ffc2c2ba0eb5e2cbc5"}, + {file = "matplotlib-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cd93b91ab47a3616b4d3c42b52f8363b88ca021e340804c6ab2536344fad9ca"}, + {file = "matplotlib-3.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6d1ce5ed2aefcdce11904fc5bbea7d9c21fff3d5f543841edf3dea84451a09ea"}, + {file = "matplotlib-3.9.2-cp39-cp39-win_amd64.whl", hash = "sha256:b2696efdc08648536efd4e1601b5fd491fd47f4db97a5fbfd175549a7365c1b2"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d52a3b618cb1cbb769ce2ee1dcdb333c3ab6e823944e9a2d36e37253815f9556"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:039082812cacd6c6bec8e17a9c1e6baca230d4116d522e81e1f63a74d01d2e21"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6758baae2ed64f2331d4fd19be38b7b4eae3ecec210049a26b6a4f3ae1c85dcc"}, + {file = "matplotlib-3.9.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:050598c2b29e0b9832cde72bcf97627bf00262adbc4a54e2b856426bb2ef0697"}, + {file = "matplotlib-3.9.2.tar.gz", hash = "sha256:96ab43906269ca64a6366934106fa01534454a69e471b7bf3d79083981aaab92"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.23" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +description = "Inline Matplotlib backend for Jupyter" +optional = false +python-versions = ">=3.8" +files = [ + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, +] + +[package.dependencies] +traitlets = "*" + [[package]] name = "mdurl" version = "0.1.2" @@ -3584,6 +4043,24 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "networkx" +version = "3.3" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.10" +files = [ + {file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"}, + {file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"}, +] + +[package.extras] +default = ["matplotlib (>=3.6)", "numpy (>=1.23)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["myst-nb (>=1.0)", "numpydoc (>=1.7)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=2.0)", "pygraphviz (>=1.12)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + [[package]] name = "nodeenv" version = "1.9.1" @@ -4109,6 +4586,21 @@ files = [ [package.extras] dev = ["jinja2"] +[[package]] +name = "parso" +version = "0.8.4" +description = "A Python Parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, +] + +[package.extras] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] + [[package]] name = "pathspec" version = "0.12.1" @@ -4398,6 +4890,20 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" +[[package]] +name = "prompt-toolkit" +version = "3.0.48" +description = "Library for building powerful interactive command lines in Python" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, +] + +[package.dependencies] +wcwidth = "*" + [[package]] name = "proto-plus" version = "1.24.0" @@ -4521,6 +5027,20 @@ all = ["apache-bookkeeper-client (>=4.16.1)", "fastavro (>=1.9.2)", "grpcio (>=1 avro = ["fastavro (>=1.9.2)"] functions = ["apache-bookkeeper-client (>=4.16.1)", "grpcio (>=1.60.0)", "prometheus-client", "protobuf (>=3.6.1,<=3.20.3)", "ratelimit"] +[[package]] +name = "pure-eval" +version = "0.2.3" +description = "Safely evaluate AST nodes without side effects" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, +] + +[package.extras] +tests = ["pytest"] + [[package]] name = "py" version = "1.11.0" @@ -4827,6 +5347,20 @@ pyyaml = "*" [package.extras] extra = ["pygments (>=2.12)"] +[[package]] +name = "pyparsing" +version = "3.1.4" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.1.4-py3-none-any.whl", hash = "sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c"}, + {file = "pyparsing-3.1.4.tar.gz", hash = "sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + [[package]] name = "pypdf" version = "4.3.1" @@ -5920,6 +6454,25 @@ postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] pymysql = ["pymysql"] sqlcipher = ["sqlcipher3_binary"] +[[package]] +name = "stack-data" +version = "0.6.3" +description = "Extract data from python stack frames and tracebacks for informative displays" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + [[package]] name = "starlette" version = "0.38.5" @@ -6226,6 +6779,21 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "traitlets" +version = "5.14.3" +description = "Traitlets Python configuration system" +optional = false +python-versions = ">=3.8" +files = [ + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] + [[package]] name = "trio" version = "0.26.2" @@ -6604,6 +7172,17 @@ files = [ [package.dependencies] anyio = ">=3.0.0" +[[package]] +name = "wcwidth" +version = "0.2.13" +description = "Measures the displayed width of unicode strings in a terminal" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] + [[package]] name = "webencodings" version = "0.5.1" @@ -7023,4 +7602,4 @@ tools = ["crewai-tools"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<=3.13" -content-hash = "80b7909ba10f19ffeeac6d6ce3c802158c75ff4328da0379549c28c054bd16eb" +content-hash = "4e6d5c650af9d92ac2638adfd3c905689f498c7b7a541326baeb8b2150e12cfb" diff --git a/pyproject.toml b/pyproject.toml index 2f84530f3..28236bc37 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,6 +33,9 @@ auth0-python = "^4.7.1" poetry = "^1.8.3" litellm = "^1.44.22" graphviz = "^0.20.3" +matplotlib = "^3.9.2" +networkx = "^3.3" +ipython = "^8.27.0" [tool.poetry.extras] tools = ["crewai-tools"] diff --git a/src/crewai/flow/basic_flow.py b/src/crewai/flow/basic_flow.py deleted file mode 100644 index 6c126f9a9..000000000 --- a/src/crewai/flow/basic_flow.py +++ /dev/null @@ -1,52 +0,0 @@ -import asyncio - -from crewai.flow.flow import Flow, listen, start -from litellm import completion - - -class ExampleFlow(Flow): - model = "gpt-4o-mini" - - @start() - def generate_city(self): - print("Starting flow") - - response = completion( - model=self.model, - messages=[ - { - "role": "user", - "content": "Return the name of a random city in the world.", - }, - ], - ) - - random_city = response["choices"][0]["message"]["content"] - print(f"Random City: {random_city}") - - return random_city - - @listen(generate_city) - def generate_fun_fact(self, random_city): - response = completion( - model=self.model, - messages=[ - { - "role": "user", - "content": f"Tell me a fun fact about {random_city}", - }, - ], - ) - - fun_fact = response["choices"][0]["message"]["content"] - return fun_fact - - -async def main(): - flow = ExampleFlow() - result = await flow.kickoff() - - print(f"Generated fun fact: {result}") - - -asyncio.run(main()) diff --git a/src/crewai/flow/decorators.py b/src/crewai/flow/decorators.py deleted file mode 100644 index e151d4aaf..000000000 --- a/src/crewai/flow/decorators.py +++ /dev/null @@ -1 +0,0 @@ -# TODO: diff --git a/src/crewai/flow/examples/context.py b/src/crewai/flow/examples/context.py deleted file mode 100644 index 2d3b5be7d..000000000 --- a/src/crewai/flow/examples/context.py +++ /dev/null @@ -1,13 +0,0 @@ -from crewai.flows import Flow, end_job, start_job # type: ignore - - -class SimpleFlow(Flow): - - @start_job() - async def research(self, topic: str) -> str: - print(f"Researching {topic}...") - return f"Full report on {topic}..." - - @end_job("research") - async def write_post(self, report: str) -> str: - return f"Post written: {report}" diff --git a/src/crewai/flow/examples/longer.py b/src/crewai/flow/examples/longer.py deleted file mode 100644 index ce378a142..000000000 --- a/src/crewai/flow/examples/longer.py +++ /dev/null @@ -1,17 +0,0 @@ -from crewai.flows import Flow, end_job, job, start_job # type: ignore - - -class LongerFlow(Flow): - - @start_job() - async def research(self, topic: str) -> str: - print(f"Researching {topic}...") - return f"Full report on {topic}..." - - @job("research") - async def edit_report(self, report: str) -> str: - return f"Edited report: {report}" - - @end_job("edit_report") - async def write_post(self, report: str) -> str: - return f"Post written: {report}" diff --git a/src/crewai/flow/examples/router.py b/src/crewai/flow/examples/router.py deleted file mode 100644 index d68208fb0..000000000 --- a/src/crewai/flow/examples/router.py +++ /dev/null @@ -1,22 +0,0 @@ -from typing import Tuple - -from crewai.flows import Flow, end_job, router, start_job # type: ignore - - -class RouterFlow(Flow): - - @start_job() - @router() - async def classify_email(self, report: str) -> Tuple[str, str]: - if "urgent" in report: - return "urgent", report - - return "normal", report - - @end_job("urgent") - async def write_urgent_email(self, report: str) -> str: - return f"Urgent Email Response: {report}" - - @end_job("normal") - async def write_normal_email(self, report: str) -> str: - return f"Normal Email Response: {report}" diff --git a/src/crewai/flow/examples/simple.py b/src/crewai/flow/examples/simple.py deleted file mode 100644 index 2d3b5be7d..000000000 --- a/src/crewai/flow/examples/simple.py +++ /dev/null @@ -1,13 +0,0 @@ -from crewai.flows import Flow, end_job, start_job # type: ignore - - -class SimpleFlow(Flow): - - @start_job() - async def research(self, topic: str) -> str: - print(f"Researching {topic}...") - return f"Full report on {topic}..." - - @end_job("research") - async def write_post(self, report: str) -> str: - return f"Post written: {report}" diff --git a/src/crewai/flow/examples/simple_with_crew.py b/src/crewai/flow/examples/simple_with_crew.py deleted file mode 100644 index b4a8487be..000000000 --- a/src/crewai/flow/examples/simple_with_crew.py +++ /dev/null @@ -1,19 +0,0 @@ -from crewai.flows import Flow, end_job, job, start_job # type: ignore - - -class SimpleFlow(Flow): - - @start_job() - async def research_crew(self, topic: str) -> str: - result = research_crew.kickoff(inputs={topic: topic}) - return result.raw - - @job("research_crew") - async def create_x_post(self, research: str) -> str: - result = x_post_crew.kickoff(inputs={research: research}) - return result.raw - - @end_job("research") - async def post_to_x(self, post: str) -> None: - # TODO: Post to X - return None diff --git a/src/crewai/flow/flow.py b/src/crewai/flow/flow.py index 4d3b421bf..ab561349f 100644 --- a/src/crewai/flow/flow.py +++ b/src/crewai/flow/flow.py @@ -2,7 +2,6 @@ import asyncio import inspect from typing import Any, Callable, Dict, Generic, List, Set, Type, TypeVar, Union -import graphviz from pydantic import BaseModel T = TypeVar("T", bound=Union[BaseModel, Dict[str, Any]]) @@ -251,103 +250,3 @@ class Flow(Generic[T], metaclass=FlowMeta): import traceback traceback.print_exc() - - def visualize(self, filename="flow_graph"): - dot = graphviz.Digraph(comment="Flow Graph", engine="dot") - dot.attr( - rankdir="TB", size="20,20", splines="curved" - ) # Changed to curved splines - - # Color scheme (using company colors) - colors = { - "bg": "#FFFFFF", - "start": "#FF5A50", - "method": "#333333", - "router_outline": "#FF5A50", - "edge": "#333333", - "text": "#FFFFFF", - } - - dot.attr(bgcolor=colors["bg"]) - - # Add nodes for each relevant method - for method_name, method in self._methods.items(): - if ( - hasattr(method, "__is_start_method__") - or method_name in self._listeners - or method_name in self._routers.values() - ): - shape = "rectangle" - style = "filled,rounded" - fillcolor = colors["method"] - - if hasattr(method, "__is_start_method__"): - fillcolor = colors["start"] - - dot.node( - method_name, - method_name, - shape=shape, - style=style, - fillcolor=fillcolor, - fontcolor=colors["text"], - penwidth="2", - ) - - # Add edges and enhanced router representation - for method_name, method in self._methods.items(): - if method_name in self._listeners: - condition_type, trigger_methods = self._listeners[method_name] - for trigger in trigger_methods: - if condition_type == "AND": - dot.edge( - trigger, - method_name, - color=colors["edge"], - style="dashed", - penwidth="2", - ) - else: # OR condition - dot.edge( - trigger, method_name, color=colors["edge"], penwidth="2" - ) - - if method_name in self._routers.values(): - for trigger, router in self._routers.items(): - if router == method_name: - # Create a subgraph for the router and its outputs - subgraph_name = f"cluster_{method_name}" - subgraph = graphviz.Digraph(name=subgraph_name) - subgraph.attr( - label="", - style="filled,rounded", - color=colors["router_outline"], - fillcolor=colors["method"], - penwidth="3", - ) # Changed to solid line and increased penwidth - - # Router label (method name) and outputs - label = f"{method_name}\\n\\nPossible outcomes:\\n• Success\\n• Failure" - subgraph.node( - method_name, - label, - shape="plaintext", - fontcolor=colors["text"], - ) - - # Add the subgraph to the main graph - dot.subgraph(subgraph) - - # Connect trigger to router (to the border of the subgraph) - dot.edge( - trigger, - method_name, - color=colors["edge"], - style="solid", - penwidth="2", - lhead=subgraph_name, - ) - - # Render and save the graph - dot.render(filename, format="png", cleanup=True, view=True) - print(f"Graph saved as {filename}.png") diff --git a/src/crewai/flow/flow_graph.png b/src/crewai/flow/flow_graph.png deleted file mode 100644 index a031ab3ec1b7415bf4f0bc8da175650209b325f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54627 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