From 6047aa4eb73e927269b5f0d8dce09ccc0f80d75b Mon Sep 17 00:00:00 2001 From: David Orme Date: Thu, 8 May 2025 16:37:39 +0100 Subject: [PATCH 1/3] Adding codespell to project and pre-commit --- .pre-commit-config.yaml | 4 + poetry.lock | 427 +++++++++++++++++++++++++++++++++++++++- pyproject.toml | 5 + 3 files changed, 431 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f37b613ab..34622cf33 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,3 +28,7 @@ repos: exclude: docs/source/conf.py|docs/source/genindex.md|docs/source/modindex.md additional_dependencies: - black==24.4.2 # Matches hook + - repo: https://github.com/codespell-project/codespell + rev: v2.4.1 + hooks: + - id: codespell \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index d07dc225a..45790c380 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. [[package]] name = "alabaster" @@ -6,6 +6,8 @@ version = "1.0.0" description = "A light, configurable Sphinx theme" optional = false python-versions = ">=3.10" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b"}, {file = "alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e"}, @@ -17,6 +19,8 @@ version = "4.9.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, @@ -39,6 +43,8 @@ version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false python-versions = ">=3.6" +groups = ["devenv", "docs"] +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Darwin\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, @@ -50,6 +56,8 @@ version = "23.1.0" description = "Argon2 for Python" optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, @@ -70,6 +78,8 @@ version = "21.2.0" description = "Low-level CFFI bindings for Argon2" optional = false python-versions = ">=3.6" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, @@ -107,6 +117,8 @@ version = "1.3.0" description = "Better dates & times for Python" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, @@ -126,6 +138,8 @@ version = "3.0.0" description = "Annotate AST trees with source code positions" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, @@ -141,6 +155,8 @@ version = "2.0.5" description = "Simple LRU cache for asyncio" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"}, {file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"}, @@ -155,6 +171,8 @@ version = "25.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" +groups = ["main", "devenv", "docs", "test", "types"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, @@ -174,6 +192,8 @@ version = "0.2.14" description = "Extended sphinx autodoc including automatic autosummaries" optional = false python-versions = ">=3.7" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "autodocsumm-0.2.14-py3-none-any.whl", hash = "sha256:3bad8717fc5190802c60392a7ab04b9f3c97aa9efa8b3780b3d81d615bfe5dc0"}, {file = "autodocsumm-0.2.14.tar.gz", hash = "sha256:2839a9d4facc3c4eccd306c08695540911042b46eeafcdc3203e6d0bab40bc77"}, @@ -188,6 +208,8 @@ version = "2.17.0" description = "Internationalization utilities" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, @@ -202,6 +224,8 @@ version = "2.0.3" description = "Backport of Python 3.11's datetime.fromisoformat" optional = false python-versions = ">3" +groups = ["main"] +markers = "python_version < \"3.11\"" files = [ {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f681f638f10588fa3c101ee9ae2b63d3734713202ddfcfb6ec6cea0778a29d4"}, {file = "backports_datetime_fromisoformat-2.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:cd681460e9142f1249408e5aee6d178c6d89b49e06d44913c8fdfb6defda8d1c"}, @@ -258,6 +282,8 @@ version = "4.13.4" description = "Screen-scraping library" optional = false python-versions = ">=3.7.0" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b"}, {file = "beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195"}, @@ -280,6 +306,8 @@ version = "6.2.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, @@ -298,6 +326,8 @@ version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main", "devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, @@ -309,6 +339,7 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -378,6 +409,7 @@ files = [ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] +markers = {devenv = "python_version <= \"3.11\" or python_version >= \"3.12\"", docs = "(python_version <= \"3.11\" or python_version >= \"3.12\") and implementation_name == \"pypy\""} [package.dependencies] pycparser = "*" @@ -388,6 +420,8 @@ version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, @@ -399,6 +433,8 @@ version = "1.6.4.post1" description = "Time-handling functionality from netcdf4-python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cftime-1.6.4.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0baa9bc4850929da9f92c25329aa1f651e2d6f23e237504f337ee9e12a769f5d"}, {file = "cftime-1.6.4.post1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bb6b087f4b2513c37670bccd457e2a666ca489c5f2aad6e2c0e94604dc1b5b9"}, @@ -450,6 +486,8 @@ version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, @@ -551,6 +589,8 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -565,21 +605,44 @@ version = "3.1.1" description = "Pickler class to extend the standard pickle.Pickler functionality" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cloudpickle-3.1.1-py3-none-any.whl", hash = "sha256:c8c5a44295039331ee9dad40ba100a9c7297b6f988e50e87ccdf3765a668350e"}, {file = "cloudpickle-3.1.1.tar.gz", hash = "sha256:b216fa8ae4019d5482a8ac3c95d8f6346115d8835911fd4aefd1a445e4242c64"}, ] +[[package]] +name = "codespell" +version = "2.4.1" +description = "Fix common misspellings in text files" +optional = false +python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" +files = [ + {file = "codespell-2.4.1-py3-none-any.whl", hash = "sha256:3dadafa67df7e4a3dbf51e0d7315061b80d265f9552ebd699b3dd6834b47e425"}, + {file = "codespell-2.4.1.tar.gz", hash = "sha256:299fcdcb09d23e81e35a671bbe746d5ad7e8385972e65dbb833a2eaac33c01e5"}, +] + +[package.extras] +dev = ["Pygments", "build", "chardet", "pre-commit", "pytest", "pytest-cov", "pytest-dependency", "ruff", "tomli", "twine"] +hard-encoding-detection = ["chardet"] +toml = ["tomli"] +types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency"] + [[package]] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "devenv", "docs", "test"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "(python_version <= \"3.11\" or python_version >= \"3.12\") and platform_system == \"Windows\"", devenv = "(python_version <= \"3.11\" or python_version >= \"3.12\") and sys_platform == \"win32\"", docs = "(platform_system == \"Windows\" or sys_platform == \"win32\") and (python_version <= \"3.11\" or python_version >= \"3.12\")", test = "(python_version <= \"3.11\" or python_version >= \"3.12\") and sys_platform == \"win32\""} [[package]] name = "comm" @@ -587,6 +650,8 @@ version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, @@ -604,6 +669,8 @@ version = "1.3.2" description = "Python library for calculating contours of 2D quadrilateral grids" optional = false python-versions = ">=3.10" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "contourpy-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba38e3f9f330af820c4b27ceb4b9c7feee5fe0493ea53a8720f4792667465934"}, {file = "contourpy-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc41ba0714aa2968d1f8674ec97504a8f7e334f48eeacebcaa6256213acb0989"}, @@ -680,6 +747,8 @@ version = "7.8.0" description = "Code coverage measurement for Python" optional = false python-versions = ">=3.9" +groups = ["test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "coverage-7.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2931f66991175369859b5fd58529cd4b73582461877ecfd859b6549869287ffe"}, {file = "coverage-7.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52a523153c568d2c0ef8826f6cc23031dc86cffb8c6aeab92c4ff776e7951b28"}, @@ -758,6 +827,8 @@ version = "0.12.1" description = "Composable style cycles" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -773,6 +844,8 @@ version = "1.9.2" description = "Simple creation of data classes from dictionaries." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dacite-1.9.2-py3-none-any.whl", hash = "sha256:053f7c3f5128ca2e9aceb66892b1a3c8936d02c686e707bee96e19deef4bc4a0"}, {file = "dacite-1.9.2.tar.gz", hash = "sha256:6ccc3b299727c7aa17582f0021f6ae14d5de47c7227932c47fec4cdfefd26f09"}, @@ -787,6 +860,8 @@ version = "2025.4.1" description = "Parallel PyData with Task Scheduling" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dask-2025.4.1-py3-none-any.whl", hash = "sha256:aacbb0a9667856fe58385015efd64aca22f0c0b2c5e1b5e633531060303bb4be"}, {file = "dask-2025.4.1.tar.gz", hash = "sha256:3b4b5d6e29d858c48339a5b9a99c39f11cb44111d3836d77ff32da51e0f51243"}, @@ -816,6 +891,8 @@ version = "1.8.14" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "debugpy-1.8.14-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:93fee753097e85623cab1c0e6a68c76308cd9f13ffdf44127e6fab4fbf024339"}, {file = "debugpy-1.8.14-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d937d93ae4fa51cdc94d3e865f535f185d5f9748efb41d0d49e33bf3365bd79"}, @@ -851,6 +928,8 @@ version = "5.2.1" description = "Decorators for Humans" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, @@ -862,6 +941,8 @@ version = "0.7.1" description = "XML bomb protection for Python stdlib modules" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -873,6 +954,8 @@ version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, @@ -884,6 +967,8 @@ version = "0.21.2" description = "Docutils -- Python Documentation Utilities" optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, @@ -895,6 +980,8 @@ version = "2.2.0" description = "Filesystem-like pathing and searching for dictionaries" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dpath-2.2.0-py3-none-any.whl", hash = "sha256:b330a375ded0a0d2ed404440f6c6a715deae5313af40bbb01c8a41d891900576"}, {file = "dpath-2.2.0.tar.gz", hash = "sha256:34f7e630dc55ea3f219e555726f5da4b4b25f2200319c8e6902c394258dd6a3e"}, @@ -906,6 +993,8 @@ version = "2.0.0" description = "An implementation of lxml.xmlfile for the standard library" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, @@ -917,6 +1006,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["devenv", "docs", "test"] +markers = "python_version < \"3.11\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -931,6 +1022,8 @@ version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, @@ -945,6 +1038,8 @@ version = "2.21.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, @@ -959,6 +1054,8 @@ version = "3.18.0" description = "A platform independent file lock." optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, @@ -975,6 +1072,8 @@ version = "0.3" description = "Saves and loads to the cache a transformed versions of a source object." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flexcache-0.3-py3-none-any.whl", hash = "sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32"}, {file = "flexcache-0.3.tar.gz", hash = "sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656"}, @@ -992,6 +1091,8 @@ version = "0.4" description = "Parsing made fun ... using typing." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flexparser-0.4-py3-none-any.whl", hash = "sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846"}, {file = "flexparser-0.4.tar.gz", hash = "sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2"}, @@ -1009,6 +1110,8 @@ version = "4.57.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fonttools-4.57.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:babe8d1eb059a53e560e7bf29f8e8f4accc8b6cfb9b5fd10e485bde77e71ef41"}, {file = "fonttools-4.57.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:81aa97669cd726349eb7bd43ca540cf418b279ee3caba5e2e295fb4e8f841c02"}, @@ -1082,6 +1185,8 @@ version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, @@ -1093,6 +1198,8 @@ version = "2025.3.2" description = "File-system specification" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fsspec-2025.3.2-py3-none-any.whl", hash = "sha256:2daf8dc3d1dfa65b6aa37748d112773a7a08416f6c70d96b264c96476ecaf711"}, {file = "fsspec-2025.3.2.tar.gz", hash = "sha256:e52c77ef398680bbd6a98c0e628fbc469491282981209907bbc8aea76a04fdc6"}, @@ -1132,6 +1239,8 @@ version = "3.2.0" description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "(platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\") and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "greenlet-3.2.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:b7a7b7f2bad3ca72eb2fa14643f1c4ca11d115614047299d89bc24a3b11ddd09"}, {file = "greenlet-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60e77242e38e99ecaede853755bbd8165e0b20a2f1f3abcaa6f0dceb826a7411"}, @@ -1200,6 +1309,8 @@ version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -1211,6 +1322,8 @@ version = "1.0.8" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpcore-1.0.8-py3-none-any.whl", hash = "sha256:5254cf149bcb5f75e9d1b2b9f729ea4a4b883d1ad7379fc632b727cec23674be"}, {file = "httpcore-1.0.8.tar.gz", hash = "sha256:86e94505ed24ea06514883fd44d2bc02d90e77e7979c8eb71b90f41d364a1bad"}, @@ -1232,6 +1345,8 @@ version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -1256,6 +1371,8 @@ version = "6.131.9" description = "A library for property-based testing" optional = false python-versions = ">=3.9" +groups = ["test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "hypothesis-6.131.9-py3-none-any.whl", hash = "sha256:7c2d9d6382e98e5337b27bd34e5b223bac23956787a827e1d087e00d893561d6"}, {file = "hypothesis-6.131.9.tar.gz", hash = "sha256:ee9b0e1403e1121c91921dbdc79d7f509fdb96d457a0389222d2a68d6c8a8f8e"}, @@ -1267,7 +1384,7 @@ exceptiongroup = {version = ">=1.0.0", markers = "python_version < \"3.11\""} sortedcontainers = ">=2.1.0,<3.0.0" [package.extras] -all = ["black (>=19.10b0)", "click (>=7.0)", "crosshair-tool (>=0.0.86)", "django (>=4.2)", "dpcontracts (>=0.4)", "hypothesis-crosshair (>=0.0.22)", "lark (>=0.10.1)", "libcst (>=0.3.16)", "numpy (>=1.19.3)", "pandas (>=1.1)", "pytest (>=4.6)", "python-dateutil (>=1.4)", "pytz (>=2014.1)", "redis (>=3.0.0)", "rich (>=9.0.0)", "tzdata (>=2025.2) ; sys_platform == \"win32\" or sys_platform == \"emscripten\"", "watchdog (>=4.0.0)"] +all = ["black (>=19.10b0)", "click (>=7.0)", "crosshair-tool (>=0.0.86)", "django (>=4.2)", "dpcontracts (>=0.4)", "hypothesis-crosshair (>=0.0.22)", "lark (>=0.10.1)", "libcst (>=0.3.16)", "numpy (>=1.19.3)", "pandas (>=1.1)", "pytest (>=4.6)", "python-dateutil (>=1.4)", "pytz (>=2014.1)", "redis (>=3.0.0)", "rich (>=9.0.0)", "tzdata (>=2025.2)", "watchdog (>=4.0.0)"] cli = ["black (>=19.10b0)", "click (>=7.0)", "rich (>=9.0.0)"] codemods = ["libcst (>=0.3.16)"] crosshair = ["crosshair-tool (>=0.0.86)", "hypothesis-crosshair (>=0.0.22)"] @@ -1290,6 +1407,8 @@ version = "2.6.9" description = "File identification library for Python" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "identify-2.6.9-py2.py3-none-any.whl", hash = "sha256:c98b4322da415a8e5a70ff6e51fbc2d2932c015532d77e9f8537b4ba7813b150"}, {file = "identify-2.6.9.tar.gz", hash = "sha256:d40dfe3142a1421d8518e3d3985ef5ac42890683e32306ad614a29490abeb6bf"}, @@ -1304,6 +1423,8 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -1318,6 +1439,8 @@ version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, @@ -1329,10 +1452,12 @@ version = "8.6.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.9" +groups = ["main", "docs"] files = [ {file = "importlib_metadata-8.6.1-py3-none-any.whl", hash = "sha256:02a89390c1e15fdfdc0d7c6b25cb3e62650d0494005c97d6f148bf5b9787525e"}, {file = "importlib_metadata-8.6.1.tar.gz", hash = "sha256:310b41d755445d74569f993ccfc22838295d9fe005425094fad953d7f15c8580"}, ] +markers = {main = "python_version <= \"3.11\"", docs = "python_version <= \"3.11\" or python_version >= \"3.12\""} [package.dependencies] zipp = ">=3.20" @@ -1352,6 +1477,8 @@ version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.8" +groups = ["test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, @@ -1363,6 +1490,8 @@ version = "6.29.5" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, @@ -1396,6 +1525,8 @@ version = "8.36.0" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.10" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ipython-8.36.0-py3-none-any.whl", hash = "sha256:12b913914d010dcffa2711505ec8be4bf0180742d97f1e5175e51f22086428c1"}, {file = "ipython-8.36.0.tar.gz", hash = "sha256:24658e9fe5c5c819455043235ba59cfffded4a35936eefceceab6b192f7092ff"}, @@ -1434,6 +1565,8 @@ version = "20.11.0" description = "Operations with ISO 8601 durations" optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, @@ -1448,6 +1581,8 @@ version = "6.0.1" description = "A Python utility / library to sort Python imports." optional = false python-versions = ">=3.9.0" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "isort-6.0.1-py3-none-any.whl", hash = "sha256:2dc5d7f65c9678d94c88dfc29161a320eec67328bc97aad576874cb4be1e9615"}, {file = "isort-6.0.1.tar.gz", hash = "sha256:1cb5df28dfbc742e490c5e41bad6da41b805b0a8be7bc93cd0fb2a8a890ac450"}, @@ -1463,6 +1598,8 @@ version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, @@ -1482,6 +1619,8 @@ version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, @@ -1499,6 +1638,8 @@ version = "0.12.0" description = "A Python implementation of the JSON5 data format." optional = false python-versions = ">=3.8.0" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "json5-0.12.0-py3-none-any.whl", hash = "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db"}, {file = "json5-0.12.0.tar.gz", hash = "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a"}, @@ -1513,6 +1654,8 @@ version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, @@ -1524,6 +1667,8 @@ version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["main", "devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -1553,6 +1698,8 @@ version = "2024.10.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.9" +groups = ["main", "devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, @@ -1567,6 +1714,8 @@ version = "1.0.1" description = "A defined interface for working with a cache of jupyter notebooks." optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter_cache-1.0.1-py3-none-any.whl", hash = "sha256:9c3cafd825ba7da8b5830485343091143dff903e4d8c69db9349b728b140abf6"}, {file = "jupyter_cache-1.0.1.tar.gz", hash = "sha256:16e808eb19e3fb67a223db906e131ea6e01f03aa27f49a7214ce6a5fec186fb9"}, @@ -1594,6 +1743,8 @@ version = "8.6.3" description = "Jupyter protocol implementation and client libraries" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, @@ -1616,6 +1767,8 @@ version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, @@ -1636,6 +1789,8 @@ version = "0.12.0" description = "Jupyter Event System library" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, @@ -1662,6 +1817,8 @@ version = "2.2.5" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, @@ -1676,6 +1833,8 @@ version = "2.15.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter_server-2.15.0-py3-none-any.whl", hash = "sha256:872d989becf83517012ee669f09604aa4a28097c0bd90b2f424310156c2cdae3"}, {file = "jupyter_server-2.15.0.tar.gz", hash = "sha256:9d446b8697b4f7337a1b7cdcac40778babdd93ba614b6d68ab1c0c918f1c4084"}, @@ -1712,6 +1871,8 @@ version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, @@ -1731,6 +1892,8 @@ version = "4.4.1" description = "JupyterLab computational environment" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyterlab-4.4.1-py3-none-any.whl", hash = "sha256:989bca3f9cf2d04b2022e7e657e2df6d4aca808b364810d31c4865edd968a5f7"}, {file = "jupyterlab-4.4.1.tar.gz", hash = "sha256:c75c4f33056fbd84f0b31eb44622a00c7a5f981b85adfeb198a83721f0465808"}, @@ -1765,6 +1928,8 @@ version = "2.4.2" description = "Use MyST in JupyterLab" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyterlab_myst-2.4.2-py3-none-any.whl", hash = "sha256:2aa406d4754dcd2ec4fe749b6a2e15f0bc8a6c5c8f6b549419583715d8146230"}, {file = "jupyterlab_myst-2.4.2.tar.gz", hash = "sha256:1b06de66d20dc3a865b07d37f54bff8b4ed01501999cc0683f336f0bcb8c6902"}, @@ -1782,6 +1947,8 @@ version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, @@ -1793,6 +1960,8 @@ version = "2.27.3" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, @@ -1818,6 +1987,8 @@ version = "1.17.1" description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jupytext-1.17.1-py3-none-any.whl", hash = "sha256:99145b1e1fa96520c21ba157de7d354ffa4904724dcebdcd70b8413688a312de"}, {file = "jupytext-1.17.1.tar.gz", hash = "sha256:c02fda8af76ffd6e064a04cf2d3cc8aae242b2f0e38c42b4cd80baf89c3325d3"}, @@ -1847,6 +2018,8 @@ version = "1.4.8" description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.10" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"}, @@ -1936,6 +2109,8 @@ version = "3.0.0" description = "A lexer and codec to work with LaTeX code in Python." optional = false python-versions = ">=3.7" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "latexcodec-3.0.0-py3-none-any.whl", hash = "sha256:6f3477ad5e61a0a99bd31a6a370c34e88733a6bad9c921a3ffcfacada12f41a7"}, {file = "latexcodec-3.0.0.tar.gz", hash = "sha256:917dc5fe242762cc19d963e6548b42d63a118028cdd3361d62397e3b638b6bc5"}, @@ -1947,6 +2122,8 @@ version = "1.0.0" description = "File-based locks for Python on Linux and Windows" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "locket-1.0.0-py2.py3-none-any.whl", hash = "sha256:b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3"}, {file = "locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632"}, @@ -1958,6 +2135,8 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -1982,6 +2161,8 @@ version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -2052,6 +2233,8 @@ version = "4.0.0" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "marshmallow-4.0.0-py3-none-any.whl", hash = "sha256:e7b0528337e9990fd64950f8a6b3a1baabed09ad17a0dfb844d701151f92d203"}, {file = "marshmallow-4.0.0.tar.gz", hash = "sha256:3b6e80aac299a7935cfb97ed01d1854fb90b5079430969af92118ea1b12a8d55"}, @@ -2072,6 +2255,8 @@ version = "8.7.1" description = "Python library to convert dataclasses into marshmallow schemas." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "marshmallow_dataclass-8.7.1-py3-none-any.whl", hash = "sha256:405cbaaad9cea56b3de2f85eff32a9880e3bf849f652e7f6de7395e4b1ddc072"}, {file = "marshmallow_dataclass-8.7.1.tar.gz", hash = "sha256:4fb80e1bf7b31ce1b192aa87ffadee2cedb3f6f37bb0042f8500b07e6fad59c4"}, @@ -2095,6 +2280,8 @@ version = "3.10.1" description = "Python plotting package" optional = false python-versions = ">=3.10" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "matplotlib-3.10.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ff2ae14910be903f4a24afdbb6d7d3a6c44da210fc7d42790b87aeac92238a16"}, {file = "matplotlib-3.10.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0721a3fd3d5756ed593220a8b86808a36c5031fce489adb5b31ee6dbb47dd5b2"}, @@ -2152,6 +2339,8 @@ version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" 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"}, @@ -2166,6 +2355,8 @@ version = "0.7.22" description = "CommonMark compliant Markdown formatter" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mdformat-0.7.22-py3-none-any.whl", hash = "sha256:61122637c9e1d9be1329054f3fa216559f0d1f722b7919b060a8c2a4ae1850e5"}, {file = "mdformat-0.7.22.tar.gz", hash = "sha256:eef84fa8f233d3162734683c2a8a6222227a229b9206872e6139658d99acb1ea"}, @@ -2181,6 +2372,8 @@ version = "2.0.8" description = "An mdformat plugin for parsing / ignoring frontmatter." optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mdformat_frontmatter-2.0.8-py3-none-any.whl", hash = "sha256:577396695af96ad66dff1ff781284ff3764a10be3ab8659f2ef842ab42264ebb"}, {file = "mdformat_frontmatter-2.0.8.tar.gz", hash = "sha256:c11190ae3f9c91ada78fbd820f5b221631b520484e0b644715aa0f6ed7f097ed"}, @@ -2201,6 +2394,8 @@ version = "1.0.0" description = "An mdformat plugin for rendering tables." optional = false python-versions = ">=3.7.0" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mdformat_tables-1.0.0-py3-none-any.whl", hash = "sha256:94cd86126141b2adc3b04c08d1441eb1272b36c39146bab078249a41c7240a9a"}, {file = "mdformat_tables-1.0.0.tar.gz", hash = "sha256:a57db1ac17c4a125da794ef45539904bb8a9592e80557d525e1f169c96daa2c8"}, @@ -2219,6 +2414,8 @@ version = "0.4.2" description = "Collection of plugins for markdown-it-py" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"}, {file = "mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5"}, @@ -2238,6 +2435,8 @@ version = "0.1.2" description = "Markdown URL utilities" optional = false python-versions = ">=3.7" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -2249,6 +2448,8 @@ version = "3.1.3" description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9"}, {file = "mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0"}, @@ -2263,6 +2464,8 @@ version = "1.15.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mypy-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:979e4e1a006511dacf628e36fadfecbcc0160a8af6ca7dad2f5025529e082c13"}, {file = "mypy-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c4bb0e1bd29f7d34efcccd71cf733580191e9a264a2202b0239da95984c5b559"}, @@ -2316,6 +2519,8 @@ version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" +groups = ["main", "devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -2327,6 +2532,8 @@ version = "1.2.0" description = "A Jupyter Notebook Sphinx reader built on top of the MyST markdown parser." optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "myst_nb-1.2.0-py3-none-any.whl", hash = "sha256:0e09909877848c0cf45e1aecee97481512efa29a0c4caa37870a03bba11c56c1"}, {file = "myst_nb-1.2.0.tar.gz", hash = "sha256:af459ec753b341952182b45b0a80b4776cebf80c9ee6aaca2a3f4027b440c9de"}, @@ -2355,6 +2562,8 @@ version = "4.0.1" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," optional = false python-versions = ">=3.10" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d"}, {file = "myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4"}, @@ -2381,6 +2590,8 @@ version = "0.10.2" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false python-versions = ">=3.9.0" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, @@ -2403,6 +2614,8 @@ version = "7.16.6" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, @@ -2439,6 +2652,8 @@ version = "5.10.4" description = "The Jupyter Notebook format" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, @@ -2460,6 +2675,8 @@ version = "1.6.0" description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -2471,6 +2688,8 @@ version = "1.7.2" description = "Provides an object-oriented python interface to the netCDF version 4 library" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "netCDF4-1.7.2-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:5e9b485e3bd9294d25ff7dc9addefce42b3d23c1ee7e3627605277d159819392"}, {file = "netCDF4-1.7.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:118b476fd00d7e3ab9aa7771186d547da645ae3b49c0c7bdab866793ebf22f07"}, @@ -2518,6 +2737,8 @@ version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -2529,6 +2750,8 @@ version = "0.2.4" description = "A shim layer for notebook traits and config" optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, @@ -2546,6 +2769,8 @@ version = "2.2.5" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" +groups = ["main", "devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "numpy-2.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f4a922da1729f4c40932b2af4fe84909c7a6e167e6e99f71838ce3a29f3fe26"}, {file = "numpy-2.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6f91524d31b34f4a5fee24f5bc16dcd1491b668798b6d85585d836c1e633a6a"}, @@ -2610,6 +2835,8 @@ version = "3.1.5" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, @@ -2624,6 +2851,8 @@ version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." optional = false python-versions = ">=3.6" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -2635,6 +2864,8 @@ version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "devenv", "docs", "test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -2646,6 +2877,8 @@ version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -2732,6 +2965,8 @@ version = "1.5.1" description = "Utilities for writing pandoc filters in python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, @@ -2743,6 +2978,8 @@ version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, @@ -2758,6 +2995,8 @@ version = "1.4.2" description = "Appendable key-value storage" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "partd-1.4.2-py3-none-any.whl", hash = "sha256:978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f"}, {file = "partd-1.4.2.tar.gz", hash = "sha256:d022c33afbdc8405c226621b015e8067888173d85f7f5ecebb3cafed9a20f02c"}, @@ -2776,6 +3015,8 @@ version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" +groups = ["devenv", "docs"] +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and (sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -2790,6 +3031,8 @@ version = "11.2.1" description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pillow-11.2.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:d57a75d53922fc20c165016a20d9c44f73305e67c351bbc60d1adaf662e74047"}, {file = "pillow-11.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:127bf6ac4a5b58b3d32fc8289656f77f80567d65660bc46f72c0d77e6600cc95"}, @@ -2889,6 +3132,8 @@ version = "0.24.4" description = "Physical quantities module" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Pint-0.24.4-py3-none-any.whl", hash = "sha256:aa54926c8772159fcf65f82cc0d34de6768c151b32ad1deb0331291c38fe7659"}, {file = "pint-0.24.4.tar.gz", hash = "sha256:35275439b574837a6cd3020a5a4a73645eb125ce4152a73a2f126bf164b91b80"}, @@ -2918,6 +3163,8 @@ version = "4.3.7" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.9" +groups = ["main", "devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, @@ -2934,6 +3181,8 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -2949,6 +3198,8 @@ version = "4.2.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd"}, {file = "pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146"}, @@ -2967,6 +3218,8 @@ version = "0.21.1" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "prometheus_client-0.21.1-py3-none-any.whl", hash = "sha256:594b45c410d6f4f8888940fe80b5cc2521b305a1fafe1c58609ef715a001f301"}, {file = "prometheus_client-0.21.1.tar.gz", hash = "sha256:252505a722ac04b0456be05c05f75f45d760c2911ffc45f2a06bcaed9f3ae3fb"}, @@ -2981,6 +3234,8 @@ version = "3.0.51" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"}, {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"}, @@ -2995,6 +3250,8 @@ version = "7.0.0" description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7." optional = false python-versions = ">=3.6" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"}, {file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"}, @@ -3018,10 +3275,12 @@ version = "0.7.0" description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" +groups = ["devenv", "docs"] files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] +markers = {devenv = "(sys_platform != \"win32\" and sys_platform != \"emscripten\" or os_name != \"nt\") and (python_version <= \"3.11\" or python_version >= \"3.12\")", docs = "(python_version <= \"3.11\" or python_version >= \"3.12\") and (sys_platform != \"win32\" and sys_platform != \"emscripten\")"} [[package]] name = "pure-eval" @@ -3029,6 +3288,8 @@ version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" 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"}, @@ -3043,6 +3304,8 @@ version = "0.24.0" description = "A BibTeX-compatible bibliography processor in Python" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pybtex-0.24.0-py2.py3-none-any.whl", hash = "sha256:e1e0c8c69998452fea90e9179aa2a98ab103f3eed894405b7264e517cc2fcc0f"}, {file = "pybtex-0.24.0.tar.gz", hash = "sha256:818eae35b61733e5c007c3fcd2cfb75ed1bc8b4173c1f70b56cc4c0802d34755"}, @@ -3062,6 +3325,8 @@ version = "1.0.3" description = "A docutils backend for pybtex." optional = false python-versions = ">=3.7" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pybtex-docutils-1.0.3.tar.gz", hash = "sha256:3a7ebdf92b593e00e8c1c538aa9a20bca5d92d84231124715acc964d51d93c6b"}, {file = "pybtex_docutils-1.0.3-py3-none-any.whl", hash = "sha256:8fd290d2ae48e32fcb54d86b0efb8d573198653c7e2447d5bec5847095f430b9"}, @@ -3077,10 +3342,12 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] +markers = {devenv = "python_version <= \"3.11\" or python_version >= \"3.12\"", docs = "(python_version <= \"3.11\" or python_version >= \"3.12\") and implementation_name == \"pypy\""} [[package]] name = "pydocstyle" @@ -3088,6 +3355,8 @@ version = "6.3.0" description = "Python docstring style checker" optional = false python-versions = ">=3.6" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydocstyle-6.3.0-py3-none-any.whl", hash = "sha256:118762d452a49d6b05e194ef344a55822987a462831ade91ec5c06fd2169d019"}, {file = "pydocstyle-6.3.0.tar.gz", hash = "sha256:7ce43f0c0ac87b07494eb9c0b462c0b73e6ff276807f204d6b53edc72b7e44e1"}, @@ -3105,6 +3374,8 @@ version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, @@ -3119,6 +3390,8 @@ version = "3.2.3" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"}, {file = "pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be"}, @@ -3133,6 +3406,8 @@ version = "2.0.0rc3" description = "Python tools for modelling plant productivity and demography." optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyrealm-2.0.0rc3-py3-none-any.whl", hash = "sha256:605ac157f84f16b3977355f4223cfb6f8c9724018c3e7702ad1bd51466677386"}, {file = "pyrealm-2.0.0rc3.tar.gz", hash = "sha256:1ab07b57eda52c224cf4e4bdf39d7835645db018b53b1d2ca6becd58f41d8ad9"}, @@ -3153,6 +3428,8 @@ version = "8.3.5" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" +groups = ["test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, @@ -3175,6 +3452,8 @@ version = "6.1.1" description = "Pytest plugin for measuring coverage." optional = false python-versions = ">=3.9" +groups = ["test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest_cov-6.1.1-py3-none-any.whl", hash = "sha256:bddf29ed2d0ab6f4df17b4c55b0a657287db8684af9c42ea546b21b1041b3dde"}, {file = "pytest_cov-6.1.1.tar.gz", hash = "sha256:46935f7aaefba760e716c2ebfbe1c216240b9592966e7da99ea8292d4d3e2a0a"}, @@ -3193,6 +3472,8 @@ version = "1.6.1" description = "pytest plugin for test data directories and files" optional = false python-versions = ">=3.8" +groups = ["test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest_datadir-1.6.1-py3-none-any.whl", hash = "sha256:aa427f6218d3fc7481129d59c892bd7adfb8822613a2726ffc97f51968879cdb"}, {file = "pytest_datadir-1.6.1.tar.gz", hash = "sha256:4d204cf93cfe62ddc37b19922df6c8c0f133c2899c224bd339b24920e84e7fd3"}, @@ -3211,6 +3492,8 @@ version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" +groups = ["test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -3228,6 +3511,8 @@ 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", "devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" 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"}, @@ -3242,6 +3527,8 @@ version = "3.3.0" description = "JSON Log Formatter for the Python Logging Package" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"}, {file = "python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84"}, @@ -3256,6 +3543,8 @@ version = "2025.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, @@ -3267,6 +3556,8 @@ version = "310" description = "Python for Window Extensions" optional = false python-versions = "*" +groups = ["devenv", "docs"] +markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\" and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"}, {file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"}, @@ -3292,6 +3583,8 @@ version = "2.0.15" description = "Pseudo terminal support for Windows from Python." optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "(python_version <= \"3.11\" or python_version >= \"3.12\") and os_name == \"nt\"" files = [ {file = "pywinpty-2.0.15-cp310-cp310-win_amd64.whl", hash = "sha256:8e7f5de756a615a38b96cd86fa3cd65f901ce54ce147a3179c45907fa11b4c4e"}, {file = "pywinpty-2.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:9a6bcec2df2707aaa9d08b86071970ee32c5026e10bcc3cc5f6f391d85baf7ca"}, @@ -3308,6 +3601,8 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main", "devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -3370,6 +3665,8 @@ version = "26.4.0" description = "Python bindings for 0MQ" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyzmq-26.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:0329bdf83e170ac133f44a233fc651f6ed66ef8e66693b5af7d54f45d1ef5918"}, {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:398a825d2dea96227cf6460ce0a174cf7657d6f6827807d4d1ae9d0f9ae64315"}, @@ -3475,6 +3772,8 @@ version = "0.36.2" description = "JSON Referencing + Python" optional = false python-versions = ">=3.9" +groups = ["main", "devenv", "docs", "types"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, @@ -3491,6 +3790,8 @@ version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -3512,6 +3813,8 @@ version = "0.1.4" description = "A pure python RFC3339 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, @@ -3526,6 +3829,8 @@ version = "0.1.1" description = "Pure python rfc3986 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, @@ -3537,6 +3842,8 @@ version = "0.24.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" +groups = ["main", "devenv", "docs", "types"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rpds_py-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:006f4342fe729a368c6df36578d7a348c7c716be1da0a1a0f86e3021f8e98724"}, {file = "rpds_py-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2d53747da70a4e4b17f559569d5f9506420966083a31c5fbd84e764461c4444b"}, @@ -3660,6 +3967,8 @@ version = "0.18.10" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ruamel.yaml-0.18.10-py3-none-any.whl", hash = "sha256:30f22513ab2301b3d2b577adc121c6471f28734d3d9728581245f1e76468b4f1"}, {file = "ruamel.yaml-0.18.10.tar.gz", hash = "sha256:20c86ab29ac2153f80a428e1254a8adf686d3383df04490514ca3b79a362db58"}, @@ -3678,6 +3987,8 @@ version = "0.2.12" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\" and (python_version <= \"3.11\" or python_version >= \"3.12\")" files = [ {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, @@ -3733,6 +4044,8 @@ version = "0.11.8" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ruff-0.11.8-py3-none-linux_armv6l.whl", hash = "sha256:896a37516c594805e34020c4a7546c8f8a234b679a7716a3f08197f38913e1a3"}, {file = "ruff-0.11.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ab86d22d3d721a40dd3ecbb5e86ab03b2e053bc93c700dc68d1c3346b36ce835"}, @@ -3760,6 +4073,8 @@ version = "1.15.2" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "scipy-1.15.2-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a2ec871edaa863e8213ea5df811cd600734f6400b4af272e1c011e69401218e9"}, {file = "scipy-1.15.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:6f223753c6ea76983af380787611ae1291e3ceb23917393079dcc746ba60cfb5"}, @@ -3823,6 +4138,8 @@ version = "1.8.3" description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, @@ -3839,10 +4156,12 @@ version = "78.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" +groups = ["devenv", "docs"] files = [ {file = "setuptools-78.1.0-py3-none-any.whl", hash = "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8"}, {file = "setuptools-78.1.0.tar.gz", hash = "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54"}, ] +markers = {devenv = "python_version <= \"3.11\" or python_version >= \"3.12\"", docs = "python_version >= \"3.12\""} [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] @@ -3859,6 +4178,8 @@ version = "2.1.0" description = "Manipulation and analysis of geometric objects" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "shapely-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d3e5c5e3864d4dc431dd85a8e5137ebd39c8ac287b009d3fa80a07017b29c940"}, {file = "shapely-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6eea89b16f5f3a064659126455d23fa3066bc3d6cd385c35214f06bf5871aa6"}, @@ -3916,6 +4237,8 @@ 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", "devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -3927,6 +4250,8 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -3938,6 +4263,8 @@ version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." optional = false python-versions = "*" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, @@ -3949,6 +4276,8 @@ version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" optional = false python-versions = "*" +groups = ["test"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, @@ -3960,6 +4289,8 @@ version = "2.6" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, @@ -3971,6 +4302,8 @@ version = "8.1.3" description = "Python documentation generator" optional = false python-versions = ">=3.10" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2"}, {file = "sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927"}, @@ -4006,6 +4339,8 @@ version = "0.6.1" description = "A sphinx extension for designing beautiful, view size responsive web components." optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinx_design-0.6.1-py3-none-any.whl", hash = "sha256:b11f37db1a802a183d61b159d9a202314d4d2fe29c163437001324fe2f19549c"}, {file = "sphinx_design-0.6.1.tar.gz", hash = "sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632"}, @@ -4031,6 +4366,8 @@ version = "1.0.1" description = "A sphinx extension that allows the site-map to be defined in a single YAML file." optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinx_external_toc-1.0.1-py3-none-any.whl", hash = "sha256:d9e02d50731dee9697c1887e4f8b361e7b86d38241f0e66bd5a9f4096779646f"}, {file = "sphinx_external_toc-1.0.1.tar.gz", hash = "sha256:a7d2c63cc47ec688546443b28bc4ef466121827ef3dc7bb509de354bad4ea2e0"}, @@ -4052,6 +4389,8 @@ version = "1.4.2" description = "Sphinx extension to show tooltips with content embedded when hover a reference." optional = false python-versions = "*" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinx_hoverxref-1.4.2-py2.py3-none-any.whl", hash = "sha256:4fc2e283e908d9df61ea9196589934944a7e2e6e3cb753a420b938cd6d14e220"}, {file = "sphinx_hoverxref-1.4.2.tar.gz", hash = "sha256:74fab961b1b8c0e9c2cf22fa195c0e783d635e78686d39dd06ff157c196ca0c9"}, @@ -4071,6 +4410,8 @@ version = "3.0.2" description = "Read the Docs theme for Sphinx" optional = false python-versions = ">=3.8" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinx_rtd_theme-3.0.2-py2.py3-none-any.whl", hash = "sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13"}, {file = "sphinx_rtd_theme-3.0.2.tar.gz", hash = "sha256:b7457bc25dda723b20b086a670b9953c859eab60a2a03ee8eb2bb23e176e5f85"}, @@ -4090,6 +4431,8 @@ version = "2.0.0" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, @@ -4106,6 +4449,8 @@ version = "2.6.3" description = "Sphinx extension for BibTeX style citations." optional = false python-versions = ">=3.7" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinxcontrib_bibtex-2.6.3-py3-none-any.whl", hash = "sha256:ff016b738fcc867df0f75c29e139b3b2158d26a2c802db27963cb128be3b75fb"}, {file = "sphinxcontrib_bibtex-2.6.3.tar.gz", hash = "sha256:7c790347ef1cb0edf30de55fc324d9782d085e89c52c2b8faafa082e08e23946"}, @@ -4127,6 +4472,8 @@ version = "2.0.0" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, @@ -4143,6 +4490,8 @@ version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, @@ -4159,6 +4508,8 @@ version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" optional = false python-versions = ">=2.7" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, @@ -4173,6 +4524,8 @@ version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" optional = false python-versions = ">=3.5" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, @@ -4187,6 +4540,8 @@ version = "1.0.0" description = "Mermaid diagrams in yours Sphinx powered docs" optional = false python-versions = ">=3.8" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinxcontrib_mermaid-1.0.0-py3-none-any.whl", hash = "sha256:60b72710ea02087f212028feb09711225fbc2e343a10d34822fe787510e1caa3"}, {file = "sphinxcontrib_mermaid-1.0.0.tar.gz", hash = "sha256:2e8ab67d3e1e2816663f9347d026a8dee4a858acdd4ad32dd1c808893db88146"}, @@ -4205,6 +4560,8 @@ version = "2.0.0" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, @@ -4221,6 +4578,8 @@ version = "2.0.0" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false python-versions = ">=3.9" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, @@ -4237,6 +4596,8 @@ version = "2.0.40" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" +groups = ["docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "SQLAlchemy-2.0.40-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ae9597cab738e7cc823f04a704fb754a9249f0b6695a6aeb63b74055cd417a96"}, {file = "SQLAlchemy-2.0.40-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a5c21ab099a83d669ebb251fddf8f5cee4d75ea40a5a1653d9c43d60e20867"}, @@ -4298,7 +4659,7 @@ files = [ ] [package.dependencies] -greenlet = {version = ">=1", markers = "python_version < \"3.14\" and (platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\")"} +greenlet = {version = ">=1", markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} typing-extensions = ">=4.6.0" [package.extras] @@ -4332,6 +4693,8 @@ version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" 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"}, @@ -4351,6 +4714,8 @@ version = "0.9.0" description = "Pretty-print tabular data" optional = false python-versions = ">=3.7" +groups = ["main", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, @@ -4365,6 +4730,8 @@ version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, @@ -4386,6 +4753,8 @@ version = "1.4.0" description = "A tiny CSS parser" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, @@ -4404,6 +4773,8 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["main", "devenv", "docs", "test"] +markers = "python_version < \"3.11\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -4445,6 +4816,8 @@ version = "1.2.0" description = "A lil' TOML writer" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tomli_w-1.2.0-py3-none-any.whl", hash = "sha256:188306098d013b691fcadc011abd66727d3c414c571bb01b1a174ba8c983cf90"}, {file = "tomli_w-1.2.0.tar.gz", hash = "sha256:2dd14fac5a47c27be9cd4c976af5a12d87fb1f0b4512f81d69cce3b35ae25021"}, @@ -4456,6 +4829,8 @@ version = "1.0.0" description = "List processing tools and functional utilities" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "toolz-1.0.0-py3-none-any.whl", hash = "sha256:292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236"}, {file = "toolz-1.0.0.tar.gz", hash = "sha256:2c86e3d9a04798ac556793bced838816296a2f085017664e4995cb40a1047a02"}, @@ -4467,6 +4842,8 @@ version = "6.4.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, @@ -4487,6 +4864,8 @@ version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -4508,6 +4887,8 @@ version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -4523,6 +4904,8 @@ version = "4.4.2" description = "Run-time type checker for Python" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typeguard-4.4.2-py3-none-any.whl", hash = "sha256:77a78f11f09777aeae7fa08585f33b5f4ef0e7335af40005b0c422ed398ff48c"}, {file = "typeguard-4.4.2.tar.gz", hash = "sha256:a6f1065813e32ef365bc3b3f503af8a96f9dd4e0033a02c28c4a4983de8c6c49"}, @@ -4541,6 +4924,8 @@ version = "0.6.6" description = "Typing stubs for dataclasses" optional = false python-versions = "*" +groups = ["types"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "types-dataclasses-0.6.6.tar.gz", hash = "sha256:4b5a2fcf8e568d5a1974cd69010e320e1af8251177ec968de7b9bb49aa49f7b9"}, {file = "types_dataclasses-0.6.6-py3-none-any.whl", hash = "sha256:a0a1ab5324ba30363a15c9daa0f053ae4fff914812a1ebd8ad84a08e5349574d"}, @@ -4552,6 +4937,8 @@ version = "4.23.0.20241208" description = "Typing stubs for jsonschema" optional = false python-versions = ">=3.8" +groups = ["types"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "types_jsonschema-4.23.0.20241208-py3-none-any.whl", hash = "sha256:87934bd9231c99d8eff94cacfc06ba668f7973577a9bd9e1f9de957c5737313e"}, {file = "types_jsonschema-4.23.0.20241208.tar.gz", hash = "sha256:e8b15ad01f290ecf6aea53f93fbdf7d4730e4600313e89e8a7f95622f7e87b7c"}, @@ -4566,6 +4953,8 @@ version = "2.9.0.20241206" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "types_python_dateutil-2.9.0.20241206-py3-none-any.whl", hash = "sha256:e248a4bc70a486d3e3ec84d0dc30eec3a5f979d6e7ee4123ae043eedbb987f53"}, {file = "types_python_dateutil-2.9.0.20241206.tar.gz", hash = "sha256:18f493414c26ffba692a72369fea7a154c502646301ebfe3d56a04b3767284cb"}, @@ -4577,6 +4966,8 @@ version = "2.32.0.20250328" description = "Typing stubs for requests" optional = false python-versions = ">=3.9" +groups = ["types"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "types_requests-2.32.0.20250328-py3-none-any.whl", hash = "sha256:72ff80f84b15eb3aa7a8e2625fffb6a93f2ad5a0c20215fc1dcfa61117bcb2a2"}, {file = "types_requests-2.32.0.20250328.tar.gz", hash = "sha256:c9e67228ea103bd811c96984fac36ed2ae8da87a36a633964a21f199d60baf32"}, @@ -4591,6 +4982,8 @@ version = "4.67.0.20250417" description = "Typing stubs for tqdm" optional = false python-versions = ">=3.9" +groups = ["types"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "types_tqdm-4.67.0.20250417-py3-none-any.whl", hash = "sha256:d43fc9a295be1f94083c744a09099c033c4dea293ff9a07bab9f34bfbffaaf80"}, {file = "types_tqdm-4.67.0.20250417.tar.gz", hash = "sha256:bfcc4099d8d48df54e53f3ea64708cbcc1d1c4039ca7619594189da8c03c7be2"}, @@ -4605,10 +4998,12 @@ version = "4.13.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "devenv", "docs", "types"] files = [ {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, ] +markers = {main = "python_version <= \"3.11\" or python_version >= \"3.12\"", devenv = "python_version <= \"3.11\" or python_version >= \"3.12\"", docs = "python_version <= \"3.11\" or python_version >= \"3.12\"", types = "python_version >= \"3.12\" and python_version < \"3.13\" or python_version <= \"3.11\""} [[package]] name = "typing-inspect" @@ -4616,6 +5011,8 @@ version = "0.9.0" description = "Runtime inspection utilities for typing module." optional = false python-versions = "*" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, @@ -4631,6 +5028,8 @@ version = "2025.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, @@ -4642,6 +5041,8 @@ version = "1.3.0" description = "RFC 6570 URI Template Processor" optional = false python-versions = ">=3.7" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, @@ -4656,6 +5057,8 @@ version = "2.4.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" +groups = ["devenv", "docs", "types"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, @@ -4673,6 +5076,8 @@ version = "20.30.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "virtualenv-20.30.0-py3-none-any.whl", hash = "sha256:e34302959180fca3af42d1800df014b35019490b119eba981af27f2fa486e5d6"}, {file = "virtualenv-20.30.0.tar.gz", hash = "sha256:800863162bcaa5450a6e4d721049730e7f2dae07720e0902b0e4040bd6f9ada8"}, @@ -4693,6 +5098,8 @@ version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" +groups = ["devenv", "docs"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -4704,6 +5111,8 @@ version = "24.11.1" description = "A library for working with the color formats defined by HTML and CSS." optional = false python-versions = ">=3.9" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, @@ -4715,6 +5124,8 @@ version = "0.5.1" description = "Character encoding aliases for legacy web content" optional = false python-versions = "*" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -4726,6 +5137,8 @@ version = "1.8.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" +groups = ["devenv"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, @@ -4742,6 +5155,8 @@ version = "2025.4.0" description = "N-D labeled arrays and datasets in Python" optional = false python-versions = ">=3.10" +groups = ["main"] +markers = "python_version <= \"3.11\" or python_version >= \"3.12\"" files = [ {file = "xarray-2025.4.0-py3-none-any.whl", hash = "sha256:b27defd082c5cb85d32c695708de6bb05c2838fb7caaf3f952982e602a35b9b8"}, {file = "xarray-2025.4.0.tar.gz", hash = "sha256:2a89cd6a1dfd589aa90ac45f4e483246f31fc641836db45dd2790bb78bd333dc"}, @@ -4767,10 +5182,12 @@ version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" +groups = ["main", "docs"] files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] +markers = {main = "python_version <= \"3.11\"", docs = "python_version <= \"3.11\" or python_version >= \"3.12\""} [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] @@ -4781,6 +5198,6 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", type = ["pytest-mypy"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = ">=3.10,<3.14" -content-hash = "94c7144954fa186542a2212217ec8d011d9eba0ea254db7fe90a8523aeab17c1" +content-hash = "ca38fce387a90d3ce8a29f4389b8925f7e8520a28978544c2cc6b9288e41f510" diff --git a/pyproject.toml b/pyproject.toml index b7601cc03..efdda48dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,6 +59,7 @@ pytest-datadir = "^1.4.1" pytest-mock = "^3.8.1" [tool.poetry.group.devenv.dependencies] +codespell = "^2.4.1" ipykernel = "^6.15.0" ipython = "^8.4.0" isort = ">=5.12,<7.0" @@ -140,3 +141,7 @@ plugins = "numpy.typing.mypy_plugin" notebook_metadata_filter = "settings,mystnb,language_info,execution" # Also stop it from stripping cell metadata. cell_metadata_filter = "all,-trusted" + +[tool.codespell] +ignore-words = ".codespellignore" +skip = "*.js,*.html,*.css,*.ipynb,*.bib,poetry.lock,./docs/build" From e708556d29ee6c0048b9f2b1bc91ea930a9dbd8a Mon Sep 17 00:00:00 2001 From: David Orme Date: Thu, 8 May 2025 16:59:50 +0100 Subject: [PATCH 2/3] Fixing existing codespell catches --- .codespellignore.txt | 1 + .pre-commit-config.yaml | 5 ++++- docs/source/_static/images/simulation_flow.svg | 2 +- .../source/development/contributing/code_qa_and_typing.md | 6 +++--- docs/source/development/contributing/overview.md | 6 +++--- docs/source/development/contributing/release_process.md | 2 +- docs/source/development/design/core.md | 2 +- docs/source/development/design/defining_new_models.md | 4 ++-- docs/source/development/documentation/docstring_style.py | 2 +- .../source/development/documentation/jupyter_notebooks.md | 4 ++-- docs/source/glossary.md | 4 ++-- docs/source/using_the_ve/configuration/config.md | 2 +- docs/source/using_the_ve/configuration/grid.md | 2 +- docs/source/using_the_ve/getting_started.md | 4 ++-- .../implementation/core_components_overview.md | 2 +- .../implementation/hydrology_implementation.md | 4 ++-- .../virtual_ecosystem/theory/microclimate_theory.md | 8 ++++---- pyproject.toml | 4 ++-- tests/conftest.py | 2 +- tests/core/test_core_components.py | 2 +- tests/models/hydrology/test_hydrology_tools.py | 2 +- virtual_ecosystem/core/axes.py | 2 +- virtual_ecosystem/core/base_model.py | 6 +++--- virtual_ecosystem/core/core_components.py | 4 ++-- virtual_ecosystem/core/logger.py | 4 ++-- virtual_ecosystem/core/registry.py | 2 +- virtual_ecosystem/core/schema.py | 2 +- virtual_ecosystem/core/variables.py | 6 +++--- virtual_ecosystem/data_variables.toml | 2 +- .../generation_scripts/climate_example_data.py | 2 +- .../generation_scripts/elevation_example_data.py | 4 ++-- virtual_ecosystem/main.py | 4 ++-- virtual_ecosystem/models/abiotic/abiotic_model.py | 2 +- virtual_ecosystem/models/abiotic/constants.py | 2 +- virtual_ecosystem/models/abiotic/energy_balance.py | 6 +++--- virtual_ecosystem/models/abiotic/microclimate.py | 2 +- .../models/abiotic_simple/abiotic_simple_model.py | 3 +-- virtual_ecosystem/models/animal/animal_cohorts.py | 6 +++--- virtual_ecosystem/models/animal/animal_model.py | 2 +- virtual_ecosystem/models/animal/constants.py | 2 +- virtual_ecosystem/models/animal/scaling_functions.py | 2 +- virtual_ecosystem/models/hydrology/below_ground.py | 4 ++-- virtual_ecosystem/models/hydrology/constants.py | 2 +- virtual_ecosystem/models/hydrology/hydrology_model.py | 6 +++--- virtual_ecosystem/models/litter/env_factors.py | 4 ++-- virtual_ecosystem/models/litter/litter_model.py | 2 +- virtual_ecosystem/models/plants/plants_model.py | 8 ++++---- virtual_ecosystem/models/soil/env_factors.py | 6 +++--- virtual_ecosystem/models/soil/soil_model.py | 2 +- 49 files changed, 86 insertions(+), 83 deletions(-) create mode 100644 .codespellignore.txt diff --git a/.codespellignore.txt b/.codespellignore.txt new file mode 100644 index 000000000..d1925f6c8 --- /dev/null +++ b/.codespellignore.txt @@ -0,0 +1 @@ +matric diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 34622cf33..f68ea4e2f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,4 +31,7 @@ repos: - repo: https://github.com/codespell-project/codespell rev: v2.4.1 hooks: - - id: codespell \ No newline at end of file + - id: codespell + args: ["--toml", "pyproject.toml"] + additional_dependencies: + - tomli \ No newline at end of file diff --git a/docs/source/_static/images/simulation_flow.svg b/docs/source/_static/images/simulation_flow.svg index 6a7f46660..237eb211b 100644 --- a/docs/source/_static/images/simulation_flow.svg +++ b/docs/source/_static/images/simulation_flow.svg @@ -1,3 +1,3 @@ -
Start Simulation
Load and validate configuration
Create Core components
Configuration
files
Layer
Structure
Data
Store
Load and validate 
initial data
Data files
Configure Science Models
Model
Config
Initialise Science Models
Core
Constants
Update Science models
Initial Model
State
Incremental
Model States
Final Model
State
End Simulation
Model
Timing
Spatial
Grid
Key
Data File
Model
step
Core
Object
Program
Flow 
Data
Flow
\ No newline at end of file +
Start Simulation
Load and validate configuration
Create Core components
Configuration
files
Layer
Structure
Data
Store
Load and validate 
initial data
Data files
Configure Science Models
Model
Config
Initialise Science Models
Core
Constants
Update Science models
Initial Model
State
Incremental
Model States
Final Model
State
End Simulation
Model
Timing
Spatial
Grid
Key
Data File
Model
step
Core
Object
Program
Flow 
Data
Flow
\ No newline at end of file diff --git a/docs/source/development/contributing/code_qa_and_typing.md b/docs/source/development/contributing/code_qa_and_typing.md index 68c9dc2f2..20d95d194 100644 --- a/docs/source/development/contributing/code_qa_and_typing.md +++ b/docs/source/development/contributing/code_qa_and_typing.md @@ -49,7 +49,7 @@ short description of the roles of each hook. :::: `pre-commit-hooks` -: We use these basic hooks to check for remaning `git` merge conflict markers in code +: We use these basic hooks to check for remaining `git` merge conflict markers in code files (`check-merge-conflicts` hook) and for debugger imports and `breakpoint()` calls (`dubug-statements` hook), which should not end up in code in the repository. @@ -119,7 +119,7 @@ developed to help support clear and consistent typing. We use bit of getting used to but is a key tool in maintaining clear code and variable structures. -## Supressing checking +## Suppressing checking The `pre-commit` tools sometimes complain about things that we do not want to change. Almost all of the tools can be told to suppress checking, using comments with a set @@ -129,7 +129,7 @@ This should not be done lightly: we are using these QA tools for a reason. * Code linting issued identified by `ruff` can be ignored by either using `# noqa: E501` to ignore the issue for that line. -* Code formatting changes suggested by `ruff-format` can be supressed by using the +* Code formatting changes suggested by `ruff-format` can be suppressed by using the `# fmt: off` tag at the end of a specific line or wrapping a section in `# fmt: off` and then `# fmt: on`. * `mypy` uses the syntax `# type: ignore` comment to [suppress diff --git a/docs/source/development/contributing/overview.md b/docs/source/development/contributing/overview.md index 24cb18691..7fc42f1f2 100644 --- a/docs/source/development/contributing/overview.md +++ b/docs/source/development/contributing/overview.md @@ -529,7 +529,7 @@ in this document. There are two options to do this: using the `poetry` environment. This approach is used in the example commands below. 1. You can use `poetry shell` to start a new shell that uses this environment: you can then run commands without needing `poetry run` and they should use the correct - enviroment. This is usually more convenient. + environment. This is usually more convenient. You should now be able to run the following command to see that `virtual_ecosystem` is installed and is showing the current version. @@ -626,7 +626,7 @@ could be an Exception) is generated. Again, the `pytest` package and plugins are installed by `poetry`. See the [code testing page](./code_testing.md) for more details but you should be able to check the tests run using the following command. Be warned that the `mypy` steps can be very time consuming -on the first run, but `pytest` does some cacheing that makes them quicker when they next +on the first run, but `pytest` does some caching that makes them quicker when they next run. ```sh @@ -674,7 +674,7 @@ page](./release_process.md) for details. ## Setup script example The scripts below bundle all the commands together to show the set up process, including -using `pyenv` to mangage `python` versions, ending by running the unit tests. This sets +using `pyenv` to manage `python` versions, ending by running the unit tests. This sets up everything you need, ready to start developing on the `virtual_ecosystem`. :::{admonition} Setup script diff --git a/docs/source/development/contributing/release_process.md b/docs/source/development/contributing/release_process.md index 2234d6d85..6a98e40c4 100644 --- a/docs/source/development/contributing/release_process.md +++ b/docs/source/development/contributing/release_process.md @@ -61,7 +61,7 @@ The steps of the process are: Log in to [https://readthedocs.org](https://readthedocs.org) which is the admin site controlling the build process. From the Versions tab, activate the `release/X.Y.Z` branch and wait for it to build. Check the Builds tab to see that it has built - successfully! If it has built succesfully, do check pages to make sure that page code + successfully! If it has built successfully, do check pages to make sure that page code has executed successfully, and then go back to the Versions tab and deactivate and hide the branch. If the release branch needs any changes, do come back and check that those changes have also built successfully. diff --git a/docs/source/development/design/core.md b/docs/source/development/design/core.md index 579149348..0515496f1 100644 --- a/docs/source/development/design/core.md +++ b/docs/source/development/design/core.md @@ -59,7 +59,7 @@ The config system should provide a way to: - or possibly something like a dataclass for dotted notation: (config.plant.functional_types.max_height) - validate the config against some kind of template -- It is likely that different configurations may re-use config subsections in different +- It is likely that different configurations may reuse config subsections in different combinations, so the config system should be capable of loading configs from **multiple** files, so that a complete config can be built up or updated from multiple files, rather than having to compile a single monolithic file for each permutation. diff --git a/docs/source/development/design/defining_new_models.md b/docs/source/development/design/defining_new_models.md index c975375d0..c27aec4e7 100644 --- a/docs/source/development/design/defining_new_models.md +++ b/docs/source/development/design/defining_new_models.md @@ -29,7 +29,7 @@ an ecosystem, examples include the `abiotic`, `animal`, `plants` and `soil` mode However, the simulation is designed to be modular: * Different combinations of models can be configured for a particular simulation. -* New models can be defined in order to extend the simulation or alter the implemention: +* New models can be defined in order to extend the simulation or alter the implementation: examples of new functionality might be `freshwater` or `disturbance` models. This page sets out the steps needed to add a new model to the Virtual Ecosystem and @@ -153,7 +153,7 @@ from pint import Quantity # - a Config , used to configure a BaseModel instance. # - the load_constants helper function to configure model constants. # - the Data class, used as a central data store within the simulation -# - an custom exception to cover model initalisation failure +# - an custom exception to cover model initialisation failure # - the global LOGGER, used to report information to users. from virtual_ecosystem.core.base_model import BaseModel from virtual_ecosystem.core.config import Config diff --git a/docs/source/development/documentation/docstring_style.py b/docs/source/development/documentation/docstring_style.py index 86b172fcb..f89f0225f 100644 --- a/docs/source/development/documentation/docstring_style.py +++ b/docs/source/development/documentation/docstring_style.py @@ -39,7 +39,7 @@ class MyClass: Attributes are documented with docstrings underneath the attribute definition. Class attributes are grouped with instance attributes in the rendered documentation, so - should say explictly that they are a class attribute.""" + should say explicitly that they are a class attribute.""" def __init__(self, myarg: int, name: str) -> None: # Note there is no __init__ docstring. diff --git a/docs/source/development/documentation/jupyter_notebooks.md b/docs/source/development/documentation/jupyter_notebooks.md index 0ff638c95..aab32e045 100644 --- a/docs/source/development/documentation/jupyter_notebooks.md +++ b/docs/source/development/documentation/jupyter_notebooks.md @@ -40,7 +40,7 @@ The `poetry` virtual environment for `virtual_ecosystem` is already setup to include `jupyter` and `jupyter-lab`, which is a browser-based application for editing and running notebooks. As that virtual environment also has the `virtual_ecosystem` package installed in development mode, a `jupyter` notebook running using this -enviroment will be able to import and use `virtual_ecosystem` code from the active +environment will be able to import and use `virtual_ecosystem` code from the active branch. You can open `jupyter-lab` in a couple of ways. The simplest way is to use `poetry run @@ -99,7 +99,7 @@ basic problem is that - although JSON files are text-based and are **technically human-readable: - they contain irrelevant metadata - such as the number of times the notebook has been - run - that will generate unneccessary commits. + run - that will generate unnecessary commits. - they can contain output binary data - such as images - that may also have arbitrary changes. diff --git a/docs/source/glossary.md b/docs/source/glossary.md index 62c59c04d..31adb4aec 100644 --- a/docs/source/glossary.md +++ b/docs/source/glossary.md @@ -18,9 +18,9 @@ jupyter: POM Particulate Organic Matter. A form of organic matter that derives from the decomposition and fragmentation of litter and other necromass. Generally, these - particulates are still in a state where the tissue they orginated from can be + particulates are still in a state where the tissue they originated from can be determined. This chemical complexity makes this a form of protected carbon, however this - is generally only a signifcant store of protected carbon in heavily waterlogged soils. + is generally only a significant store of protected carbon in heavily waterlogged soils. MAOM Mineral Associated Organic Matter. This is organic matter which has formed a strong diff --git a/docs/source/using_the_ve/configuration/config.md b/docs/source/using_the_ve/configuration/config.md index 01196bfcc..4cac86c65 100644 --- a/docs/source/using_the_ve/configuration/config.md +++ b/docs/source/using_the_ve/configuration/config.md @@ -61,7 +61,7 @@ size `cell_nx`). The configuration system does not require a single input config file, instead the configuration can be separated out into a set of config files. This allows different -configuration files to be re-used in a modular way, allowing a library of configuration +configuration files to be reused in a modular way, allowing a library of configuration options to be set up. When a simulation is run, users can identify a set of specific configuration files or diff --git a/docs/source/using_the_ve/configuration/grid.md b/docs/source/using_the_ve/configuration/grid.md index a02b0964a..9da593330 100644 --- a/docs/source/using_the_ve/configuration/grid.md +++ b/docs/source/using_the_ve/configuration/grid.md @@ -48,7 +48,7 @@ square_grid ## Hexagon grids A hexagon grid is defined in a very similar way - alternate rows of hexagons are offset -to correctly tesselate the individual cells. +to correctly tessellate the individual cells. ```{code-cell} ipython3 hex_grid = Grid(grid_type="hexagon", cell_area=100, cell_nx=9, cell_ny=11) diff --git a/docs/source/using_the_ve/getting_started.md b/docs/source/using_the_ve/getting_started.md index fe42d2286..9473372fe 100644 --- a/docs/source/using_the_ve/getting_started.md +++ b/docs/source/using_the_ve/getting_started.md @@ -31,7 +31,7 @@ For most users the best way to get started with the Virtual Ecosystem package is first [install Python](https://www.python.org/downloads/). To use the Virtual Ecosystem you will need Python 3.10, 3.11, or 3.12. -Afer installing Python, open a terminal window and use the following command to install +After installing Python, open a terminal window and use the following command to install the Virtual Ecosystem using the `pip` package installer. ```sh @@ -103,7 +103,7 @@ ve_run C:\path\ve_example\config ` The [Virtual Ecosystem in use](virtual_ecosystem_in_use.md) page provides a walkthrough of this process, showing the typical outputs of the model run process, and also provides -some simple plots of model inputs and ouputs. +some simple plots of model inputs and outputs. Once you want to start digging into the structure of the model and inputs, the [example data](./example_data.md) pages provides a detailed description of the contents of the diff --git a/docs/source/virtual_ecosystem/implementation/core_components_overview.md b/docs/source/virtual_ecosystem/implementation/core_components_overview.md index cd80e2f2b..11d1c60c6 100644 --- a/docs/source/virtual_ecosystem/implementation/core_components_overview.md +++ b/docs/source/virtual_ecosystem/implementation/core_components_overview.md @@ -43,7 +43,7 @@ When a simulation starts, the Virtual Ecosystem: * Loads the user-provided configuration files and checks the file formats are valid. * Collates the configuration settings into a single unified configuration. * Loads the model schemas for the core and requested science models and uses this to - validate the congfiguration. + validate the configuration. * The validation process populates any missing options from the default values. * The configuration validation will fail if: * Any options are duplicated within the configuration. diff --git a/docs/source/virtual_ecosystem/implementation/hydrology_implementation.md b/docs/source/virtual_ecosystem/implementation/hydrology_implementation.md index 750fddf60..cf6103ac2 100644 --- a/docs/source/virtual_ecosystem/implementation/hydrology_implementation.md +++ b/docs/source/virtual_ecosystem/implementation/hydrology_implementation.md @@ -200,7 +200,7 @@ $LAI$ is the total leaf area index. ### Infiltration -Infiltration is currently handeled in a very simplistic way: the water that 'fits in the +Infiltration is currently handled in a very simplistic way: the water that 'fits in the topsoil bucket' is added to the topsoil layer. We aim to implement a more realistic process that accounts for soil type specific infiltration capacities. @@ -377,7 +377,7 @@ data["elevation"] = elevation ``` The initialisation step of the hydrology model finds all the neighbours for each grid -cell and determine which neigbour has the lowest elevation. The code below returns the +cell and determine which neighbour has the lowest elevation. The code below returns the neighbours of the grid cell with `cell_id = 56` as an example. ```{code-cell} ipython3 diff --git a/docs/source/virtual_ecosystem/theory/microclimate_theory.md b/docs/source/virtual_ecosystem/theory/microclimate_theory.md index 173d12ffb..5c2a04e5e 100644 --- a/docs/source/virtual_ecosystem/theory/microclimate_theory.md +++ b/docs/source/virtual_ecosystem/theory/microclimate_theory.md @@ -59,8 +59,8 @@ temporally {cite}`bramer_chapter_2018`. ## Factors affecting microclimate -Microclimates are mediated by macroclimate, topography, vegetation tye and structure, and -soil. Many of these factors can be affected by human cativities, for example through +Microclimates are mediated by macroclimate, topography, vegetation type and structure, +and soil. Many of these factors can be affected by human cativities, for example through deforestation and other land use changes. ### Macroclimate @@ -288,7 +288,7 @@ migration, or phenotypic plasticity to cope with microclimatic variability. ## Methods for microclimate science This section gives a broad overview over common methods and models in microclimate -research. Recent advances in data aquisition for microclimate research and microclimate +research. Recent advances in data acquisition for microclimate research and microclimate modelling are provided in a comprehensive review by {cite:t}`kemppinen_microclimate_2024`. ### Microclimate data collection @@ -340,7 +340,7 @@ complex and unpredictable nature. However, these events can have disproportionat on ecosystem dynamics and in particular mortality rates. * **Integration with other models**: Combining microclimate models with broader ecological or hydrological models involves addressing compatibility and consistency issues. -This includes for example interconnected processes happing at different time scales. +This includes for example interconnected processes happening at different time scales. * **Human impacts**: Incorporating the effects of human activities (e.g. urbanization, land use changes, conservation actions) into microclimate models adds another layer of complexity. diff --git a/pyproject.toml b/pyproject.toml index efdda48dc..da95aece1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -143,5 +143,5 @@ notebook_metadata_filter = "settings,mystnb,language_info,execution" cell_metadata_filter = "all,-trusted" [tool.codespell] -ignore-words = ".codespellignore" -skip = "*.js,*.html,*.css,*.ipynb,*.bib,poetry.lock,./docs/build" +ignore-words = ".codespellignore.txt" +skip = "*.js,*.html,*.css,*.ipynb,*.bib,*.svg,poetry.lock,./docs/build" diff --git a/tests/conftest.py b/tests/conftest.py index 32fb0ed44..b25933fb9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -557,7 +557,7 @@ def dummy_carbon_data(fixture_core_components): for var_name, var_values in data_values.items(): data[var_name] = DataArray(var_values, dims=["cell_id"]) - # The layer dependant data has to be handled separately - at present all of these + # The layer dependent data has to be handled separately - at present all of these # are defined only for the topsoil layer lyr_str = fixture_core_components.layer_structure diff --git a/tests/core/test_core_components.py b/tests/core/test_core_components.py index bdec35c55..20b8e9f08 100644 --- a/tests/core/test_core_components.py +++ b/tests/core/test_core_components.py @@ -108,7 +108,7 @@ def test_CoreComponents(config, expected_layers, expected_timing, expected_const """Simple test of core component generation. The expected components contain some simple values to check - the component specific - tests provide more rigourous testing. + tests provide more rigorous testing. """ from virtual_ecosystem.core.config import Config from virtual_ecosystem.core.core_components import CoreComponents diff --git a/tests/models/hydrology/test_hydrology_tools.py b/tests/models/hydrology/test_hydrology_tools.py index ed5652334..0433779ad 100644 --- a/tests/models/hydrology/test_hydrology_tools.py +++ b/tests/models/hydrology/test_hydrology_tools.py @@ -12,7 +12,7 @@ def test_initialise_atmosphere_for_hydrology( dummy_climate_data, fixture_core_components ): - """Test initialisation of atmospheric varibales for hydrology.""" + """Test initialisation of atmospheric variables for hydrology.""" from virtual_ecosystem.models.hydrology.hydrology_tools import ( initialise_atmosphere_for_hydrology, diff --git a/virtual_ecosystem/core/axes.py b/virtual_ecosystem/core/axes.py index 1de9abdcd..b4deb3c24 100644 --- a/virtual_ecosystem/core/axes.py +++ b/virtual_ecosystem/core/axes.py @@ -379,7 +379,7 @@ def run_validation(self, value: DataArray, grid: Grid, **kwargs: Any) -> DataArr A DataArray standardised to match the ``cell_id`` values in the ``Grid`` object. """ - # Cell ID is only a dimenson with a give length - assume the order correct and + # Cell ID is only a dimension with a give length - assume the order correct and # check the right number of cells found n_found = value["cell_id"].size if grid.n_cells != n_found: diff --git a/virtual_ecosystem/core/base_model.py b/virtual_ecosystem/core/base_model.py index 3f36a5c38..1f7619e73 100644 --- a/virtual_ecosystem/core/base_model.py +++ b/virtual_ecosystem/core/base_model.py @@ -63,7 +63,7 @@ initialization logic, which should happen in the subclass ``_setup`` method instead. The ``__init__`` method **must** call the :meth:`BaseModel.__init__() ` -method, as this populates core shared model attrributes - see the linked method +method, as this populates core shared model attributes - see the linked method description for details. .. code-block:: python @@ -198,7 +198,7 @@ class BaseModel(ABC): These are the variables that are initialised by the model and stored in the data object when running the update method for the first time. They will be available for - other models to use in their update methods but not in the setup methos. + other models to use in their update methods but not in the setup methods. """ def __init__( @@ -357,7 +357,7 @@ def _run_update_due_to_static_configuration(self) -> bool: In particular, it checks that the appropriate variables created or updated in the update method are present or not in the data object. Based on this, an - exception is raised is there is a problem or a decission is made on whether or + exception is raised is there is a problem or a decision is made on whether or not running the update method once. Raises: diff --git a/virtual_ecosystem/core/core_components.py b/virtual_ecosystem/core/core_components.py index 87137a418..2d6fe9df0 100644 --- a/virtual_ecosystem/core/core_components.py +++ b/virtual_ecosystem/core/core_components.py @@ -254,8 +254,8 @@ class LayerStructure: In addition, the :attr:`.lowest_canopy_filled` attribute provides an array giving the vertical index of the lowest filled canopy layer in each grid cell. - It contains ``np.nan`` when there is no canopy in a grid cell and is initalised - as an array of ``np.nan`` values. + It contains ``np.nan`` when there is no canopy in a grid cell and is + initialised as an array of ``np.nan`` values. **Getting layer indices**: diff --git a/virtual_ecosystem/core/logger.py b/virtual_ecosystem/core/logger.py index 529d70c1c..c19209226 100644 --- a/virtual_ecosystem/core/logger.py +++ b/virtual_ecosystem/core/logger.py @@ -107,7 +107,7 @@ def add_file_logger(logfile: Path) -> None: if isinstance(handler, logging.FileHandler) and handler.name == "vr_logfile": raise RuntimeError(f"Already logging to file: {handler.baseFilename}") - # Do not propogate errors up to parent handler - this avoids mirroring the log + # Do not propagate errors up to parent handler - this avoids mirroring the log # output through the StreamHandler associated with the root logger LOGGER.propagate = False @@ -141,5 +141,5 @@ def remove_file_logger() -> None: vr_logfile.close() LOGGER.removeHandler(vr_logfile) - # Allow logger messages to propogate back down to the root StreamHandler + # Allow logger messages to propagate back down to the root StreamHandler LOGGER.propagate = True diff --git a/virtual_ecosystem/core/registry.py b/virtual_ecosystem/core/registry.py index 756e2f82d..58d48d727 100644 --- a/virtual_ecosystem/core/registry.py +++ b/virtual_ecosystem/core/registry.py @@ -132,7 +132,7 @@ def register_module(module_name: str) -> None: # Trap models that do not follow the requirement that the BaseModel.model_name # attribute matches the virtual_ecosystem.models.model_name # TODO - can we retire the model_name attribute if it just duplicates the module - # name or force it to match programatically. + # name or force it to match programmatically. _, model = models_found[0] if module_name_short != model.model_name: msg = f"Different model_name attribute and module name {module_name}" diff --git a/virtual_ecosystem/core/schema.py b/virtual_ecosystem/core/schema.py index 628ec3ea8..f82b05089 100644 --- a/virtual_ecosystem/core/schema.py +++ b/virtual_ecosystem/core/schema.py @@ -130,7 +130,7 @@ def merge_schemas(schemas: dict[str, dict[str, Any]]) -> dict[str, Any]: The method merges a set of schemas for a set of desired modules into a single integrated schema that can then be used to validate a merged configuration for those modules. The merge also updates the resulting schema to enforce that only properties - explicity listed in the schema can be included. + explicitly listed in the schema can be included. Args: schemas: A dictionary of schemas keyed by module name diff --git a/virtual_ecosystem/core/variables.py b/virtual_ecosystem/core/variables.py index 52ef7b6c1..caa5ee07d 100644 --- a/virtual_ecosystem/core/variables.py +++ b/virtual_ecosystem/core/variables.py @@ -216,7 +216,7 @@ def _format_variables_list(vars: dict[str, dict]) -> str: vars: The variables to format. Returns: - The flist of variables and atrributes formated as a sequence of tables + The flist of variables and attributes formatted as a sequence of tables in RST format. """ out = [] @@ -244,7 +244,7 @@ def _collect_vars_populated_by_init( Args: models: The list of models that are initialising the variables. - check_unique_initialisation: Fail on duplicate intialisation. + check_unique_initialisation: Fail on duplicate initialisation. Raises: ValueError: If a variable required by a model is not in the known variables @@ -281,7 +281,7 @@ def _collect_vars_populated_by_first_update( Args: models: The list of models that are initialising the variables. - check_unique_initialisation: Fail on duplicate intialisation. + check_unique_initialisation: Fail on duplicate initialisation. Raises: ValueError: If a variable required by a model is not in the known variables diff --git a/virtual_ecosystem/data_variables.toml b/virtual_ecosystem/data_variables.toml index ef58ae58c..77b6f7997 100644 --- a/virtual_ecosystem/data_variables.toml +++ b/virtual_ecosystem/data_variables.toml @@ -483,7 +483,7 @@ variable_type = "float" [[variable]] axis = ["spatial"] -description = "Accumlated surface runoff" +description = "Accumulated surface runoff" name = "surface_runoff_accumulated" unit = "mm" variable_type = "float" diff --git a/virtual_ecosystem/example_data/generation_scripts/climate_example_data.py b/virtual_ecosystem/example_data/generation_scripts/climate_example_data.py index 5d294f498..065644b89 100644 --- a/virtual_ecosystem/example_data/generation_scripts/climate_example_data.py +++ b/virtual_ecosystem/example_data/generation_scripts/climate_example_data.py @@ -77,7 +77,7 @@ # The standard output unit for total precipitation in ERA5-Land is meters which we need # to convert to millimeters. Further, the data represents mean daily accumulated # precipitation for the 9x9km grid box, so the value has to be scaled to monthly (here -# 30 days). TODO handel daily inputs +# 30 days). TODO handle daily inputs dataset["tp_mm"] = dataset["tp"] * 1000 * 30 diff --git a/virtual_ecosystem/example_data/generation_scripts/elevation_example_data.py b/virtual_ecosystem/example_data/generation_scripts/elevation_example_data.py index ef949ef1b..d12486465 100644 --- a/virtual_ecosystem/example_data/generation_scripts/elevation_example_data.py +++ b/virtual_ecosystem/example_data/generation_scripts/elevation_example_data.py @@ -44,7 +44,7 @@ # # Project DEM to new mesh # dem_9x9 = dem.interp(x=new_x, y=new_y) # type: ignore -# # Reduce the data to reuired information for netcdf +# # Reduce the data to required information for netcdf # dem_cleaned = ( # dem_9x9.drop_vars( # ["band", "spatial_ref"] @@ -66,7 +66,7 @@ ) dem_cleaned = DataArray(name="elevation", data=dem_data, dims=("x", "y")) -# Change coordinates to match exmple data grid +# Change coordinates to match example data grid dem_placed = dem_cleaned.assign_coords( {"x": cell_displacements, "y": cell_displacements} ) diff --git a/virtual_ecosystem/main.py b/virtual_ecosystem/main.py index f11309b2d..b0a8ad9b0 100644 --- a/virtual_ecosystem/main.py +++ b/virtual_ecosystem/main.py @@ -146,7 +146,7 @@ def ve_run( if progress: print(f"* Models initialised: {', '.join(init_sequence.keys())}") - LOGGER.info("All models successfully intialised.") + LOGGER.info("All models successfully initialised.") # TODO - A model spin up might be needed here in future @@ -160,7 +160,7 @@ def ve_run( out_path / config["core"]["data_output_options"]["out_initial_file_name"] ) if progress: - print("* Saved model inital state") + print("* Saved model initial state") # If no path for saving continuous data is specified, fall back on using out_path if "out_folder_continuous" not in config["core"]["data_output_options"]: diff --git a/virtual_ecosystem/models/abiotic/abiotic_model.py b/virtual_ecosystem/models/abiotic/abiotic_model.py index 99fafcf4d..251596777 100644 --- a/virtual_ecosystem/models/abiotic/abiotic_model.py +++ b/virtual_ecosystem/models/abiotic/abiotic_model.py @@ -111,7 +111,7 @@ def __init__( """Abiotic init function. The init function is used only to define class attributes. Any logic should be - handeled in :fun:`~virtual_ecosystem.abiotic.abiotic_model._setup`. + handled in :fun:`~virtual_ecosystem.abiotic.abiotic_model._setup`. """ super().__init__(data, core_components, static, **kwargs) diff --git a/virtual_ecosystem/models/abiotic/constants.py b/virtual_ecosystem/models/abiotic/constants.py index b07b3474c..f930c0e2b 100644 --- a/virtual_ecosystem/models/abiotic/constants.py +++ b/virtual_ecosystem/models/abiotic/constants.py @@ -66,7 +66,7 @@ class AbioticConsts(ConstantsDataclass): transfer, typically extending up to about 10% of the height of the roughness elements or features on the surface. This layer is characterized by intense turbulence and rapid velocity changes due to surface irregularities. - Implentation and value taken from :cite:p:`maclean_microclimc_2021`.""" + Implementation and value taken from :cite:p:`maclean_microclimc_2021`.""" max_ratio_wind_to_friction_velocity: float = 0.3 """Maximum ratio of wind velocity to friction velocity, dimensionless. diff --git a/virtual_ecosystem/models/abiotic/energy_balance.py b/virtual_ecosystem/models/abiotic/energy_balance.py index a78c0f552..2bf6757d0 100644 --- a/virtual_ecosystem/models/abiotic/energy_balance.py +++ b/virtual_ecosystem/models/abiotic/energy_balance.py @@ -188,7 +188,7 @@ def initialise_canopy_and_soil_fluxes( canopy_temperature[layer_structure.index_filled_canopy] = initial_canopy_temperature output["canopy_temperature"] = canopy_temperature - # Initialise sensible heat flux with non-zero mimimum values and write in output + # Initialise sensible heat flux with non-zero minimum values and write in output sensible_heat_flux = DataArray( np.full_like(layer_heights, np.nan), dims=layer_heights.dims, @@ -199,10 +199,10 @@ def initialise_canopy_and_soil_fluxes( sensible_heat_flux[layer_structure.index_topsoil] = initial_flux_value output["sensible_heat_flux"] = sensible_heat_flux - # Initialise latent heat flux with non-zero mimimum values and write in output + # Initialise latent heat flux with non-zero minimum values and write in output output["latent_heat_flux"] = sensible_heat_flux.copy().rename("latent_heat_flux") - # Initialise latent heat flux with non-zero mimimum values and write in output + # Initialise latent heat flux with non-zero minimum values and write in output ground_heat_flux = DataArray( np.full_like(layer_heights, np.nan), dims=layer_heights.dims, diff --git a/virtual_ecosystem/models/abiotic/microclimate.py b/virtual_ecosystem/models/abiotic/microclimate.py index c328a5109..64d3f2128 100644 --- a/virtual_ecosystem/models/abiotic/microclimate.py +++ b/virtual_ecosystem/models/abiotic/microclimate.py @@ -270,7 +270,7 @@ def run_microclimate( # TODO cross-check with plant model, time step currently month to second # TODO also there is a split between evaporation and transpiration, needs to be # fixed in #493 - hydrology and evaporation - # also canopy_evaporation is 2D, chekc that this matches + # also canopy_evaporation is 2D, check that this matches # evapotranspiration = data['canopy_evaporation'] + data['transpiration'] latent_heat_flux_canopy = ( data["evapotranspiration"][layer_structure.index_filled_canopy].to_numpy() diff --git a/virtual_ecosystem/models/abiotic_simple/abiotic_simple_model.py b/virtual_ecosystem/models/abiotic_simple/abiotic_simple_model.py index 9995e6084..a10f16346 100644 --- a/virtual_ecosystem/models/abiotic_simple/abiotic_simple_model.py +++ b/virtual_ecosystem/models/abiotic_simple/abiotic_simple_model.py @@ -89,8 +89,7 @@ def __init__( """Abiotic simple init. The init function is used only to define class attributes. Any logic should be - handeled in - :fun:`~virtual_ecosystem.abiotic_simple.abiotic_simple_model._setup`. + handled in :fun:`~virtual_ecosystem.abiotic_simple.abiotic_simple_model._setup`. """ super().__init__(data, core_components, static, **kwargs) diff --git a/virtual_ecosystem/models/animal/animal_cohorts.py b/virtual_ecosystem/models/animal/animal_cohorts.py index fc9230357..d781b7909 100644 --- a/virtual_ecosystem/models/animal/animal_cohorts.py +++ b/virtual_ecosystem/models/animal/animal_cohorts.py @@ -77,7 +77,7 @@ def __init__( self.functional_group.adult_mass, self.functional_group.prey_scaling, ) - """The identification of useable food resources.""" + """The identification of usable food resources.""" self.territory_size = sf.territory_size(self.functional_group.adult_mass) """The size in hectares of the animal cohorts territory.""" self.occupancy_proportion: float = 1.0 / self.territory_size @@ -1158,11 +1158,11 @@ def migrate_juvenile_probability(self) -> float: equal to the proportion of the cohort individuals that would arrive in the neighboring cell after one full timestep's movement. - Assuming cohort individuals are homogenously distributed within a grid cell and + Assuming cohort individuals are homogeneously distributed within a grid cell and that the move is non-diagonal, the probability is then equal to the ratio of dispersal speed to the side-length of a grid cell. - A homogenously distributed cohort with a partial presence in a grid cell will + A homogeneously distributed cohort with a partial presence in a grid cell will have a proportion of its individuals in the new grid cell equal to the proportion the new grid cell that it occupies (A_new / A_cell). This proportion will be equal to the cohorts velocity (V) multiplied by the elapsed time (t) diff --git a/virtual_ecosystem/models/animal/animal_model.py b/virtual_ecosystem/models/animal/animal_model.py index 84e99292f..b441341d3 100644 --- a/virtual_ecosystem/models/animal/animal_model.py +++ b/virtual_ecosystem/models/animal/animal_model.py @@ -132,7 +132,7 @@ def __init__( """Animal init function. The init function is used only to define class attributes. Any logic should be - handeled in :fun:`~virtual_ecosystem.animal.animal_model._setup`. + handled in :fun:`~virtual_ecosystem.animal.animal_model._setup`. """ super().__init__(data, core_components, static, **kwargs) diff --git a/virtual_ecosystem/models/animal/constants.py b/virtual_ecosystem/models/animal/constants.py index c0138eb2e..73db81425 100644 --- a/virtual_ecosystem/models/animal/constants.py +++ b/virtual_ecosystem/models/animal/constants.py @@ -117,7 +117,7 @@ class AnimalConsts(ConstantsDataclass): """Proportion of the time step in which it's suitable to be active for functional group f.""" - # Trophic paramters + # Trophic parameters alpha_0_herb = 1.0e-11 # alpha_herb_0 [Madingley] ha/(day*g) """Effective rate per unit mass at which a herbivore searches its environment.""" diff --git a/virtual_ecosystem/models/animal/scaling_functions.py b/virtual_ecosystem/models/animal/scaling_functions.py index 1137ae37f..2fd7711fe 100644 --- a/virtual_ecosystem/models/animal/scaling_functions.py +++ b/virtual_ecosystem/models/animal/scaling_functions.py @@ -47,7 +47,7 @@ def metabolic_rate( This follows the Madingley implementation, assuming a power-law relationship with mass and an exponential relationship with temperature. - TODO: Implement activity windows to properly paramterize sigma. + TODO: Implement activity windows to properly parameterize sigma. TODO: Move constants to constants file. Args: diff --git a/virtual_ecosystem/models/hydrology/below_ground.py b/virtual_ecosystem/models/hydrology/below_ground.py index 098a27265..fc5d563a2 100644 --- a/virtual_ecosystem/models/hydrology/below_ground.py +++ b/virtual_ecosystem/models/hydrology/below_ground.py @@ -226,7 +226,7 @@ def calculate_matric_potential( \Psi_{m} = -\frac{1}{\alpha} (S_{e}^{-\frac{1}{m}} - 1)^{(\frac{1}{n})} where :math:`\alpha` is the inverse of the air-entry , :math:`S_{e}` is the - effective saturation, n and m are van Genuchten parmeters. + effective saturation, n and m are van Genuchten parameters. Args: effective_saturation: Effective saturation @@ -335,7 +335,7 @@ def update_groundwater_storage( output = {} # The water that percolates from the upper to the lower groundwater zone is defined - # as the minumum of `max_percolation_rate_uzlz` and the amount water stored in upper + # as the minimum of `max_percolation_rate_uzlz` and the amount water stored in upper # zone, here `groundwater_storage[0]` percolation_to_lower_zone = np.where( max_percolation_rate_uzlz < groundwater_storage[0], diff --git a/virtual_ecosystem/models/hydrology/constants.py b/virtual_ecosystem/models/hydrology/constants.py index a78b736eb..c11a6719f 100644 --- a/virtual_ecosystem/models/hydrology/constants.py +++ b/virtual_ecosystem/models/hydrology/constants.py @@ -154,7 +154,7 @@ class HydroConsts(ConstantsDataclass): intercept_residence_time: float = 86400.0 """Intecept residence time. - The amound of time that water sits on the leaves before it evaporates or falls to + The amount of time that water sits on the leaves before it evaporates or falls to the ground.""" initial_stomatal_conductance: float = 1000.0 diff --git a/virtual_ecosystem/models/hydrology/hydrology_model.py b/virtual_ecosystem/models/hydrology/hydrology_model.py index 82608643f..57a53e37f 100644 --- a/virtual_ecosystem/models/hydrology/hydrology_model.py +++ b/virtual_ecosystem/models/hydrology/hydrology_model.py @@ -151,7 +151,7 @@ def __init__( """Hydrology init function. The init function is used only to define class attributes. Any logic should be - handeled in :fun:`~virtual_ecosystem.hydrology.hydrology_model._setup`. + handled in :fun:`~virtual_ecosystem.hydrology.hydrology_model._setup`. """ super().__init__(data, core_components, static, **kwargs) @@ -221,7 +221,7 @@ def _setup( This function initializes variables that are required to run the first update(). - For the within grid cell hydrology, soil moisture is initialised homogenously + For the within grid cell hydrology, soil moisture is initialised homogeneously for all soil layers and groundwater storage is set to the percentage of it's capacity that was defined in the model configuration. Soil and canopy aerodynamic resistances are set to an initial constant value. Some additional @@ -767,7 +767,7 @@ def _update(self, time_index: int, **kwargs: Any) -> None: np.stack(daily_lists[var], axis=0), axis=0 ) - # Save last state of groundwater stoage, [mm] + # Save last state of groundwater storage, [mm] soil_hydrology["groundwater_storage"] = DataArray( daily_lists["groundwater_storage"][day], dims=self.data["groundwater_storage"].dims, diff --git a/virtual_ecosystem/models/litter/env_factors.py b/virtual_ecosystem/models/litter/env_factors.py index 27ba1eaf8..2de7cba15 100644 --- a/virtual_ecosystem/models/litter/env_factors.py +++ b/virtual_ecosystem/models/litter/env_factors.py @@ -148,12 +148,12 @@ def calculate_soil_water_effect_on_litter_decomp( # range of matric potentials. # Calculate how much moisture suppresses microbial activity - supression = ( + suppression = ( (np.log10(-water_potential) - np.log10(-water_potential_opt)) / (np.log10(-water_potential_halt) - np.log10(-water_potential_opt)) ) ** moisture_response_curvature - return 1 - supression + return 1 - suppression def average_temperature_over_microbially_active_layers( diff --git a/virtual_ecosystem/models/litter/litter_model.py b/virtual_ecosystem/models/litter/litter_model.py index cd5289119..6a3231b40 100644 --- a/virtual_ecosystem/models/litter/litter_model.py +++ b/virtual_ecosystem/models/litter/litter_model.py @@ -169,7 +169,7 @@ def __init__( """Litter init function. The init function is used only to define class attributes. Any logic should be - handeled in :fun:`~virtual_ecosystem.litter.litter_model._setup`. + handled in :fun:`~virtual_ecosystem.litter.litter_model._setup`. """ super().__init__(data, core_components, static, **kwargs) diff --git a/virtual_ecosystem/models/plants/plants_model.py b/virtual_ecosystem/models/plants/plants_model.py index d712e1cfd..95faaf400 100644 --- a/virtual_ecosystem/models/plants/plants_model.py +++ b/virtual_ecosystem/models/plants/plants_model.py @@ -161,7 +161,7 @@ class PlantsModel( * the canopy layer closure heights (``layer_heights``), * the canopy layer leaf area indices (``leaf_area_index``), - * the fraction of absorbed photosynthetically active radation in each canopy layer + * the fraction of absorbed photosynthetically active radiation in each canopy layer (``layer_fapar``), and * the whole canopy leaf mass within the layers (``layer_leaf_mass``) @@ -193,7 +193,7 @@ def __init__( """Plants init function. The init function is used only to define class attributes. Any logic should be - handeled in :fun:`~virtual_ecosystem.plants.plants_model._setup`. + handled in :fun:`~virtual_ecosystem.plants.plants_model._setup`. """ super().__init__(data, core_components, static, **kwargs) @@ -406,7 +406,7 @@ def update_canopy_layers(self) -> None: * the layer closure heights (``layer_heights``), * the layer leaf area indices (``leaf_area_index``), - * the fraction of absorbed photosynthetically active radation in each layer + * the fraction of absorbed photosynthetically active radiation in each layer (``layer_fapar``), and * the whole canopy leaf mass within the layers (``layer_leaf_mass``), and * the proportion of shortwave radiation absorbed, including both by leaves in @@ -547,7 +547,7 @@ def estimate_gpp(self, time_index: int) -> None: :attr:`~virtual_ecosystem.models.plants.plants_model.PlantsModel.pmodel` attribute. - The GPP for each cohort is then estimated by mutiplying the cohort canopy area + The GPP for each cohort is then estimated by multiplying the cohort canopy area within each layer by GPP and the time elapsed in seconds since the last update. .. TODO: diff --git a/virtual_ecosystem/models/soil/env_factors.py b/virtual_ecosystem/models/soil/env_factors.py index 46807506d..69d24bead 100644 --- a/virtual_ecosystem/models/soil/env_factors.py +++ b/virtual_ecosystem/models/soil/env_factors.py @@ -148,12 +148,12 @@ def calculate_water_potential_impact_on_microbes( raise err # Calculate how much moisture suppresses microbial activity - supression = ( + suppression = ( (np.log10(-water_potential) - np.log10(-water_potential_opt)) / (np.log10(-water_potential_halt) - np.log10(-water_potential_opt)) ) ** response_curvature - return 1 - supression + return 1 - suppression def calculate_pH_suitability( @@ -415,7 +415,7 @@ def calculate_carbon_use_efficiency( cue_reference_temp: float, cue_with_temperature: float, ) -> NDArray[np.float32]: - """Calculate the (temperature dependant) carbon use efficiency. + """Calculate the (temperature dependent) carbon use efficiency. TODO - This should be adapted to use an Arrhenius function at some point. diff --git a/virtual_ecosystem/models/soil/soil_model.py b/virtual_ecosystem/models/soil/soil_model.py index 8435445a4..ce4c56e76 100644 --- a/virtual_ecosystem/models/soil/soil_model.py +++ b/virtual_ecosystem/models/soil/soil_model.py @@ -197,7 +197,7 @@ def __init__( """Soil init function. The init function is used only to define class attributes. Any logic should be - handeled in :fun:`~virtual_ecosystem.soil.soil_model._setup`. + handled in :fun:`~virtual_ecosystem.soil.soil_model._setup`. """ super().__init__(data, core_components, static, **kwargs) From acfda8cae093243c4579c7d119ca3df691f2c01b Mon Sep 17 00:00:00 2001 From: David Orme Date: Thu, 8 May 2025 17:03:52 +0100 Subject: [PATCH 3/3] Add to dev docs --- docs/source/development/contributing/code_qa_and_typing.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/source/development/contributing/code_qa_and_typing.md b/docs/source/development/contributing/code_qa_and_typing.md index 20d95d194..ef8701ee8 100644 --- a/docs/source/development/contributing/code_qa_and_typing.md +++ b/docs/source/development/contributing/code_qa_and_typing.md @@ -68,6 +68,10 @@ and we use both the linting (`ruff`) and formatting (`ruff-format`) hooks. : This tool is used to pass all python code within notebooks through code formatting. At present, this still uses the `black` code formatter and not `ruff-format` as above. +`codespell` +: This tool checks files for common mis-spellings of words. If `codespell` complains +about a word that you think is correct, you can add it to `.codespellignore.txt`. + ### Output and configuration When `pre-commit` runs, you may see some lines about package installation and update, @@ -82,6 +86,7 @@ ruff-format..........................................................Passed mypy.................................................................Passed markdownlint.........................................................Passed jupytext.............................................................Passed +codespell............................................................Passed ``` ### Updating `pre-commit`