From 1396de6a7ed7990887f23766f8f30cd2349d26ea Mon Sep 17 00:00:00 2001 From: Gregory Gauthier Date: Fri, 17 Apr 2026 11:46:40 +0100 Subject: [PATCH] feat(diagrams): add PNG diagrams for Testing Telos post Update testing-telos.md with relative asset paths and refined content. Add generated PNGs: telos-feature-iteration.png, telos-invariance-testing.png, telos-cross-cutting.png, telos-targeted-concerns.png. Introduce pyproject.toml and poetry.lock for diagram generation dependencies. Add svg-to-png.py script for generating diagrams. Rename drafts/testing-telos.html to references/testing-telos.html. --- articles/drafts/testing-telos.md | 12 +- assets/clipart/telos-cross-cutting.png | Bin 0 -> 5611 bytes assets/clipart/telos-feature-iteration.png | Bin 0 -> 12018 bytes assets/clipart/telos-invariance-testing.png | Bin 0 -> 25275 bytes assets/clipart/telos-targeted-concerns.png | Bin 0 -> 12637 bytes poetry.lock | 638 ++++++++++++++++++ pyproject.toml | 18 + .../drafts => references}/testing-telos.html | 0 scripts/svg-to-png.py | 105 +++ 9 files changed, 767 insertions(+), 6 deletions(-) create mode 100644 assets/clipart/telos-cross-cutting.png create mode 100644 assets/clipart/telos-feature-iteration.png create mode 100644 assets/clipart/telos-invariance-testing.png create mode 100644 assets/clipart/telos-targeted-concerns.png create mode 100644 poetry.lock create mode 100644 pyproject.toml rename {articles/drafts => references}/testing-telos.html (100%) create mode 100644 scripts/svg-to-png.py diff --git a/articles/drafts/testing-telos.md b/articles/drafts/testing-telos.md index 350af1d..1e24357 100644 --- a/articles/drafts/testing-telos.md +++ b/articles/drafts/testing-telos.md @@ -14,7 +14,7 @@ What follows are the four archetypal testing shapes we have observed across real ## 1. Feature Iteration — The Triangle -![](/Users/gregory.gauthier/Projects/local/work-blog/assets/clipart/diagram-triangle.svg) +![](/assets/clipart/telos-feature-iteration.png) **Emphasis downward — build confidence from the base up** @@ -28,7 +28,7 @@ What follows are the four archetypal testing shapes we have observed across real ## 2. Invariance Testing — The Bullseye -![](/Users/gregory.gauthier/Projects/local/work-blog/assets/clipart/diagram-circle.svg) +![](/assets/clipart/telos-invariance-testing.png) **Emphasis inward — protecting a core that must remain stable** @@ -42,7 +42,7 @@ What follows are the four archetypal testing shapes we have observed across real ## 3. Cross-Cutting Structural Changes — The Diamond -![](/Users/gregory.gauthier/Projects/local/work-blog/assets/clipart/diagram-diamond.svg) +![](/assets/clipart/telos-cross-cutting.png) **Emphasis outward — broadly general, no layer is privileged** @@ -56,7 +56,7 @@ What follows are the four archetypal testing shapes we have observed across real ## 4. Targeted Non-Functional Concerns — The Star -![](/Users/gregory.gauthier/Projects/local/work-blog/assets/clipart/diagram-star.svg) +![](/assets/clipart/telos-targeted-concerns.png) **Emphasis spiked — each point is a specific vector of concern** @@ -72,9 +72,9 @@ What follows are the four archetypal testing shapes we have observed across real A mature testing practice begins with a single diagnostic question: -> *What is the telos of the work we are about to undertake?* +> *What is the purpose (telos) of the work we are about to undertake?* -Answer that question honestly and the appropriate testing shape reveals itself. Trying to force a star-shaped concern (e.g., a security audit) into a pyramid-shaped strategy produces either massive waste or dangerous blind spots. Conversely, treating a simple feature addition as a diamond-shaped structural migration inflates effort without improving outcomes. +The purpose we're concerned with here is the *kind of change we want to make* (regardless of the product delivered). Answer that question honestly, and the appropriate testing shape reveals itself. Trying to force a star-shaped concern (e.g., a security audit) into a pyramid-shaped strategy produces either massive waste or dangerous blind spots. Conversely, treating a simple feature addition as a diamond-shaped structural migration inflates effort without improving outcomes. The shapes are not mutually exclusive. A single release may contain work that belongs in more than one category. The craft lies in recognizing the dominant telos of each piece of work and allocating testing effort accordingly. diff --git a/assets/clipart/telos-cross-cutting.png b/assets/clipart/telos-cross-cutting.png new file mode 100644 index 0000000000000000000000000000000000000000..a81390873c21aa92668ebce68bedad8c12959083 GIT binary patch literal 5611 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 literal 0 HcmV?d00001 diff --git a/assets/clipart/telos-feature-iteration.png b/assets/clipart/telos-feature-iteration.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb26b336aa630658a59df42b2ca928443960c20 GIT binary patch literal 12018 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

|nx3q^fT=L%UBvGBQ60zdIW6 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.2)", "sphinx-copybutton"] +mypy = ["bokeh", "contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.17.0)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "pytest-rerunfailures", "pytest-xdist", "wurlitzer"] + +[[package]] +name = "cycler" +version = "0.12.1" +description = "Composable style cycles" +optional = false +python-versions = ">=3.8" +groups = ["main"] +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 = "fonttools" +version = "4.62.1" +description = "Tools to manipulate font files" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "fonttools-4.62.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ad5cca75776cd453b1b035b530e943334957ae152a36a88a320e779d61fc980c"}, + {file = "fonttools-4.62.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b3ae47e8636156a9accff64c02c0924cbebad62854c4a6dbdc110cd5b4b341a"}, + {file = "fonttools-4.62.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b9e288b4da2f64fd6180644221749de651703e8d0c16bd4b719533a3a7d6e3"}, + {file = "fonttools-4.62.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7bca7a1c1faf235ffe25d4f2e555246b4750220b38de8261d94ebc5ce8a23c23"}, + {file = "fonttools-4.62.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b4e0fcf265ad26e487c56cb12a42dffe7162de708762db951e1b3f755319507d"}, + {file = "fonttools-4.62.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2d850f66830a27b0d498ee05adb13a3781637b1826982cd7e2b3789ef0cc71ae"}, + {file = "fonttools-4.62.1-cp310-cp310-win32.whl", hash = "sha256:486f32c8047ccd05652aba17e4a8819a3a9d78570eb8a0e3b4503142947880ed"}, + {file = "fonttools-4.62.1-cp310-cp310-win_amd64.whl", hash = "sha256:5a648bde915fba9da05ae98856987ca91ba832949a9e2888b48c47ef8b96c5a9"}, + {file = "fonttools-4.62.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:40975849bac44fb0b9253d77420c6d8b523ac4dcdcefeff6e4d706838a5b80f7"}, + {file = "fonttools-4.62.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9dde91633f77fa576879a0c76b1d89de373cae751a98ddf0109d54e173b40f14"}, + {file = "fonttools-4.62.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6acb4109f8bee00fec985c8c7afb02299e35e9c94b57287f3ea542f28bd0b0a7"}, + {file = "fonttools-4.62.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1c5c25671ce8805e0d080e2ffdeca7f1e86778c5cbfbeae86d7f866d8830517b"}, + {file = "fonttools-4.62.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a5d8825e1140f04e6c99bb7d37a9e31c172f3bc208afbe02175339e699c710e1"}, + {file = "fonttools-4.62.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:268abb1cb221e66c014acc234e872b7870d8b5d4657a83a8f4205094c32d2416"}, + {file = "fonttools-4.62.1-cp311-cp311-win32.whl", hash = "sha256:942b03094d7edbb99bdf1ae7e9090898cad7bf9030b3d21f33d7072dbcb51a53"}, + {file = "fonttools-4.62.1-cp311-cp311-win_amd64.whl", hash = "sha256:e8514f4924375f77084e81467e63238b095abda5107620f49421c368a6017ed2"}, + {file = "fonttools-4.62.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:90365821debbd7db678809c7491ca4acd1e0779b9624cdc6ddaf1f31992bf974"}, + {file = "fonttools-4.62.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:12859ff0b47dd20f110804c3e0d0970f7b832f561630cd879969011541a464a9"}, + {file = "fonttools-4.62.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c125ffa00c3d9003cdaaf7f2c79e6e535628093e14b5de1dccb08859b680936"}, + {file = "fonttools-4.62.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:149f7d84afca659d1a97e39a4778794a2f83bf344c5ee5134e09995086cc2392"}, + {file = "fonttools-4.62.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0aa72c43a601cfa9273bb1ae0518f1acadc01ee181a6fc60cd758d7fdadffc04"}, + {file = "fonttools-4.62.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:19177c8d96c7c36359266e571c5173bcee9157b59cfc8cb0153c5673dc5a3a7d"}, + {file = "fonttools-4.62.1-cp312-cp312-win32.whl", hash = "sha256:a24decd24d60744ee8b4679d38e88b8303d86772053afc29b19d23bb8207803c"}, + {file = "fonttools-4.62.1-cp312-cp312-win_amd64.whl", hash = "sha256:9e7863e10b3de72376280b515d35b14f5eeed639d1aa7824f4cf06779ec65e42"}, + {file = "fonttools-4.62.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c22b1014017111c401469e3acc5433e6acf6ebcc6aa9efb538a533c800971c79"}, + {file = "fonttools-4.62.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:68959f5fc58ed4599b44aad161c2837477d7f35f5f79402d97439974faebfebe"}, + {file = "fonttools-4.62.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef46db46c9447103b8f3ff91e8ba009d5fe181b1920a83757a5762551e32bb68"}, + {file = "fonttools-4.62.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6706d1cb1d5e6251a97ad3c1b9347505c5615c112e66047abbef0f8545fa30d1"}, + {file = "fonttools-4.62.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2e7abd2b1e11736f58c1de27819e1955a53267c21732e78243fa2fa2e5c1e069"}, + {file = "fonttools-4.62.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:403d28ce06ebfc547fbcb0cb8b7f7cc2f7a2d3e1a67ba9a34b14632df9e080f9"}, + {file = "fonttools-4.62.1-cp313-cp313-win32.whl", hash = "sha256:93c316e0f5301b2adbe6a5f658634307c096fd5aae60a5b3412e4f3e1728ab24"}, + {file = "fonttools-4.62.1-cp313-cp313-win_amd64.whl", hash = "sha256:7aa21ff53e28a9c2157acbc44e5b401149d3c9178107130e82d74ceb500e5056"}, + {file = "fonttools-4.62.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fa1d16210b6b10a826d71bed68dd9ec24a9e218d5a5e2797f37c573e7ec215ca"}, + {file = "fonttools-4.62.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:aa69d10ed420d8121118e628ad47d86e4caa79ba37f968597b958f6cceab7eca"}, + {file = "fonttools-4.62.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd13b7999d59c5eb1c2b442eb2d0c427cb517a0b7a1f5798fc5c9e003f5ff782"}, + {file = "fonttools-4.62.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8d337fdd49a79b0d51c4da87bc38169d21c3abbf0c1aa9367eff5c6656fb6dae"}, + {file = "fonttools-4.62.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d241cdc4a67b5431c6d7f115fdf63335222414995e3a1df1a41e1182acd4bcc7"}, + {file = "fonttools-4.62.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c05557a78f8fa514da0f869556eeda40887a8abc77c76ee3f74cf241778afd5a"}, + {file = "fonttools-4.62.1-cp314-cp314-win32.whl", hash = "sha256:49a445d2f544ce4a69338694cad575ba97b9a75fff02720da0882d1a73f12800"}, + {file = "fonttools-4.62.1-cp314-cp314-win_amd64.whl", hash = "sha256:1eecc128c86c552fb963fe846ca4e011b1be053728f798185a1687502f6d398e"}, + {file = "fonttools-4.62.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:1596aeaddf7f78e21e68293c011316a25267b3effdaccaf4d59bc9159d681b82"}, + {file = "fonttools-4.62.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:8f8fca95d3bb3208f59626a4b0ea6e526ee51f5a8ad5d91821c165903e8d9260"}, + {file = "fonttools-4.62.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee91628c08e76f77b533d65feb3fbe6d9dad699f95be51cf0d022db94089cdc4"}, + {file = "fonttools-4.62.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f37df1cac61d906e7b836abe356bc2f34c99d4477467755c216b72aa3dc748b"}, + {file = "fonttools-4.62.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:92bb00a947e666169c99b43753c4305fc95a890a60ef3aeb2a6963e07902cc87"}, + {file = "fonttools-4.62.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bdfe592802ef939a0e33106ea4a318eeb17822c7ee168c290273cbd5fabd746c"}, + {file = "fonttools-4.62.1-cp314-cp314t-win32.whl", hash = "sha256:b820fcb92d4655513d8402d5b219f94481c4443d825b4372c75a2072aa4b357a"}, + {file = "fonttools-4.62.1-cp314-cp314t-win_amd64.whl", hash = "sha256:59b372b4f0e113d3746b88985f1c796e7bf830dd54b28374cd85c2b8acd7583e"}, + {file = "fonttools-4.62.1-py3-none-any.whl", hash = "sha256:7487782e2113861f4ddcc07c3436450659e3caa5e470b27dc2177cade2d8e7fd"}, + {file = "fonttools-4.62.1.tar.gz", hash = "sha256:e54c75fd6041f1122476776880f7c3c3295ffa31962dc6ebe2543c00dca58b5d"}, +] + +[package.extras] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.45.0)", "unicodedata2 (>=17.0.0) ; python_version <= \"3.14\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] +lxml = ["lxml (>=4.0)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.45.0)"] +symfont = ["sympy"] +type1 = ["xattr ; sys_platform == \"darwin\""] +unicode = ["unicodedata2 (>=17.0.0) ; python_version <= \"3.14\""] +woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] + +[[package]] +name = "kiwisolver" +version = "1.5.0" +description = "A fast implementation of the Cassowary constraint solver" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd"}, + {file = "kiwisolver-1.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:62f59da443c4f4849f73a51a193b1d9d258dcad0c41bc4d1b8fb2bcc04bfeb22"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9190426b7aa26c5229501fa297b8d0653cfd3f5a36f7990c264e157cbf886b3b"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c8277104ded0a51e699c8c3aff63ce2c56d4ed5519a5f73e0fd7057f959a2b9e"}, + {file = "kiwisolver-1.5.0-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8f9baf6f0a6e7571c45c8863010b45e837c3ee1c2c77fcd6ef423be91b21fedb"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cff8e5383db4989311f99e814feeb90c4723eb4edca425b9d5d9c3fefcdd9537"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:ebae99ed6764f2b5771c522477b311be313e8841d2e0376db2b10922daebbba4"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d5cd5189fc2b6a538b75ae45433140c4823463918f7b1617c31e68b085c0022c"}, + {file = "kiwisolver-1.5.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f42c23db5d1521218a3276bb08666dcb662896a0be7347cba864eca45ff64ede"}, + {file = "kiwisolver-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:94eff26096eb5395136634622515b234ecb6c9979824c1f5004c6e3c3c85ccd2"}, + {file = "kiwisolver-1.5.0-cp310-cp310-win_arm64.whl", hash = "sha256:dd952e03bfbb096cfe2dd35cd9e00f269969b67536cb4370994afc20ff2d0875"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb"}, + {file = "kiwisolver-1.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc"}, + {file = "kiwisolver-1.5.0-cp311-cp311-manylinux_2_39_riscv64.whl", hash = "sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08"}, + {file = "kiwisolver-1.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4"}, + {file = "kiwisolver-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b"}, + {file = "kiwisolver-1.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4e9750bc21b886308024f8a54ccb9a2cc38ac9fa813bf4348434e3d54f337ff9"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588"}, + {file = "kiwisolver-1.5.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2af221f268f5af85e776a73d62b0845fc8baf8ef0abfae79d29c77d0e776aaf"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b0f172dc8ffaccb8522d7c5d899de00133f2f1ca7b0a49b7da98e901de87bf2d"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6ab8ba9152203feec73758dad83af9a0bbe05001eb4639e547207c40cfb52083"}, + {file = "kiwisolver-1.5.0-cp312-cp312-manylinux_2_39_riscv64.whl", hash = "sha256:cdee07c4d7f6d72008d3f73b9bf027f4e11550224c7c50d8df1ae4a37c1402a6"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7c60d3c9b06fb23bd9c6139281ccbdc384297579ae037f08ae90c69f6845c0b1"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:e315e5ec90d88e140f57696ff85b484ff68bb311e36f2c414aa4286293e6dee0"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:1465387ac63576c3e125e5337a6892b9e99e0627d52317f3ca79e6930d889d15"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:530a3fd64c87cffa844d4b6b9768774763d9caa299e9b75d8eca6a4423b31314"}, + {file = "kiwisolver-1.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d9daea4ea6b9be74fe2f01f7fbade8d6ffab263e781274cffca0dba9be9eec9"}, + {file = "kiwisolver-1.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384"}, + {file = "kiwisolver-1.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:f7c7553b13f69c1b29a5bde08ddc6d9d0c8bfb84f9ed01c30db25944aeb852a7"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3"}, + {file = "kiwisolver-1.5.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8"}, + {file = "kiwisolver-1.5.0-cp313-cp313-manylinux_2_39_riscv64.whl", hash = "sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167"}, + {file = "kiwisolver-1.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0"}, + {file = "kiwisolver-1.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276"}, + {file = "kiwisolver-1.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-manylinux_2_39_riscv64.whl", hash = "sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2"}, + {file = "kiwisolver-1.5.0-cp313-cp313t-win_arm64.whl", hash = "sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02"}, + {file = "kiwisolver-1.5.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a"}, + {file = "kiwisolver-1.5.0-cp314-cp314-manylinux_2_39_riscv64.whl", hash = "sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79"}, + {file = "kiwisolver-1.5.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796"}, + {file = "kiwisolver-1.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e"}, + {file = "kiwisolver-1.5.0-cp314-cp314-win_arm64.whl", hash = "sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-manylinux_2_39_riscv64.whl", hash = "sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681"}, + {file = "kiwisolver-1.5.0-cp314-cp314t-win_arm64.whl", hash = "sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_10_13_x86_64.whl", hash = "sha256:5ae8e62c147495b01a0f4765c878e9bfdf843412446a247e28df59936e99e797"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:f6764a4ccab3078db14a632420930f6186058750df066b8ea2a7106df91d3203"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c31c13da98624f957b0fb1b5bae5383b2333c2c3f6793d9825dd5ce79b525cb7"}, + {file = "kiwisolver-1.5.0-graalpy312-graalpy250_312_native-win_amd64.whl", hash = "sha256:1f1489f769582498610e015a8ef2d36f28f505ab3096d0e16b4858a9ec214f57"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b83af57bdddef03c01a9138034c6ff03181a3028d9a1003b301eb1a55e161a3f"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf4679a3d71012a7c2bf360e5cd878fbd5e4fcac0896b56393dec239d81529ed"}, + {file = "kiwisolver-1.5.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:41024ed50e44ab1a60d3fe0a9d15a4ccc9f5f2b1d814ff283c8d01134d5b81bc"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16"}, + {file = "kiwisolver-1.5.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1"}, + {file = "kiwisolver-1.5.0.tar.gz", hash = "sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a"}, +] + +[[package]] +name = "matplotlib" +version = "3.10.8" +description = "Python plotting package" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "matplotlib-3.10.8-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:00270d217d6b20d14b584c521f810d60c5c78406dc289859776550df837dcda7"}, + {file = "matplotlib-3.10.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:37b3c1cc42aa184b3f738cfa18c1c1d72fd496d85467a6cf7b807936d39aa656"}, + {file = "matplotlib-3.10.8-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ee40c27c795bda6a5292e9cff9890189d32f7e3a0bf04e0e3c9430c4a00c37df"}, + {file = "matplotlib-3.10.8-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a48f2b74020919552ea25d222d5cc6af9ca3f4eb43a93e14d068457f545c2a17"}, + {file = "matplotlib-3.10.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f254d118d14a7f99d616271d6c3c27922c092dac11112670b157798b89bf4933"}, + {file = "matplotlib-3.10.8-cp310-cp310-win_amd64.whl", hash = "sha256:f9b587c9c7274c1613a30afabf65a272114cd6cdbe67b3406f818c79d7ab2e2a"}, + {file = "matplotlib-3.10.8-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6be43b667360fef5c754dda5d25a32e6307a03c204f3c0fc5468b78fa87b4160"}, + {file = "matplotlib-3.10.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2b336e2d91a3d7006864e0990c83b216fcdca64b5a6484912902cef87313d78"}, + {file = "matplotlib-3.10.8-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:efb30e3baaea72ce5928e32bab719ab4770099079d66726a62b11b1ef7273be4"}, + {file = "matplotlib-3.10.8-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d56a1efd5bfd61486c8bc968fa18734464556f0fb8e51690f4ac25d85cbbbbc2"}, + {file = "matplotlib-3.10.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238b7ce5717600615c895050239ec955d91f321c209dd110db988500558e70d6"}, + {file = "matplotlib-3.10.8-cp311-cp311-win_amd64.whl", hash = "sha256:18821ace09c763ec93aef5eeff087ee493a24051936d7b9ebcad9662f66501f9"}, + {file = "matplotlib-3.10.8-cp311-cp311-win_arm64.whl", hash = "sha256:bab485bcf8b1c7d2060b4fcb6fc368a9e6f4cd754c9c2fea281f4be21df394a2"}, + {file = "matplotlib-3.10.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:64fcc24778ca0404ce0cb7b6b77ae1f4c7231cdd60e6778f999ee05cbd581b9a"}, + {file = "matplotlib-3.10.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b9a5ca4ac220a0cdd1ba6bcba3608547117d30468fefce49bb26f55c1a3d5c58"}, + {file = "matplotlib-3.10.8-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3ab4aabc72de4ff77b3ec33a6d78a68227bf1123465887f9905ba79184a1cc04"}, + {file = "matplotlib-3.10.8-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24d50994d8c5816ddc35411e50a86ab05f575e2530c02752e02538122613371f"}, + {file = "matplotlib-3.10.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:99eefd13c0dc3b3c1b4d561c1169e65fe47aab7b8158754d7c084088e2329466"}, + {file = "matplotlib-3.10.8-cp312-cp312-win_amd64.whl", hash = "sha256:dd80ecb295460a5d9d260df63c43f4afbdd832d725a531f008dad1664f458adf"}, + {file = "matplotlib-3.10.8-cp312-cp312-win_arm64.whl", hash = "sha256:3c624e43ed56313651bc18a47f838b60d7b8032ed348911c54906b130b20071b"}, + {file = "matplotlib-3.10.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3f2e409836d7f5ac2f1c013110a4d50b9f7edc26328c108915f9075d7d7a91b6"}, + {file = "matplotlib-3.10.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56271f3dac49a88d7fca5060f004d9d22b865f743a12a23b1e937a0be4818ee1"}, + {file = "matplotlib-3.10.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a0a7f52498f72f13d4a25ea70f35f4cb60642b466cbb0a9be951b5bc3f45a486"}, + {file = "matplotlib-3.10.8-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:646d95230efb9ca614a7a594d4fcacde0ac61d25e37dd51710b36477594963ce"}, + {file = "matplotlib-3.10.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f89c151aab2e2e23cb3fe0acad1e8b82841fd265379c4cecd0f3fcb34c15e0f6"}, + {file = "matplotlib-3.10.8-cp313-cp313-win_amd64.whl", hash = "sha256:e8ea3e2d4066083e264e75c829078f9e149fa119d27e19acd503de65e0b13149"}, + {file = "matplotlib-3.10.8-cp313-cp313-win_arm64.whl", hash = "sha256:c108a1d6fa78a50646029cb6d49808ff0fc1330fda87fa6f6250c6b5369b6645"}, + {file = "matplotlib-3.10.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ad3d9833a64cf48cc4300f2b406c3d0f4f4724a91c0bd5640678a6ba7c102077"}, + {file = "matplotlib-3.10.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:eb3823f11823deade26ce3b9f40dcb4a213da7a670013929f31d5f5ed1055b22"}, + {file = "matplotlib-3.10.8-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d9050fee89a89ed57b4fb2c1bfac9a3d0c57a0d55aed95949eedbc42070fea39"}, + {file = "matplotlib-3.10.8-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b44d07310e404ba95f8c25aa5536f154c0a8ec473303535949e52eb71d0a1565"}, + {file = "matplotlib-3.10.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0a33deb84c15ede243aead39f77e990469fff93ad1521163305095b77b72ce4a"}, + {file = "matplotlib-3.10.8-cp313-cp313t-win_amd64.whl", hash = "sha256:3a48a78d2786784cc2413e57397981fb45c79e968d99656706018d6e62e57958"}, + {file = "matplotlib-3.10.8-cp313-cp313t-win_arm64.whl", hash = "sha256:15d30132718972c2c074cd14638c7f4592bd98719e2308bccea40e0538bc0cb5"}, + {file = "matplotlib-3.10.8-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b53285e65d4fa4c86399979e956235deb900be5baa7fc1218ea67fbfaeaadd6f"}, + {file = "matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32f8dce744be5569bebe789e46727946041199030db8aeb2954d26013a0eb26b"}, + {file = "matplotlib-3.10.8-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cf267add95b1c88300d96ca837833d4112756045364f5c734a2276038dae27d"}, + {file = "matplotlib-3.10.8-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2cf5bd12cecf46908f286d7838b2abc6c91cda506c0445b8223a7c19a00df008"}, + {file = "matplotlib-3.10.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:41703cc95688f2516b480f7f339d8851a6035f18e100ee6a32bc0b8536a12a9c"}, + {file = "matplotlib-3.10.8-cp314-cp314-win_amd64.whl", hash = "sha256:83d282364ea9f3e52363da262ce32a09dfe241e4080dcedda3c0db059d3c1f11"}, + {file = "matplotlib-3.10.8-cp314-cp314-win_arm64.whl", hash = "sha256:2c1998e92cd5999e295a731bcb2911c75f597d937341f3030cc24ef2733d78a8"}, + {file = "matplotlib-3.10.8-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b5a2b97dbdc7d4f353ebf343744f1d1f1cca8aa8bfddb4262fcf4306c3761d50"}, + {file = "matplotlib-3.10.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3f5c3e4da343bba819f0234186b9004faba952cc420fbc522dc4e103c1985908"}, + {file = "matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f62550b9a30afde8c1c3ae450e5eb547d579dd69b25c2fc7a1c67f934c1717a"}, + {file = "matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:495672de149445ec1b772ff2c9ede9b769e3cb4f0d0aa7fa730d7f59e2d4e1c1"}, + {file = "matplotlib-3.10.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:595ba4d8fe983b88f0eec8c26a241e16d6376fe1979086232f481f8f3f67494c"}, + {file = "matplotlib-3.10.8-cp314-cp314t-win_amd64.whl", hash = "sha256:25d380fe8b1dc32cf8f0b1b448470a77afb195438bafdf1d858bfb876f3edf7b"}, + {file = "matplotlib-3.10.8-cp314-cp314t-win_arm64.whl", hash = "sha256:113bb52413ea508ce954a02c10ffd0d565f9c3bc7f2eddc27dfe1731e71c7b5f"}, + {file = "matplotlib-3.10.8-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f97aeb209c3d2511443f8797e3e5a569aebb040d4f8bc79aa3ee78a8fb9e3dd8"}, + {file = "matplotlib-3.10.8-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:fb061f596dad3a0f52b60dc6a5dec4a0c300dec41e058a7efe09256188d170b7"}, + {file = "matplotlib-3.10.8-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:12d90df9183093fcd479f4172ac26b322b1248b15729cb57f42f71f24c7e37a3"}, + {file = "matplotlib-3.10.8-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:6da7c2ce169267d0d066adcf63758f0604aa6c3eebf67458930f9d9b79ad1db1"}, + {file = "matplotlib-3.10.8-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9153c3292705be9f9c64498a8872118540c3f4123d1a1c840172edf262c8be4a"}, + {file = "matplotlib-3.10.8-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ae029229a57cd1e8fe542485f27e7ca7b23aa9e8944ddb4985d0bc444f1eca2"}, + {file = "matplotlib-3.10.8.tar.gz", hash = "sha256:2299372c19d56bcd35cf05a2738308758d32b9eaed2371898d8f5bd33f084aa3"}, +] + +[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 = ">=3" +python-dateutil = ">=2.7" + +[package.extras] +dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] + +[[package]] +name = "numpy" +version = "2.4.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.11" +groups = ["main"] +files = [ + {file = "numpy-2.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f983334aea213c99992053ede6168500e5f086ce74fbc4acc3f2b00f5762e9db"}, + {file = "numpy-2.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:72944b19f2324114e9dc86a159787333b77874143efcf89a5167ef83cfee8af0"}, + {file = "numpy-2.4.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:86b6f55f5a352b48d7fbfd2dbc3d5b780b2d79f4d3c121f33eb6efb22e9a2015"}, + {file = "numpy-2.4.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:ba1f4fc670ed79f876f70082eff4f9583c15fb9a4b89d6188412de4d18ae2f40"}, + {file = "numpy-2.4.4-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a87ec22c87be071b6bdbd27920b129b94f2fc964358ce38f3822635a3e2e03d"}, + {file = "numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502"}, + {file = "numpy-2.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0d4e437e295f18ec29bc79daf55e8a47a9113df44d66f702f02a293d93a2d6dd"}, + {file = "numpy-2.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6aa3236c78803afbcb255045fbef97a9e25a1f6c9888357d205ddc42f4d6eba5"}, + {file = "numpy-2.4.4-cp311-cp311-win32.whl", hash = "sha256:30caa73029a225b2d40d9fae193e008e24b2026b7ee1a867b7ee8d96ca1a448e"}, + {file = "numpy-2.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:6bbe4eb67390b0a0265a2c25458f6b90a409d5d069f1041e6aff1e27e3d9a79e"}, + {file = "numpy-2.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:fcfe2045fd2e8f3cb0ce9d4ba6dba6333b8fa05bb8a4939c908cd43322d14c7e"}, + {file = "numpy-2.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:15716cfef24d3a9762e3acdf87e27f58dc823d1348f765bbea6bef8c639bfa1b"}, + {file = "numpy-2.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23cbfd4c17357c81021f21540da84ee282b9c8fba38a03b7b9d09ba6b951421e"}, + {file = "numpy-2.4.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b3b60bb7cba2c8c81837661c488637eee696f59a877788a396d33150c35d842"}, + {file = "numpy-2.4.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e4a010c27ff6f210ff4c6ef34394cd61470d01014439b192ec22552ee867f2a8"}, + {file = "numpy-2.4.4-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f9e75681b59ddaa5e659898085ae0eaea229d054f2ac0c7e563a62205a700121"}, + {file = "numpy-2.4.4-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:81f4a14bee47aec54f883e0cad2d73986640c1590eb9bfaaba7ad17394481e6e"}, + {file = "numpy-2.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:62d6b0f03b694173f9fcb1fb317f7222fd0b0b103e784c6549f5e53a27718c44"}, + {file = "numpy-2.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbc356aae7adf9e6336d336b9c8111d390a05df88f1805573ebb0807bd06fd1d"}, + {file = "numpy-2.4.4-cp312-cp312-win32.whl", hash = "sha256:0d35aea54ad1d420c812bfa0385c71cd7cc5bcf7c65fed95fc2cd02fe8c79827"}, + {file = "numpy-2.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:b5f0362dc928a6ecd9db58868fca5e48485205e3855957bdedea308f8672ea4a"}, + {file = "numpy-2.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:846300f379b5b12cc769334464656bc882e0735d27d9726568bc932fdc49d5ec"}, + {file = "numpy-2.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:08f2e31ed5e6f04b118e49821397f12767934cfdd12a1ce86a058f91e004ee50"}, + {file = "numpy-2.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e823b8b6edc81e747526f70f71a9c0a07ac4e7ad13020aa736bb7c9d67196115"}, + {file = "numpy-2.4.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:4a19d9dba1a76618dd86b164d608566f393f8ec6ac7c44f0cc879011c45e65af"}, + {file = "numpy-2.4.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:d2a8490669bfe99a233298348acc2d824d496dee0e66e31b66a6022c2ad74a5c"}, + {file = "numpy-2.4.4-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45dbed2ab436a9e826e302fcdcbe9133f9b0006e5af7168afb8963a6520da103"}, + {file = "numpy-2.4.4-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c901b15172510173f5cb310eae652908340f8dede90fff9e3bf6c0d8dfd92f83"}, + {file = "numpy-2.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:99d838547ace2c4aace6c4f76e879ddfe02bb58a80c1549928477862b7a6d6ed"}, + {file = "numpy-2.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0aec54fd785890ecca25a6003fd9a5aed47ad607bbac5cd64f836ad8666f4959"}, + {file = "numpy-2.4.4-cp313-cp313-win32.whl", hash = "sha256:07077278157d02f65c43b1b26a3886bce886f95d20aabd11f87932750dfb14ed"}, + {file = "numpy-2.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:5c70f1cc1c4efbe316a572e2d8b9b9cc44e89b95f79ca3331553fbb63716e2bf"}, + {file = "numpy-2.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:ef4059d6e5152fa1a39f888e344c73fdc926e1b2dd58c771d67b0acfbf2aa67d"}, + {file = "numpy-2.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4bbc7f303d125971f60ec0aaad5e12c62d0d2c925f0ab1273debd0e4ba37aba5"}, + {file = "numpy-2.4.4-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:4d6d57903571f86180eb98f8f0c839fa9ebbfb031356d87f1361be91e433f5b7"}, + {file = "numpy-2.4.4-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:4636de7fd195197b7535f231b5de9e4b36d2c440b6e566d2e4e4746e6af0ca93"}, + {file = "numpy-2.4.4-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad2e2ef14e0b04e544ea2fa0a36463f847f113d314aa02e5b402fdf910ef309e"}, + {file = "numpy-2.4.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a285b3b96f951841799528cd1f4f01cd70e7e0204b4abebac9463eecfcf2a40"}, + {file = "numpy-2.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f8474c4241bc18b750be2abea9d7a9ec84f46ef861dbacf86a4f6e043401f79e"}, + {file = "numpy-2.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4e874c976154687c1f71715b034739b45c7711bec81db01914770373d125e392"}, + {file = "numpy-2.4.4-cp313-cp313t-win32.whl", hash = "sha256:9c585a1790d5436a5374bac930dad6ed244c046ed91b2b2a3634eb2971d21008"}, + {file = "numpy-2.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:93e15038125dc1e5345d9b5b68aa7f996ec33b98118d18c6ca0d0b7d6198b7e8"}, + {file = "numpy-2.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:0dfd3f9d3adbe2920b68b5cd3d51444e13a10792ec7154cd0a2f6e74d4ab3233"}, + {file = "numpy-2.4.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:f169b9a863d34f5d11b8698ead99febeaa17a13ca044961aa8e2662a6c7766a0"}, + {file = "numpy-2.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2483e4584a1cb3092da4470b38866634bafb223cbcd551ee047633fd2584599a"}, + {file = "numpy-2.4.4-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:2d19e6e2095506d1736b7d80595e0f252d76b89f5e715c35e06e937679ea7d7a"}, + {file = "numpy-2.4.4-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6a246d5914aa1c820c9443ddcee9c02bec3e203b0c080349533fae17727dfd1b"}, + {file = "numpy-2.4.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:989824e9faf85f96ec9c7761cd8d29c531ad857bfa1daa930cba85baaecf1a9a"}, + {file = "numpy-2.4.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:27a8d92cd10f1382a67d7cf4db7ce18341b66438bdd9f691d7b0e48d104c2a9d"}, + {file = "numpy-2.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e44319a2953c738205bf3354537979eaa3998ed673395b964c1176083dd46252"}, + {file = "numpy-2.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e892aff75639bbef0d2a2cfd55535510df26ff92f63c92cd84ef8d4ba5a5557f"}, + {file = "numpy-2.4.4-cp314-cp314-win32.whl", hash = "sha256:1378871da56ca8943c2ba674530924bb8ca40cd228358a3b5f302ad60cf875fc"}, + {file = "numpy-2.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:715d1c092715954784bc79e1174fc2a90093dc4dc84ea15eb14dad8abdcdeb74"}, + {file = "numpy-2.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:2c194dd721e54ecad9ad387c1d35e63dce5c4450c6dc7dd5611283dda239aabb"}, + {file = "numpy-2.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2aa0613a5177c264ff5921051a5719d20095ea586ca88cc802c5c218d1c67d3e"}, + {file = "numpy-2.4.4-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:42c16925aa5a02362f986765f9ebabf20de75cdefdca827d14315c568dcab113"}, + {file = "numpy-2.4.4-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:874f200b2a981c647340f841730fc3a2b54c9d940566a3c4149099591e2c4c3d"}, + {file = "numpy-2.4.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9b39d38a9bd2ae1becd7eac1303d031c5c110ad31f2b319c6e7d98b135c934d"}, + {file = "numpy-2.4.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b268594bccac7d7cf5844c7732e3f20c50921d94e36d7ec9b79e9857694b1b2f"}, + {file = "numpy-2.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ac6b31e35612a26483e20750126d30d0941f949426974cace8e6b5c58a3657b0"}, + {file = "numpy-2.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8e3ed142f2728df44263aaf5fb1f5b0b99f4070c553a0d7f033be65338329150"}, + {file = "numpy-2.4.4-cp314-cp314t-win32.whl", hash = "sha256:dddbbd259598d7240b18c9d87c56a9d2fb3b02fe266f49a7c101532e78c1d871"}, + {file = "numpy-2.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:a7164afb23be6e37ad90b2f10426149fd75aee07ca55653d2aa41e66c4ef697e"}, + {file = "numpy-2.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:ba203255017337d39f89bdd58417f03c4426f12beed0440cfd933cb15f8669c7"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:58c8b5929fcb8287cbd6f0a3fae19c6e03a5c48402ae792962ac465224a629a4"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:eea7ac5d2dce4189771cedb559c738a71512768210dc4e4753b107a2048b3d0e"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:51fc224f7ca4d92656d5a5eb315f12eb5fe2c97a66249aa7b5f562528a3be38c"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:28a650663f7314afc3e6ec620f44f333c386aad9f6fc472030865dc0ebb26ee3"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:19710a9ca9992d7174e9c52f643d4272dcd1558c5f7af7f6f8190f633bd651a7"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9b2aec6af35c113b05695ebb5749a787acd63cafc83086a05771d1e1cd1e555f"}, + {file = "numpy-2.4.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f2cf083b324a467e1ab358c105f6cad5ea950f50524668a80c486ff1db24e119"}, + {file = "numpy-2.4.4.tar.gz", hash = "sha256:2d390634c5182175533585cc89f3608a4682ccb173cc9bb940b2881c8d6f8fa0"}, +] + +[[package]] +name = "packaging" +version = "26.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "packaging-26.1-py3-none-any.whl", hash = "sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f"}, + {file = "packaging-26.1.tar.gz", hash = "sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de"}, +] + +[[package]] +name = "pillow" +version = "12.2.0" +description = "Python Imaging Library (fork)" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "pillow-12.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:a4e8f36e677d3336f35089648c8955c51c6d386a13cf6ee9c189c5f5bd713a9f"}, + {file = "pillow-12.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e589959f10d9824d39b350472b92f0ce3b443c0a3442ebf41c40cb8361c5b97"}, + {file = "pillow-12.2.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a52edc8bfff4429aaabdf4d9ee0daadbbf8562364f940937b941f87a4290f5ff"}, + {file = "pillow-12.2.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:975385f4776fafde056abb318f612ef6285b10a1f12b8570f3647ad0d74b48ec"}, + {file = "pillow-12.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd9c0c7a0c681a347b3194c500cb1e6ca9cab053ea4d82a5cf45b6b754560136"}, + {file = "pillow-12.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:88d387ff40b3ff7c274947ed3125dedf5262ec6919d83946753b5f3d7c67ea4c"}, + {file = "pillow-12.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:51c4167c34b0d8ba05b547a3bb23578d0ba17b80a5593f93bd8ecb123dd336a3"}, + {file = "pillow-12.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:34c0d99ecccea270c04882cb3b86e7b57296079c9a4aff88cb3b33563d95afaa"}, + {file = "pillow-12.2.0-cp310-cp310-win32.whl", hash = "sha256:b85f66ae9eb53e860a873b858b789217ba505e5e405a24b85c0464822fe88032"}, + {file = "pillow-12.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:673aa32138f3e7531ccdbca7b3901dba9b70940a19ccecc6a37c77d5fdeb05b5"}, + {file = "pillow-12.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:3e080565d8d7c671db5802eedfb438e5565ffa40115216eabb8cd52d0ecce024"}, + {file = "pillow-12.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:8be29e59487a79f173507c30ddf57e733a357f67881430449bb32614075a40ab"}, + {file = "pillow-12.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71cde9a1e1551df7d34a25462fc60325e8a11a82cc2e2f54578e5e9a1e153d65"}, + {file = "pillow-12.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f490f9368b6fc026f021db16d7ec2fbf7d89e2edb42e8ec09d2c60505f5729c7"}, + {file = "pillow-12.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8bd7903a5f2a4545f6fd5935c90058b89d30045568985a71c79f5fd6edf9b91e"}, + {file = "pillow-12.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3997232e10d2920a68d25191392e3a4487d8183039e1c74c2297f00ed1c50705"}, + {file = "pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176"}, + {file = "pillow-12.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:56a3f9c60a13133a98ecff6197af34d7824de9b7b38c3654861a725c970c197b"}, + {file = "pillow-12.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:90e6f81de50ad6b534cab6e5aef77ff6e37722b2f5d908686f4a5c9eba17a909"}, + {file = "pillow-12.2.0-cp311-cp311-win32.whl", hash = "sha256:8c984051042858021a54926eb597d6ee3012393ce9c181814115df4c60b9a808"}, + {file = "pillow-12.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e6b2a0c538fc200b38ff9eb6628228b77908c319a005815f2dde585a0664b60"}, + {file = "pillow-12.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:9a8a34cc89c67a65ea7437ce257cea81a9dad65b29805f3ecee8c8fe8ff25ffe"}, + {file = "pillow-12.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2d192a155bbcec180f8564f693e6fd9bccff5a7af9b32e2e4bf8c9c69dbad6b5"}, + {file = "pillow-12.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3f40b3c5a968281fd507d519e444c35f0ff171237f4fdde090dd60699458421"}, + {file = "pillow-12.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:03e7e372d5240cc23e9f07deca4d775c0817bffc641b01e9c3af208dbd300987"}, + {file = "pillow-12.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b86024e52a1b269467a802258c25521e6d742349d760728092e1bc2d135b4d76"}, + {file = "pillow-12.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7371b48c4fa448d20d2714c9a1f775a81155050d383333e0a6c15b1123dda005"}, + {file = "pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:62f5409336adb0663b7caa0da5c7d9e7bdbaae9ce761d34669420c2a801b2780"}, + {file = "pillow-12.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:01afa7cf67f74f09523699b4e88c73fb55c13346d212a59a2db1f86b0a63e8c5"}, + {file = "pillow-12.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc3d34d4a8fbec3e88a79b92e5465e0f9b842b628675850d860b8bd300b159f5"}, + {file = "pillow-12.2.0-cp312-cp312-win32.whl", hash = "sha256:58f62cc0f00fd29e64b29f4fd923ffdb3859c9f9e6105bfc37ba1d08994e8940"}, + {file = "pillow-12.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:7f84204dee22a783350679a0333981df803dac21a0190d706a50475e361c93f5"}, + {file = "pillow-12.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:af73337013e0b3b46f175e79492d96845b16126ddf79c438d7ea7ff27783a414"}, + {file = "pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:8297651f5b5679c19968abefd6bb84d95fe30ef712eb1b2d9b2d31ca61267f4c"}, + {file = "pillow-12.2.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:50d8520da2a6ce0af445fa6d648c4273c3eeefbc32d7ce049f22e8b5c3daecc2"}, + {file = "pillow-12.2.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:766cef22385fa1091258ad7e6216792b156dc16d8d3fa607e7545b2b72061f1c"}, + {file = "pillow-12.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5d2fd0fa6b5d9d1de415060363433f28da8b1526c1c129020435e186794b3795"}, + {file = "pillow-12.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56b25336f502b6ed02e889f4ece894a72612fe885889a6e8c4c80239ff6e5f5f"}, + {file = "pillow-12.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f1c943e96e85df3d3478f7b691f229887e143f81fedab9b20205349ab04d73ed"}, + {file = "pillow-12.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:03f6fab9219220f041c74aeaa2939ff0062bd5c364ba9ce037197f4c6d498cd9"}, + {file = "pillow-12.2.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cdfebd752ec52bf5bb4e35d9c64b40826bc5b40a13df7c3cda20a2c03a0f5ed"}, + {file = "pillow-12.2.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eedf4b74eda2b5a4b2b2fb4c006d6295df3bf29e459e198c90ea48e130dc75c3"}, + {file = "pillow-12.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:00a2865911330191c0b818c59103b58a5e697cae67042366970a6b6f1b20b7f9"}, + {file = "pillow-12.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e1757442ed87f4912397c6d35a0db6a7b52592156014706f17658ff58bbf795"}, + {file = "pillow-12.2.0-cp313-cp313-win32.whl", hash = "sha256:144748b3af2d1b358d41286056d0003f47cb339b8c43a9ea42f5fea4d8c66b6e"}, + {file = "pillow-12.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:390ede346628ccc626e5730107cde16c42d3836b89662a115a921f28440e6a3b"}, + {file = "pillow-12.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:8023abc91fba39036dbce14a7d6535632f99c0b857807cbbbf21ecc9f4717f06"}, + {file = "pillow-12.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:042db20a421b9bafecc4b84a8b6e444686bd9d836c7fd24542db3e7df7baad9b"}, + {file = "pillow-12.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd025009355c926a84a612fecf58bb315a3f6814b17ead51a8e48d3823d9087f"}, + {file = "pillow-12.2.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:88ddbc66737e277852913bd1e07c150cc7bb124539f94c4e2df5344494e0a612"}, + {file = "pillow-12.2.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d362d1878f00c142b7e1a16e6e5e780f02be8195123f164edf7eddd911eefe7c"}, + {file = "pillow-12.2.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c727a6d53cb0018aadd8018c2b938376af27914a68a492f59dfcaca650d5eea"}, + {file = "pillow-12.2.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:efd8c21c98c5cc60653bcb311bef2ce0401642b7ce9d09e03a7da87c878289d4"}, + {file = "pillow-12.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9f08483a632889536b8139663db60f6724bfcb443c96f1b18855860d7d5c0fd4"}, + {file = "pillow-12.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dac8d77255a37e81a2efcbd1fc05f1c15ee82200e6c240d7e127e25e365c39ea"}, + {file = "pillow-12.2.0-cp313-cp313t-win32.whl", hash = "sha256:ee3120ae9dff32f121610bb08e4313be87e03efeadfc6c0d18f89127e24d0c24"}, + {file = "pillow-12.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:325ca0528c6788d2a6c3d40e3568639398137346c3d6e66bb61db96b96511c98"}, + {file = "pillow-12.2.0-cp313-cp313t-win_arm64.whl", hash = "sha256:2e5a76d03a6c6dcef67edabda7a52494afa4035021a79c8558e14af25313d453"}, + {file = "pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8"}, + {file = "pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b"}, + {file = "pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295"}, + {file = "pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed"}, + {file = "pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae"}, + {file = "pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601"}, + {file = "pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be"}, + {file = "pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f"}, + {file = "pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286"}, + {file = "pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50"}, + {file = "pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104"}, + {file = "pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7"}, + {file = "pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150"}, + {file = "pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1"}, + {file = "pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463"}, + {file = "pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3"}, + {file = "pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166"}, + {file = "pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe"}, + {file = "pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd"}, + {file = "pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e"}, + {file = "pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06"}, + {file = "pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43"}, + {file = "pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354"}, + {file = "pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1"}, + {file = "pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb"}, + {file = "pillow-12.2.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538bd5e05efec03ae613fd89c4ce0368ecd2ba239cc25b9f9be7ed426b0af1f"}, + {file = "pillow-12.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:394167b21da716608eac917c60aa9b969421b5dcbbe02ae7f013e7b85811c69d"}, + {file = "pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5d04bfa02cc2d23b497d1e90a0f927070043f6cbf303e738300532379a4b4e0f"}, + {file = "pillow-12.2.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0c838a5125cee37e68edec915651521191cef1e6aa336b855f495766e77a366e"}, + {file = "pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6c9fa44005fa37a91ebfc95d081e8079757d2e904b27103f4f5fa6f0bf78c0"}, + {file = "pillow-12.2.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25373b66e0dd5905ed63fa3cae13c82fbddf3079f2c8bf15c6fb6a35586324c1"}, + {file = "pillow-12.2.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bfa9c230d2fe991bed5318a5f119bd6780cda2915cca595393649fc118ab895e"}, + {file = "pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=8.2)", "sphinx-autobuild", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"] +fpx = ["olefile"] +mic = ["olefile"] +test-arrow = ["arro3-compute", "arro3-core", "nanoarrow", "pyarrow"] +tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma (>=5)", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "trove-classifiers (>=2024.10.12)"] +xmp = ["defusedxml"] + +[[package]] +name = "pyparsing" +version = "3.3.2" +description = "pyparsing - Classes and methods to define and execute parsing grammars" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d"}, + {file = "pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[metadata] +lock-version = "2.1" +python-versions = "^3.14" +content-hash = "063db7bf499a9eaf456c018af67dd570843a6bdf0a764c60339143524cb3e11c" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..e623fc7 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,18 @@ +[project] +name = "work-blog" +version = "0.1.0" +description = "" +authors = [ + {name = "Gregory Gauthier",email = "gregory.gauthier@perspectum.com"} +] +readme = "README.md" +requires-python = "^3.14" +dependencies = [ + "matplotlib (>=3.10.8,<4.0.0)", + "numpy (>=2.4.4,<3.0.0)" +] + + +[build-system] +requires = ["poetry-core>=2.0.0,<3.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/articles/drafts/testing-telos.html b/references/testing-telos.html similarity index 100% rename from articles/drafts/testing-telos.html rename to references/testing-telos.html diff --git a/scripts/svg-to-png.py b/scripts/svg-to-png.py new file mode 100644 index 0000000..8e866b7 --- /dev/null +++ b/scripts/svg-to-png.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +""" +Testing Telos - Diagram PNG Generator +===================================== +Generates the four high-resolution PNG diagrams for the "Testing Telos" blog post. +Saves them directly into an `assets/` folder (created automatically if missing). + +Run this script once in the root of your work-blog repository: + python3 generate-telos-diagrams.py + +It will produce: + assets/telos-feature-iteration.png + assets/telos-invariance-testing.png + assets/telos-cross-cutting.png + assets/telos-targeted-concerns.png + +All images are 260×260 px at 300 DPI for crisp rendering on the blog. +""" + +import matplotlib.pyplot as plt +from matplotlib.patches import Polygon, Circle +import numpy as np +import os + +# Ensure assets/ directory exists +os.makedirs("assets", exist_ok=True) +DPI = 300 +SIZE = 260 + +def save_fig(fig, filename): + """Save figure with consistent styling and transparency.""" + fig.savefig(f"assets/{filename}", dpi=DPI, bbox_inches="tight", pad_inches=0.02, transparent=True) + plt.close(fig) + print(f"✓ Generated: assets/{filename}") + +# 1. Feature Iteration — The Triangle (Pyramid) +fig1, ax1 = plt.subplots(figsize=(SIZE/100, SIZE/100)) +ax1.set_xlim(0, 100) +ax1.set_ylim(0, 105) +ax1.set_aspect("equal") +ax1.axis("off") + +# Main pyramid triangle +triangle = Polygon([[50, 12], [92, 92], [8, 92]], closed=True, + facecolor="#F8E4C4", edgecolor="#A07828", linewidth=6) +ax1.add_patch(triangle) + +# Unit-test layer line (widest) +ax1.plot([22, 78], [73, 73], color="#A07828", linewidth=3) + +# Integration-test layer line (middle) +ax1.plot([35, 65], [46, 46], color="#A07828", linewidth=3) + +save_fig(fig1, "telos-feature-iteration.png") + +# 2. Invariance Testing — The Bullseye +fig2, ax2 = plt.subplots(figsize=(SIZE/100, SIZE/100)) +ax2.set_xlim(0, 100) +ax2.set_ylim(0, 100) +ax2.set_aspect("equal") +ax2.axis("off") + +# Outermost ring +ax2.add_patch(Circle((50, 50), 44, facecolor="#D4B896", edgecolor="#A07828", linewidth=4)) +# Middle ring +ax2.add_patch(Circle((50, 50), 29, facecolor="#C4A276", edgecolor="#8B7560", linewidth=4)) +# Innermost ring +ax2.add_patch(Circle((50, 50), 14, facecolor="#A0522D", edgecolor="#7A3E20", linewidth=4)) + +save_fig(fig2, "telos-invariance-testing.png") + +# 3. Cross-Cutting Structural Changes — The Diamond +fig3, ax3 = plt.subplots(figsize=(SIZE/100, SIZE/100)) +ax3.set_xlim(0, 100) +ax3.set_ylim(0, 100) +ax3.set_aspect("equal") +ax3.axis("off") + +diamond_points = [[50, 6], [94, 50], [50, 94], [6, 50]] +diamond = Polygon(diamond_points, closed=True, + facecolor="#7BA085", edgecolor="#5A7A63", linewidth=6) +ax3.add_patch(diamond) + +save_fig(fig3, "telos-cross-cutting.png") + +# 4. Targeted Non-Functional Concerns — The Star +fig4, ax4 = plt.subplots(figsize=(SIZE/100, SIZE/100)) +ax4.set_xlim(0, 100) +ax4.set_ylim(0, 100) +ax4.set_aspect("equal") +ax4.axis("off") + +# Star vertices (10-pointed star) +star_points = np.array([ + [50, 4], [61, 36], [96, 36], [68, 58], [78, 92], + [50, 72], [22, 92], [32, 58], [4, 36], [39, 36] +]) +star = Polygon(star_points, closed=True, + facecolor="#C07060", edgecolor="#8B4040", linewidth=6) +ax4.add_patch(star) + +save_fig(fig4, "telos-targeted-concerns.png") + +print("\n🎉 All four Testing Telos PNG diagrams have been generated successfully!") +print(" They are now ready to be referenced in your Markdown post.") \ No newline at end of file