From 358e607b3f1793dedc65b159e385980b25704375 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 18:46:21 +0100 Subject: [PATCH 01/18] add mkdocs --- poetry.lock | 138 ++++++++++++++++++++++++++++++++++++++++++++++++- pyproject.toml | 6 +++ 2 files changed, 143 insertions(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 28d2ae7..b421b2b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -729,6 +729,24 @@ files = [ {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, ] +[[package]] +name = "ghp-import" +version = "2.1.0" +description = "Copy your docs directly to the gh-pages branch." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, + {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, +] + +[package.dependencies] +python-dateutil = ">=2.8.1" + +[package.extras] +dev = ["flake8", "markdown", "twine", "wheel"] + [[package]] name = "idna" version = "3.4" @@ -1223,6 +1241,25 @@ files = [ {file = "locket-1.0.0.tar.gz", hash = "sha256:5c0d4c052a8bbbf750e056a8e65ccd309086f4f0f18a2eac306a8dfa4112a632"}, ] +[[package]] +name = "markdown" +version = "3.5.2" +description = "Python implementation of John Gruber's Markdown." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, + {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, +] + +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + [[package]] name = "markupsafe" version = "2.1.3" @@ -1298,6 +1335,18 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mergedeep" +version = "1.3.4" +description = "A deep merge function for 🐍." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, + {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, +] + [[package]] name = "mistune" version = "3.0.1" @@ -1310,6 +1359,38 @@ files = [ {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, ] +[[package]] +name = "mkdocs" +version = "1.5.3" +description = "Project documentation with Markdown." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, + {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, +] + +[package.dependencies] +click = ">=7.0" +colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} +ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} +jinja2 = ">=2.11.1" +markdown = ">=3.2.1" +markupsafe = ">=2.0.1" +mergedeep = ">=1.3.4" +packaging = ">=20.5" +pathspec = ">=0.11.1" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" +pyyaml-env-tag = ">=0.1" +watchdog = ">=2.0" + +[package.extras] +i18n = ["babel (>=2.9.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] + [[package]] name = "mypy-extensions" version = "1.0.0" @@ -2000,6 +2081,21 @@ files = [ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] +[[package]] +name = "pyyaml-env-tag" +version = "0.1" +description = "A custom YAML tag for referencing environment variables in YAML files. " +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, + {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, +] + +[package.dependencies] +pyyaml = "*" + [[package]] name = "pyzmq" version = "25.1.0" @@ -2505,6 +2601,46 @@ secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17. socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "watchdog" +version = "3.0.0" +description = "Filesystem events monitoring" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"}, + {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"}, + {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"}, + {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"}, + {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"}, + {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"}, + {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"}, + {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"}, + {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"}, + {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"}, + {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"}, + {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"}, + {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"}, + {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"}, +] + +[package.extras] +watchmedo = ["PyYAML (>=3.10)"] + [[package]] name = "wcwidth" version = "0.2.6" @@ -2633,4 +2769,4 @@ namelist = ["f90nml"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "64c1d2de03507a7732a3bb171b1c5b0c49b702418619e4c59564182eb1faeba7" +content-hash = "befd7686089553e784c73196965696e59f097a7fd4fb0ba2c398da8b371764b0" diff --git a/pyproject.toml b/pyproject.toml index 80ad3db..17a1b0b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,12 @@ optional = true black = "^22.10.0" jupyterlab = ">=3.5.1" +[tool.poetry.group.doc] +optional = true + +[tool.poetry.group.doc.dependencies] +mkdocs = "^1.5.3" + [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" From 9af222baf4483886899ede56df72b4dd1f942e82 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 19:14:31 +0100 Subject: [PATCH 02/18] mv doc to docs and lock --- poetry.lock | 1530 +++++++++++++++++++++++++----------------------- pyproject.toml | 4 +- 2 files changed, 799 insertions(+), 735 deletions(-) diff --git a/poetry.lock b/poetry.lock index b421b2b..8701567 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,25 +2,26 @@ [[package]] name = "anyio" -version = "3.7.1" +version = "4.2.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, + {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, + {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, ] [package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] [[package]] name = "appnope" @@ -36,23 +37,24 @@ files = [ [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." +version = "23.1.0" +description = "Argon2 for Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, - {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, ] [package.dependencies] argon2-cffi-bindings = "*" [package.extras] -dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] -docs = ["furo", "sphinx", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" @@ -94,36 +96,42 @@ tests = ["pytest"] [[package]] name = "arrow" -version = "1.2.3" +version = "1.3.0" description = "Better dates & times for Python" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, - {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, ] [package.dependencies] python-dateutil = ">=2.7.0" +types-python-dateutil = ">=2.8.10" + +[package.extras] +doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] +test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] [[package]] name = "asttokens" -version = "2.2.1" +version = "2.4.1" description = "Annotate AST trees with source code positions" category = "dev" optional = false python-versions = "*" files = [ - {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, - {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, + {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, + {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, ] [package.dependencies] -six = "*" +six = ">=1.12.0" [package.extras] -test = ["astroid", "pytest"] +astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] +test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "async-lru" @@ -142,38 +150,42 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "attrs" -version = "23.1.0" +version = "23.2.0" description = "Classes Without Boilerplate" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, - {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, + {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, + {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, ] [package.extras] cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]", "pre-commit"] +dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "babel" -version = "2.12.1" +version = "2.14.0" description = "Internationalization utilities" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, - {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, + {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, + {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] [package.dependencies] pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} +[package.extras] +dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] + [[package]] name = "backcall" version = "0.2.0" @@ -188,20 +200,23 @@ files = [ [[package]] name = "beautifulsoup4" -version = "4.12.2" +version = "4.12.3" description = "Screen-scraping library" category = "dev" optional = false python-versions = ">=3.6.0" files = [ - {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, - {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, + {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, + {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, ] [package.dependencies] soupsieve = ">1.2" [package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] @@ -243,14 +258,14 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bleach" -version = "6.0.0" +version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, - {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, + {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, + {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, ] [package.dependencies] @@ -258,92 +273,80 @@ six = ">=1.9.0" webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] +css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "certifi" -version = "2023.7.22" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] name = "cffi" -version = "1.15.1" +version = "1.16.0" description = "Foreign Function Interface for Python calling C code." category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, - {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, - {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, - {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, - {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, - {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, - {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, - {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, - {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, - {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, - {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, - {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, - {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, - {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, - {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, - {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, - {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, - {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, - {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, - {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, - {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, - {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, - {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, - {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, - {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, - {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, - {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, - {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, - {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, - {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, - {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, - {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, - {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, + {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, + {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, + {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, + {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, + {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, + {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, + {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, + {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, + {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, + {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, + {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, + {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, + {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, + {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, + {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, + {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, + {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, + {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, + {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, + {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, + {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, + {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, + {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, + {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, + {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, ] [package.dependencies] @@ -351,133 +354,148 @@ pycparser = "*" [[package]] name = "cftime" -version = "1.6.2" +version = "1.6.3" description = "Time-handling functionality from netcdf4-python" category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "cftime-1.6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b4d2a1920f0aad663f25700b30621ff64af373499e52b544da1148dd8c09409a"}, - {file = "cftime-1.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ba7909a0cd4adcb16797d8d6ab2767e7ddb980b2bf9dbabfc71b3bdd94f072b"}, - {file = "cftime-1.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acb294fdb80e33545ae54b4421df35c4e578708a5ffce1c00408b2294e70ecef"}, - {file = "cftime-1.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:2abdac6ca5b8b6102f319122546739dfc42406b816c16f2a98a8f0cd406d3bf0"}, - {file = "cftime-1.6.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:eb7f8cd0996640b83020133b5ef6b97fc9216c3129eaeeaca361abdff5d82166"}, - {file = "cftime-1.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8d49d69c64cee2c175478eed84c3a57fce083da4ceebce16440f72be561a8489"}, - {file = "cftime-1.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:455cec3627e6ca8694b0d9201da6581eb4381b58389f1fbcb51a14fa0e2b3d94"}, - {file = "cftime-1.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:29c18601abea0fd160fbe423e05c7a56fe1d38dd250a6b010de499a132d3fe18"}, - {file = "cftime-1.6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:afb5b38b51b8bc02f1656a9f15c52b0b20a3999adbe1ab9ac57f926e0065b48a"}, - {file = "cftime-1.6.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aedfb7a783d19d7a30cb41951310f3bfe98f9f21fffc723c8af08a11962b0b17"}, - {file = "cftime-1.6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3042048324b4d6a1066c978ec78101effdd84320e8862bfdbf8122d7ad7588ec"}, - {file = "cftime-1.6.2-cp37-none-win_amd64.whl", hash = "sha256:ee70fa069802652cf534de1dd3fc590b7d22d4127447bf96ac9849abcdadadf1"}, - {file = "cftime-1.6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:93f00f454329c1f2588ebca2650e8edf7607d6189dbdcc81b5f3be2080155cc4"}, - {file = "cftime-1.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e83db2fdda900eb154a9f79dfb665ac6190781c61d2e18151996de5ee7ffd8a2"}, - {file = "cftime-1.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56d0242fc4990584b265622622b25bb262a178097711d2d95e53ef52a9d23e7e"}, - {file = "cftime-1.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:055d5d60a756c6c1857cf84d77655bb707057bb6c4a4fbb104a550e76c40aad9"}, - {file = "cftime-1.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0955e1f3e1c09a9e0296b50f135ff9719cb2466f81c8ad4a10ef06fa394de984"}, - {file = "cftime-1.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:07fdef2f75a0f0952b0376fa4cd08ef8a1dad3b963976ac07517811d434936b7"}, - {file = "cftime-1.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:892d5dc38f8b998c83a2a01f131e63896d020586de473e1878f9e85acc70ad44"}, - {file = "cftime-1.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86fe550b94525c327578a90b2e13418ca5ba6c636d5efe3edec310e631757eea"}, - {file = "cftime-1.6.2.tar.gz", hash = "sha256:8614c00fb8a5046de304fdd86dbd224f99408185d7b245ac6628d0276596e6d2"}, + {file = "cftime-1.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b62d42546fa5c914dfea5b15a9aaed2087ea1211cc36d08c374502ef95892038"}, + {file = "cftime-1.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb6dd70b2ccabfe1a14b7fbb0bbdce0418e71697094373c0d573c880790fa291"}, + {file = "cftime-1.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9878bfd8c1c3f24184ecbd528f739ba46ebaceaf1c8a24d348d7befb117a285"}, + {file = "cftime-1.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:3cf6e216a4c06f9a628cdf8e9c9d5e8097fb3eb02dd087dd14ab3b18478a7271"}, + {file = "cftime-1.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d2c01456d9d7b46aa710a41d1c711a50d5ea259aff4a987d0e973d1093bc922"}, + {file = "cftime-1.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:80eb1170ce1639016f55760847f4aadd04b0312496c5bac2797e930914bba48d"}, + {file = "cftime-1.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d87dadd0824262bdd7493babd2a44447da0a22175ded8ae9e060a3aebec7c5d7"}, + {file = "cftime-1.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:0a38eb9f5c733a23e1714bd3ef2762ed5acee34f127670f8fb4ad6464946f6b3"}, + {file = "cftime-1.6.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2d113a01ab924445e61d65c26bbd95bc08e4a22878d3b947064bba056c884c4a"}, + {file = "cftime-1.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f11685663a6af97418908060492a07663c16d42519c139ca03c2ffb1377fd25"}, + {file = "cftime-1.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a98abb1d46d118e52b0611ce668a0b714b407be26177ef0581ecf5e95f894725"}, + {file = "cftime-1.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:4d6fbd5f41b322cfa7b0ac3aaadeceb4450100a164b5bccbbb9e7c5048489a88"}, + {file = "cftime-1.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bedb577bc8b8f3f10f5336c0792e5dae88605781890f50f36b45bb46907968e8"}, + {file = "cftime-1.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:022dabf1610cdd04a693e730fa8f71d307059717f29dba921e7486e553412bb4"}, + {file = "cftime-1.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbf782ab4ac0605bdec2b941952c897595613203942b7f8c2fccd17efa5147df"}, + {file = "cftime-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:9eb177a02db7cd84aa6962278e4bd2d3106a545de82e6aacd9404f1e153661db"}, + {file = "cftime-1.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b86be8c2f254147be4ba88f12099466dde457a4a3a21de6c69d52a7224c13ae"}, + {file = "cftime-1.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:523b9a6bf03f5e36407979e248381d0fcab2d225b915bbde77d00c6dde192b90"}, + {file = "cftime-1.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a14d2c7d22fd2a6dfa6ad563283b6d6679f1df95e0ed8d14b8f284dad402887"}, + {file = "cftime-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:d9b00c2844c7a1701d8ede5336b6321dfee256ceab81a34a1aff0483d56891a6"}, + {file = "cftime-1.6.3.tar.gz", hash = "sha256:d0a6b29f72a13f08e008b9becff247cc75c84acb213332ede18879c5b6aa4dfd"}, ] [package.dependencies] -numpy = ">1.13.3" +numpy = {version = ">1.13.3", markers = "python_version < \"3.12.0.rc1\""} [[package]] name = "charset-normalizer" -version = "3.2.0" +version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "dev" optional = false python-versions = ">=3.7.0" files = [ - {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, - {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, - {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, - {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, - {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, - {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, - {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, ] [[package]] name = "click" -version = "8.1.6" +version = "8.1.7" description = "Composable command line interface toolkit" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.6-py3-none-any.whl", hash = "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5"}, - {file = "click-8.1.6.tar.gz", hash = "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd"}, + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, ] [package.dependencies] @@ -485,14 +503,14 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [[package]] name = "cloudpickle" -version = "2.2.1" -description = "Extended pickling support for Python objects" +version = "3.0.0" +description = "Pickler class to extend the standard pickle.Pickler functionality" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "cloudpickle-2.2.1-py3-none-any.whl", hash = "sha256:61f594d1f4c295fa5cd9014ceb3a1fc4a70b0de1164b94fbc2d854ccba056f9f"}, - {file = "cloudpickle-2.2.1.tar.gz", hash = "sha256:d89684b8de9e34a2a43b3460fbca07d09d6e25ce858df4d5a44240403b6178f5"}, + {file = "cloudpickle-3.0.0-py3-none-any.whl", hash = "sha256:246ee7d0c295602a036e86369c77fecda4ab17b506496730f2f576d9016fd9c7"}, + {file = "cloudpickle-3.0.0.tar.gz", hash = "sha256:996d9a482c6fb4f33c1a35335cf8afd065d2a56e973270364840712d9131a882"}, ] [[package]] @@ -509,23 +527,21 @@ files = [ [[package]] name = "comm" -version = "0.1.4" +version = "0.2.1" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "comm-0.1.4-py3-none-any.whl", hash = "sha256:6d52794cba11b36ed9860999cd10fd02d6b2eac177068fdd585e1e2f8a96e67a"}, - {file = "comm-0.1.4.tar.gz", hash = "sha256:354e40a59c9dd6db50c5cc6b4acc887d82e9603787f83b68c01a80a923984d15"}, + {file = "comm-0.2.1-py3-none-any.whl", hash = "sha256:87928485c0dfc0e7976fd89fc1e187023cf587e7c353e4a9b417555b44adf021"}, + {file = "comm-0.2.1.tar.gz", hash = "sha256:0bc91edae1344d39d3661dcbc36937181fdaddb304790458f8b044dbc064b89a"}, ] [package.dependencies] traitlets = ">=4" [package.extras] -lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] test = ["pytest"] -typing = ["mypy (>=0.990)"] [[package]] name = "dask" @@ -560,30 +576,30 @@ test = ["pandas[test]", "pre-commit", "pytest", "pytest-rerunfailures", "pytest- [[package]] name = "debugpy" -version = "1.6.7" +version = "1.8.0" description = "An implementation of the Debug Adapter Protocol for Python" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, - {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, - {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, - {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, - {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, - {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, - {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, - {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, - {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, - {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, - {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, - {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, - {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, - {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, - {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, - {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, - {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, - {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, + {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"}, + {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"}, + {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"}, + {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"}, + {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"}, + {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"}, + {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"}, + {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"}, + {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"}, + {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"}, + {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"}, + {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"}, + {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"}, + {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"}, + {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"}, + {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"}, + {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"}, + {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"}, ] [[package]] @@ -612,14 +628,14 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.1.2" +version = "1.2.0" description = "Backport of PEP 654 (exception groups)" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.1.2-py3-none-any.whl", hash = "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f"}, - {file = "exceptiongroup-1.1.2.tar.gz", hash = "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5"}, + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] [package.extras] @@ -627,29 +643,29 @@ test = ["pytest (>=6)"] [[package]] name = "executing" -version = "1.2.0" +version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, - {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, + {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, + {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, ] [package.extras] -tests = ["asttokens", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] [[package]] name = "f90nml" -version = "1.4.3" +version = "1.4.4" description = "Fortran 90 namelist parser" category = "main" optional = false python-versions = "*" files = [ - {file = "f90nml-1.4.3-py2.py3-none-any.whl", hash = "sha256:abbc4d3d9691571eda6273e72df0a5b5cd20338699d4e295a11037750dcb7dbe"}, - {file = "f90nml-1.4.3.tar.gz", hash = "sha256:e2f3cd23d821ebcaef66ce406485b35aa08aae0df92c4bece76e227e5bd146e1"}, + {file = "f90nml-1.4.4-py2.py3-none-any.whl", hash = "sha256:58d91eb0f9a424a48fe5df868cbb33c86800f1026d6e7f3c0f663c930dddc644"}, + {file = "f90nml-1.4.4.tar.gz", hash = "sha256:65e8e135779895245238cbf6be5b1b80d6c2b8c9350c9cdce6183a31bdfd7622"}, ] [package.extras] @@ -657,14 +673,14 @@ yaml = ["PyYAML"] [[package]] name = "fastjsonschema" -version = "2.18.0" +version = "2.19.1" description = "Fastest Python implementation of JSON schema" category = "dev" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.18.0-py3-none-any.whl", hash = "sha256:128039912a11a807068a7c87d0da36660afbfd7202780db26c4aa7153cfdc799"}, - {file = "fastjsonschema-2.18.0.tar.gz", hash = "sha256:e820349dd16f806e4bd1467a138dced9def4bc7d6213a34295272a6cac95b5bd"}, + {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, + {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, ] [package.extras] @@ -684,14 +700,14 @@ files = [ [[package]] name = "fsspec" -version = "2023.6.0" +version = "2023.12.2" description = "File-system specification" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2023.6.0-py3-none-any.whl", hash = "sha256:1cbad1faef3e391fba6dc005ae9b5bdcbf43005c9167ce78c915549c352c869a"}, - {file = "fsspec-2023.6.0.tar.gz", hash = "sha256:d0b2f935446169753e7a5c5c55681c54ea91996cc67be93c39a154fb3a2742af"}, + {file = "fsspec-2023.12.2-py3-none-any.whl", hash = "sha256:d800d87f72189a745fa3d6b033b9dc4a34ad069f60ca60b943a63599f5501960"}, + {file = "fsspec-2023.12.2.tar.gz", hash = "sha256:8548d39e8810b59c38014934f6b31e57f40c1b20f911f4cc2b85389c7e9bf0cb"}, ] [package.extras] @@ -749,54 +765,54 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "idna" -version = "3.4" +version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" category = "dev" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] name = "importlib-metadata" -version = "6.8.0" +version = "7.0.1" description = "Read metadata from Python packages" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] [package.dependencies] zipp = ">=0.5" [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" -version = "6.0.0" +version = "6.1.1" description = "Read resources from Python packages" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.0.0-py3-none-any.whl", hash = "sha256:d952faee11004c045f785bb5636e8f885bed30dc3c940d5d42798a2a4541c185"}, - {file = "importlib_resources-6.0.0.tar.gz", hash = "sha256:4cf94875a8368bd89531a756df9a9ebe1f150e0f885030b461237bc7f2d905f2"}, + {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, + {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, ] [package.dependencies] zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] [[package]] name = "iniconfig" @@ -812,14 +828,14 @@ files = [ [[package]] name = "ipykernel" -version = "6.25.0" +version = "6.29.0" description = "IPython Kernel for Jupyter" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.25.0-py3-none-any.whl", hash = "sha256:f0042e867ac3f6bca1679e6a88cbd6a58ed93a44f9d0866aecde6efe8de76659"}, - {file = "ipykernel-6.25.0.tar.gz", hash = "sha256:e342ce84712861be4b248c4a73472be4702c1b0dd77448bfd6bcfb3af9d5ddf9"}, + {file = "ipykernel-6.29.0-py3-none-any.whl", hash = "sha256:076663ca68492576f051e4af7720d33f34383e655f2be0d544c8b1c9de915b2f"}, + {file = "ipykernel-6.29.0.tar.gz", hash = "sha256:b5dd3013cab7b330df712891c96cd1ab868c27a7159e606f762015e9bf8ceb3f"}, ] [package.dependencies] @@ -833,7 +849,7 @@ matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" psutil = "*" -pyzmq = ">=20" +pyzmq = ">=24" tornado = ">=6.1" traitlets = ">=5.4.0" @@ -842,18 +858,18 @@ cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] pyqt5 = ["pyqt5"] pyside6 = ["pyside6"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (==0.23.2)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" -version = "8.12.2" +version = "8.12.3" description = "IPython: Productive Interactive Computing" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "ipython-8.12.2-py3-none-any.whl", hash = "sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc"}, - {file = "ipython-8.12.2.tar.gz", hash = "sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea"}, + {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, + {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, ] [package.dependencies] @@ -901,14 +917,14 @@ arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.19.0" +version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.0-py2.py3-none-any.whl", hash = "sha256:cb8ce23fbccff0025e9386b5cf85e892f94c9b822378f8da49970471335ac64e"}, - {file = "jedi-0.19.0.tar.gz", hash = "sha256:bcf9894f1753969cbac8022a8c2eaee06bfa3724e4192470aaffe7eb6272b0c4"}, + {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, + {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] [package.dependencies] @@ -917,18 +933,18 @@ parso = ">=0.8.3,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.3" description = "A very fast and expressive template engine." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, + {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, + {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] [package.dependencies] @@ -966,14 +982,14 @@ files = [ [[package]] name = "jsonschema" -version = "4.18.6" +version = "4.21.1" description = "An implementation of JSON Schema validation for Python" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.18.6-py3-none-any.whl", hash = "sha256:dc274409c36175aad949c68e5ead0853aaffbe8e88c830ae66bb3c7a1728ad2d"}, - {file = "jsonschema-4.18.6.tar.gz", hash = "sha256:ce71d2f8c7983ef75a756e568317bf54bc531dc3ad7e66a128eae0d51623d8a3"}, + {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, + {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, ] [package.dependencies] @@ -998,30 +1014,30 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "jsonschema-specifications" -version = "2023.7.1" +version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema_specifications-2023.7.1-py3-none-any.whl", hash = "sha256:05adf340b659828a004220a9613be00fa3f223f2b82002e273dee62fd50524b1"}, - {file = "jsonschema_specifications-2023.7.1.tar.gz", hash = "sha256:c91a50404e88a1f6ba40636778e2ee08f6e24c5613fe4c53ac24578a5a7f72bb"}, + {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, + {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, ] [package.dependencies] importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -referencing = ">=0.28.0" +referencing = ">=0.31.0" [[package]] name = "jupyter-client" -version = "8.3.0" +version = "8.6.0" description = "Jupyter protocol implementation and client libraries" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.3.0-py3-none-any.whl", hash = "sha256:7441af0c0672edc5d28035e92ba5e32fadcfa8a4e608a434c228836a89df6158"}, - {file = "jupyter_client-8.3.0.tar.gz", hash = "sha256:3af69921fe99617be1670399a0b857ad67275eefcfa291e2c81a160b7b650f5f"}, + {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"}, + {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"}, ] [package.dependencies] @@ -1038,14 +1054,14 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt [[package]] name = "jupyter-core" -version = "5.3.1" +version = "5.7.1" description = "Jupyter core package. A base package on which Jupyter projects rely." category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, - {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, + {file = "jupyter_core-5.7.1-py3-none-any.whl", hash = "sha256:c65c82126453a723a2804aa52409930434598fd9d35091d63dfb919d2b765bb7"}, + {file = "jupyter_core-5.7.1.tar.gz", hash = "sha256:de61a9d7fc71240f688b2fb5ab659fbb56979458dc66a71decd098e03c79e218"}, ] [package.dependencies] @@ -1054,19 +1070,19 @@ pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_ traitlets = ">=5.3" [package.extras] -docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.7.0" +version = "0.9.0" description = "Jupyter Event System library" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.7.0-py3-none-any.whl", hash = "sha256:4753da434c13a37c3f3c89b500afa0c0a6241633441421f6adafe2fb2e2b924e"}, - {file = "jupyter_events-0.7.0.tar.gz", hash = "sha256:7be27f54b8388c03eefea123a4f79247c5b9381c49fb1cd48615ee191eb12615"}, + {file = "jupyter_events-0.9.0-py3-none-any.whl", hash = "sha256:d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf"}, + {file = "jupyter_events-0.9.0.tar.gz", hash = "sha256:81ad2e4bc710881ec274d31c6c50669d71bbaa5dd9d01e600b56faa85700d399"}, ] [package.dependencies] @@ -1085,14 +1101,14 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p [[package]] name = "jupyter-lsp" -version = "2.2.0" +version = "2.2.2" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter-lsp-2.2.0.tar.gz", hash = "sha256:8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1"}, - {file = "jupyter_lsp-2.2.0-py3-none-any.whl", hash = "sha256:9e06b8b4f7dd50300b70dd1a78c0c3b0c3d8fa68e0f2d8a5d1fbab62072aca3f"}, + {file = "jupyter-lsp-2.2.2.tar.gz", hash = "sha256:256d24620542ae4bba04a50fc1f6ffe208093a07d8e697fea0a8d1b8ca1b7e5b"}, + {file = "jupyter_lsp-2.2.2-py3-none-any.whl", hash = "sha256:3b95229e4168355a8c91928057c1621ac3510ba98b2a925e82ebd77f078b1aa5"}, ] [package.dependencies] @@ -1101,14 +1117,14 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.7.0" +version = "2.12.5" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.7.0-py3-none-any.whl", hash = "sha256:6a77912aff643e53fa14bdb2634884b52b784a4be77ce8e93f7283faed0f0849"}, - {file = "jupyter_server-2.7.0.tar.gz", hash = "sha256:36da0a266d31a41ac335a366c88933c17dfa5bb817a48f5c02c16d303bc9477f"}, + {file = "jupyter_server-2.12.5-py3-none-any.whl", hash = "sha256:184a0f82809a8522777cfb6b760ab6f4b1bb398664c5860a27cec696cb884923"}, + {file = "jupyter_server-2.12.5.tar.gz", hash = "sha256:0edb626c94baa22809be1323f9770cf1c00a952b17097592e40d03e6a3951689"}, ] [package.dependencies] @@ -1117,7 +1133,7 @@ argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=7.4.4" jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" -jupyter-events = ">=0.6.0" +jupyter-events = ">=0.9.0" jupyter-server-terminals = "*" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" @@ -1126,7 +1142,7 @@ packaging = "*" prometheus-client = "*" pywinpty = {version = "*", markers = "os_name == \"nt\""} pyzmq = ">=24" -send2trash = "*" +send2trash = ">=1.8.2" terminado = ">=0.8.3" tornado = ">=6.2.0" traitlets = ">=5.6.0" @@ -1138,14 +1154,14 @@ test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-sc [[package]] name = "jupyter-server-terminals" -version = "0.4.4" +version = "0.5.2" description = "A Jupyter Server Extension Providing Terminals." category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"}, - {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"}, + {file = "jupyter_server_terminals-0.5.2-py3-none-any.whl", hash = "sha256:1b80c12765da979513c42c90215481bbc39bd8ae7c0350b4f85bc3eb58d0fa80"}, + {file = "jupyter_server_terminals-0.5.2.tar.gz", hash = "sha256:396b5ccc0881e550bf0ee7012c6ef1b53edbde69e67cab1d56e89711b46052e8"}, ] [package.dependencies] @@ -1153,19 +1169,19 @@ pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} terminado = ">=0.8.3" [package.extras] -docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] -test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] [[package]] name = "jupyterlab" -version = "4.0.4" +version = "4.0.12" description = "JupyterLab computational environment" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.0.4-py3-none-any.whl", hash = "sha256:23eef35d22be8f2ad9b873ec41ceb2e8c3b0dc8ae740c0f973e2de09e587530f"}, - {file = "jupyterlab-4.0.4.tar.gz", hash = "sha256:049449a56d93202ed204e0e86f96f5a3447a08cfc09fb012fd239e178651cb34"}, + {file = "jupyterlab-4.0.12-py3-none-any.whl", hash = "sha256:53f132480e5f6564f4e20d1b5ed4e8b7945952a2decd5bdfa43760b1b536c99d"}, + {file = "jupyterlab-4.0.12.tar.gz", hash = "sha256:965d92efa82a538ed70ccb3968d9aabba788840da882e13d7b061780cdedc3b7"}, ] [package.dependencies] @@ -1185,33 +1201,33 @@ tornado = ">=6.2.0" traitlets = "*" [package.extras] -dev = ["black[jupyter] (==23.3.0)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.0.271)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8)", "sphinx-copybutton"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.1.6)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8,<7.2.0)", "sphinx-copybutton"] docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] [[package]] name = "jupyterlab-pygments" -version = "0.2.2" +version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, - {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, ] [[package]] name = "jupyterlab-server" -version = "2.24.0" +version = "2.25.2" description = "A set of server components for JupyterLab and JupyterLab like applications." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.24.0-py3-none-any.whl", hash = "sha256:5f077e142bb8dc9b843d960f940c513581bceca3793a0d80f9c67d9522c4e876"}, - {file = "jupyterlab_server-2.24.0.tar.gz", hash = "sha256:4e6f99e0a5579bbbc32e449c4dbb039561d4f1a7827d5733273ed56738f21f07"}, + {file = "jupyterlab_server-2.25.2-py3-none-any.whl", hash = "sha256:5b1798c9cc6a44f65c757de9f97fc06fc3d42535afbf47d2ace5e964ab447aaf"}, + {file = "jupyterlab_server-2.25.2.tar.gz", hash = "sha256:bd0ec7a99ebcedc8bcff939ef86e52c378e44c2707e053fcd81d046ce979ee63"}, ] [package.dependencies] @@ -1219,15 +1235,15 @@ babel = ">=2.10" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jinja2 = ">=3.0.3" json5 = ">=0.9.0" -jsonschema = ">=4.17.3" +jsonschema = ">=4.18.0" jupyter-server = ">=1.21,<3" packaging = ">=21.3" -requests = ">=2.28" +requests = ">=2.31" [package.extras] docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] -openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.7.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "locket" @@ -1262,62 +1278,72 @@ testing = ["coverage", "pyyaml"] [[package]] name = "markupsafe" -version = "2.1.3" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, - {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, - {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] @@ -1349,14 +1375,14 @@ files = [ [[package]] name = "mistune" -version = "3.0.1" +version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mistune-3.0.1-py3-none-any.whl", hash = "sha256:b9b3e438efbb57c62b5beb5e134dab664800bdf1284a7ee09e8b12b13eb1aac6"}, - {file = "mistune-3.0.1.tar.gz", hash = "sha256:e912116c13aa0944f9dc530db38eb88f6a77087ab128f49f84a48f4c05ea163c"}, + {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, + {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, ] [[package]] @@ -1405,14 +1431,14 @@ files = [ [[package]] name = "nbclient" -version = "0.8.0" +version = "0.9.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." category = "dev" optional = false python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"}, - {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"}, + {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"}, + {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"}, ] [package.dependencies] @@ -1428,14 +1454,14 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.7.3" +version = "7.14.2" description = "Converting Jupyter Notebooks" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.7.3-py3-none-any.whl", hash = "sha256:3022adadff3f86578a47fab7c2228bb3ca9c56a24345642a22f917f6168b48fc"}, - {file = "nbconvert-7.7.3.tar.gz", hash = "sha256:4a5996bf5f3cd16aa0431897ba1aa4c64842c2079f434b3dc6b8c4b252ef3355"}, + {file = "nbconvert-7.14.2-py3-none-any.whl", hash = "sha256:db28590cef90f7faf2ebbc71acd402cbecf13d29176df728c0a9025a49345ea1"}, + {file = "nbconvert-7.14.2.tar.gz", hash = "sha256:a7f8808fd4e082431673ac538400218dd45efd076fbeb07cc6e5aa5a3a4e949e"}, ] [package.dependencies] @@ -1462,7 +1488,7 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest"] webpdf = ["playwright"] [[package]] @@ -1489,51 +1515,51 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nest-asyncio" -version = "1.5.7" +version = "1.6.0" description = "Patch asyncio to allow nested event loops" category = "dev" optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.5.7-py3-none-any.whl", hash = "sha256:5301c82941b550b3123a1ea772ba9a1c80bad3a182be8c1a5ae6ad3be57a9657"}, - {file = "nest_asyncio-1.5.7.tar.gz", hash = "sha256:6a80f7b98f24d9083ed24608977c09dd608d83f91cccc24c9d2cba6d10e01c10"}, + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, ] [[package]] name = "netcdf4" -version = "1.6.4" +version = "1.6.5" description = "Provides an object-oriented python interface to the netCDF version 4 library" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "netCDF4-1.6.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59eba11eac34f9c7bd209121b26954c71ff69a2eb2838d2ac339b39ea60a95c0"}, - {file = "netCDF4-1.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:541286ce7318033b326da2e4325f08037b561887d5fd25d12c2b0cad74eb1edc"}, - {file = "netCDF4-1.6.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6620f7962daff02df2fbcbc8f7af53edf21512bc7f5697d846d424a094f96345"}, - {file = "netCDF4-1.6.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2dcf74f7b15ae6105c09df93af22ad61366a288fbb329fdbe3b9606c56c788f5"}, - {file = "netCDF4-1.6.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b368fc185cac7d8890a8cf1016488cd252a144008144d06a615925b09bf8d67e"}, - {file = "netCDF4-1.6.4-cp310-cp310-win_amd64.whl", hash = "sha256:eb19c51fa090b562be4f87ff736b629ffafc03d7bf1fa10f623f957d49417b4f"}, - {file = "netCDF4-1.6.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a7efab50d5a4da6227244e544a74f676b732ccdff2b8a4678174c15a3f8dff"}, - {file = "netCDF4-1.6.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f9b7ad3f66d50970fa1bd5509c52bb8a99740c8a79fafa83bfd0bc7348b6ab5a"}, - {file = "netCDF4-1.6.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c5cad50d4e6e5a3b35c76862c58393ddf93baa44de98b6e040ac21896145881"}, - {file = "netCDF4-1.6.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c2395c53a37717b1047650e1c9de68a3d69542bb25df5c594e1e14e9480bb18"}, - {file = "netCDF4-1.6.4-cp311-cp311-win_amd64.whl", hash = "sha256:c85f77599c61a88d512d6536e181ff1c01fd16f4740367e4f8e5cacb36500293"}, - {file = "netCDF4-1.6.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3e3efefdb9fc936503e89ff5b40b33f2c96527bae1e9672a2d369c5f7cb30bbd"}, - {file = "netCDF4-1.6.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74a3e720a9764d13d669763c1f3c73f3f719ef181dccecad062440eea03f069e"}, - {file = "netCDF4-1.6.4-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c67bc7fafced3f9370fdef6ce7abe235a771bed7ebe534f4ba3c84d9689dae23"}, - {file = "netCDF4-1.6.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b599a3b5c0d0e3affa70d7954c2b0c4ab7d7bdb52b0e413c811da9725982de33"}, - {file = "netCDF4-1.6.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b21d47c23edd02ff83160c8ccc1e4d4946a91d454b246e7f63d7a6d63901707c"}, - {file = "netCDF4-1.6.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8eff69acdf250ebaf817cc9bbfb457d241f92f989c7f9cca33eb29985c0f9797"}, - {file = "netCDF4-1.6.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4d6bcdf27fd611eaec891f4281caf5c56bbad6f5fc245ce3e6dd2dc4fc3fad56"}, - {file = "netCDF4-1.6.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99a3d476242d489da26f71e318ddd314723ca766f4db11270863a764b107bc3"}, - {file = "netCDF4-1.6.4-cp38-cp38-win_amd64.whl", hash = "sha256:422077c7303cb17cbe8b9ace965cafda1f9d4c9b035809fc5c87091e7ff4d606"}, - {file = "netCDF4-1.6.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0050e49889c357ae0a73f96e2b9988f250396689b78142de88a39ac8b1e702aa"}, - {file = "netCDF4-1.6.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a2cd2e2a9da98f1838e1edfeb011b840a434e04d156052b936ffe49f5298126"}, - {file = "netCDF4-1.6.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:695cd0a40df49b4218350686c44e13b3a4671e53ee33faf7439a89940cbccc68"}, - {file = "netCDF4-1.6.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e582e6e41b27fc3a3296239afe065941bda60118d585df0ad41603f6f962888e"}, - {file = "netCDF4-1.6.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7b4ab3f0cd28a6685031e8b9be00c3047b4256da576c9de540440d013a31cea"}, - {file = "netCDF4-1.6.4-cp39-cp39-win_amd64.whl", hash = "sha256:1a950b3d8fcffca05e371a4cb64dc76580375588d1fca43b788192f409108ebe"}, - {file = "netCDF4-1.6.4.tar.gz", hash = "sha256:66da6542cbc7a6045cd1d979397dfd5a3f6c880c76d52b8f98bb108c82ee8c6e"}, + {file = "netCDF4-1.6.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d23b97cbde2bf413fadc4697c5c255a0436511c02f811e127e0fb12f5b882a4c"}, + {file = "netCDF4-1.6.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e5edfed673005f47f8d2fbea9c72c382b085dd358ac3c20ca743a563ed7b90e"}, + {file = "netCDF4-1.6.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10d2ac9ae1308ca837d86c6dc304ec455a85bdba0f2175e222844a54589168dc"}, + {file = "netCDF4-1.6.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a63a2be2f80977ac23bb0aa736c565011fd4639097ce0922e01b0dc38015df2"}, + {file = "netCDF4-1.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aaceea2097d292bad398d9f9b4fe403efa7b1568fcfa6faba9b67b1630027f9"}, + {file = "netCDF4-1.6.5-cp310-cp310-win_amd64.whl", hash = "sha256:111357d9e12eb79e8d58bfd91bc6b230d35b17a0ebd8c546d17416e8ceebea49"}, + {file = "netCDF4-1.6.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c5fede0b34c0a02a1b9e84116bfb3fcd2f80124a651d4836e72b785d10e2f15"}, + {file = "netCDF4-1.6.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3de5512b9270aa6472e4f3aa2bf895a7364c1d4f8667ce3b82e8232197d4fec8"}, + {file = "netCDF4-1.6.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b20971a164431f6eca1d24df8aa153db15c2c1b9630e83ccc5cf004e8ac8151d"}, + {file = "netCDF4-1.6.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad1101d538077152b866782e44458356981526bf2ea9cc07930bf28b589c82a7"}, + {file = "netCDF4-1.6.5-cp311-cp311-win_amd64.whl", hash = "sha256:de4dc973fae9e2bbdf42e094125e423a4c25393172a61958314969b055a38889"}, + {file = "netCDF4-1.6.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:19e16c63cdd7c0dbffe284a4a65f226ba1026f476f35cbedd099b4792b395f69"}, + {file = "netCDF4-1.6.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b994afce2ca4073f6b757385a6c0ffec25ecaae2b8821535b303c7cdbf6de42b"}, + {file = "netCDF4-1.6.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0187646e3348e7a8cd654617dda65517df138042c94c2fcc6682ff7c8c6654dc"}, + {file = "netCDF4-1.6.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1ab5dabac27d25fcc82c52dc29a74a6585e865208cce35f4e285df83d3df0b2"}, + {file = "netCDF4-1.6.5-cp312-cp312-win_amd64.whl", hash = "sha256:081e9043ac6160989f60570928eabe803c88ce7df1d3f79f2345dc48f68ef752"}, + {file = "netCDF4-1.6.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b47b22dda5b25ba6291f97634d7ac67b0a843f8ae5c9d9d5813c15364f66d0a"}, + {file = "netCDF4-1.6.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4609dd62d14798c9524327287091875449d68588c128abb768fc0c76c4a28165"}, + {file = "netCDF4-1.6.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2455e9d35fde067e6a6bdc24aa9d44962235a071cec49904d1589e298c23dcd3"}, + {file = "netCDF4-1.6.5-cp38-cp38-win_amd64.whl", hash = "sha256:2c210794d96431d92b5992e46ad8a9f97237bf6d6956f8816978a03dc0fa18c3"}, + {file = "netCDF4-1.6.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:18255b8b283d32d3900092f29c67e53aa25bd8f0dfe7adde59fe782d865a381c"}, + {file = "netCDF4-1.6.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:53050562bac84738bbd121fbbee9593d074579f5d6fdaafcb981abeb5c964225"}, + {file = "netCDF4-1.6.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:938c062382406bca9198b16adddd87c09b00521766b138cdfd11c95546eefeb8"}, + {file = "netCDF4-1.6.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a8300451d7542d3c4ff1dcccf5fb1c7d44bdd1dc08ec77dab04416caf13cb1f"}, + {file = "netCDF4-1.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a27db2701feef31201c9b20b04a9579196edc20dfc339ca423c7b81e462d6e14"}, + {file = "netCDF4-1.6.5-cp39-cp39-win_amd64.whl", hash = "sha256:574d7742ab321e5f9f33b5b1296c4ad4e5c469152c17d4fc453d5070e413e596"}, + {file = "netCDF4-1.6.5.tar.gz", hash = "sha256:824881d0aacfde5bd982d6adedd8574259c85553781e7b83e0ce82b890bfa0ef"}, ] [package.dependencies] @@ -1541,6 +1567,9 @@ certifi = "*" cftime = "*" numpy = "*" +[package.extras] +tests = ["Cython", "packaging", "pytest"] + [[package]] name = "notebook-shim" version = "0.2.3" @@ -1599,26 +1628,26 @@ files = [ [[package]] name = "overrides" -version = "7.3.1" +version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "overrides-7.3.1-py3-none-any.whl", hash = "sha256:6187d8710a935d09b0bcef8238301d6ee2569d2ac1ae0ec39a8c7924e27f58ca"}, - {file = "overrides-7.3.1.tar.gz", hash = "sha256:8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2"}, + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, ] [[package]] name = "packaging" -version = "23.1" +version = "23.2" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, + {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, + {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] [[package]] @@ -1691,14 +1720,14 @@ xml = ["lxml (>=4.6.3)"] [[package]] name = "pandocfilters" -version = "1.5.0" +version = "1.5.1" description = "Utilities for writing pandoc filters in python" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, - {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, ] [[package]] @@ -1719,14 +1748,14 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "partd" -version = "1.4.0" +version = "1.4.1" description = "Appendable key-value storage" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "partd-1.4.0-py3-none-any.whl", hash = "sha256:7a63529348cf0dff14b986db641cd1b83c16b5cb9fc647c2851779db03282ef8"}, - {file = "partd-1.4.0.tar.gz", hash = "sha256:aa0ff35dbbcc807ae374db56332f4c1b39b46f67bf2975f5151e0b4186aed0d5"}, + {file = "partd-1.4.1-py3-none-any.whl", hash = "sha256:27e766663d36c161e2827aa3e28541c992f0b9527d3cca047e13fb3acdb989e6"}, + {file = "partd-1.4.1.tar.gz", hash = "sha256:56c25dd49e6fea5727e731203c466c6e092f308d8f0024e199d02f6aa2167f67"}, ] [package.dependencies] @@ -1738,26 +1767,26 @@ complete = ["blosc", "numpy (>=1.9.0)", "pandas (>=0.19.0)", "pyzmq"] [[package]] name = "pathspec" -version = "0.11.2" +version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pathspec-0.11.2-py3-none-any.whl", hash = "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20"}, - {file = "pathspec-0.11.2.tar.gz", hash = "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3"}, + {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, + {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." category = "dev" optional = false python-versions = "*" files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] [package.dependencies] @@ -1789,30 +1818,30 @@ files = [ [[package]] name = "platformdirs" -version = "3.10.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "platformdirs-3.10.0-py3-none-any.whl", hash = "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d"}, - {file = "platformdirs-3.10.0.tar.gz", hash = "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" -version = "1.2.0" +version = "1.4.0" description = "plugin and hook calling mechanisms for python" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, + {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, ] [package.extras] @@ -1821,14 +1850,14 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "prometheus-client" -version = "0.17.1" +version = "0.19.0" description = "Python client for the Prometheus monitoring system." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "prometheus_client-0.17.1-py3-none-any.whl", hash = "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101"}, - {file = "prometheus_client-0.17.1.tar.gz", hash = "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091"}, + {file = "prometheus_client-0.19.0-py3-none-any.whl", hash = "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92"}, + {file = "prometheus_client-0.19.0.tar.gz", hash = "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1"}, ] [package.extras] @@ -1836,14 +1865,14 @@ twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.39" +version = "3.0.43" description = "Library for building powerful interactive command lines in Python" category = "dev" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.39-py3-none-any.whl", hash = "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88"}, - {file = "prompt_toolkit-3.0.39.tar.gz", hash = "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac"}, + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, ] [package.dependencies] @@ -1851,26 +1880,28 @@ wcwidth = "*" [[package]] name = "psutil" -version = "5.9.5" +version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ - {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, - {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, - {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, - {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, - {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, - {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, - {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, - {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, - {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, - {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, - {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, + {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, + {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, + {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, + {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, + {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, + {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, + {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, + {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, + {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, + {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, + {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, + {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, + {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, ] [package.extras] @@ -1917,29 +1948,30 @@ files = [ [[package]] name = "pygments" -version = "2.15.1" +version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, - {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pytest" -version = "7.4.0" +version = "8.0.0" description = "pytest: simple powerful testing with Python" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-7.4.0-py3-none-any.whl", hash = "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32"}, - {file = "pytest-7.4.0.tar.gz", hash = "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a"}, + {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, + {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, ] [package.dependencies] @@ -1947,7 +1979,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<2.0" +pluggy = ">=1.3.0,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] @@ -1982,14 +2014,14 @@ files = [ [[package]] name = "pytz" -version = "2023.3" +version = "2024.1" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, - {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -2018,17 +2050,18 @@ files = [ [[package]] name = "pywinpty" -version = "2.0.11" +version = "2.0.12" description = "Pseudo terminal support for Windows from Python." category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "pywinpty-2.0.11-cp310-none-win_amd64.whl", hash = "sha256:452f10ac9ff8ab9151aa8cea9e491a9612a12250b1899278c6a56bc184afb47f"}, - {file = "pywinpty-2.0.11-cp311-none-win_amd64.whl", hash = "sha256:6701867d42aec1239bc0fedf49a336570eb60eb886e81763db77ea2b6c533cc3"}, - {file = "pywinpty-2.0.11-cp38-none-win_amd64.whl", hash = "sha256:0ffd287751ad871141dc9724de70ea21f7fc2ff1af50861e0d232cf70739d8c4"}, - {file = "pywinpty-2.0.11-cp39-none-win_amd64.whl", hash = "sha256:e4e7f023c28ca7aa8e1313e53ba80a4d10171fe27857b7e02f99882dfe3e8638"}, - {file = "pywinpty-2.0.11.tar.gz", hash = "sha256:e244cffe29a894876e2cd251306efd0d8d64abd5ada0a46150a4a71c0b9ad5c5"}, + {file = "pywinpty-2.0.12-cp310-none-win_amd64.whl", hash = "sha256:21319cd1d7c8844fb2c970fb3a55a3db5543f112ff9cfcd623746b9c47501575"}, + {file = "pywinpty-2.0.12-cp311-none-win_amd64.whl", hash = "sha256:853985a8f48f4731a716653170cd735da36ffbdc79dcb4c7b7140bce11d8c722"}, + {file = "pywinpty-2.0.12-cp312-none-win_amd64.whl", hash = "sha256:1617b729999eb6713590e17665052b1a6ae0ad76ee31e60b444147c5b6a35dca"}, + {file = "pywinpty-2.0.12-cp38-none-win_amd64.whl", hash = "sha256:189380469ca143d06e19e19ff3fba0fcefe8b4a8cc942140a6b863aed7eebb2d"}, + {file = "pywinpty-2.0.12-cp39-none-win_amd64.whl", hash = "sha256:7520575b6546db23e693cbd865db2764097bd6d4ef5dc18c92555904cd62c3d4"}, + {file = "pywinpty-2.0.12.tar.gz", hash = "sha256:8197de460ae8ebb7f5d1701dfa1b5df45b157bb832e92acba316305e18ca00dd"}, ] [[package]] @@ -2098,89 +2131,105 @@ pyyaml = "*" [[package]] name = "pyzmq" -version = "25.1.0" +version = "25.1.2" description = "Python bindings for 0MQ" category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, - {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, - {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, - {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, - {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, - {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, - {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, - {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, - {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, - {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, - {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, - {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, - {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, - {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, - {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, - {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, - {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, - {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, - {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, - {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, - {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, - {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, - {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, - {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, - {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, - {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, - {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, - {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, - {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, - {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, - {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, - {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, - {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, + {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, + {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49151b0efece79f6a79d41a461d78535356136ee70084a1c22532fc6383f4ad0"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9a5f194cf730f2b24d6af1f833c14c10f41023da46a7f736f48b6d35061e76e"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faf79a302f834d9e8304fafdc11d0d042266667ac45209afa57e5efc998e3872"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f51a7b4ead28d3fca8dda53216314a553b0f7a91ee8fc46a72b402a78c3e43d"}, + {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0ddd6d71d4ef17ba5a87becf7ddf01b371eaba553c603477679ae817a8d84d75"}, + {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:246747b88917e4867e2367b005fc8eefbb4a54b7db363d6c92f89d69abfff4b6"}, + {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:00c48ae2fd81e2a50c3485de1b9d5c7c57cd85dc8ec55683eac16846e57ac979"}, + {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a68d491fc20762b630e5db2191dd07ff89834086740f70e978bb2ef2668be08"}, + {file = "pyzmq-25.1.2-cp310-cp310-win32.whl", hash = "sha256:09dfe949e83087da88c4a76767df04b22304a682d6154de2c572625c62ad6886"}, + {file = "pyzmq-25.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:fa99973d2ed20417744fca0073390ad65ce225b546febb0580358e36aa90dba6"}, + {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:82544e0e2d0c1811482d37eef297020a040c32e0687c1f6fc23a75b75db8062c"}, + {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01171fc48542348cd1a360a4b6c3e7d8f46cdcf53a8d40f84db6707a6768acc1"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc69c96735ab501419c432110016329bf0dea8898ce16fab97c6d9106dc0b348"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e124e6b1dd3dfbeb695435dff0e383256655bb18082e094a8dd1f6293114642"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7598d2ba821caa37a0f9d54c25164a4fa351ce019d64d0b44b45540950458840"}, + {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d1299d7e964c13607efd148ca1f07dcbf27c3ab9e125d1d0ae1d580a1682399d"}, + {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4e6f689880d5ad87918430957297c975203a082d9a036cc426648fcbedae769b"}, + {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cc69949484171cc961e6ecd4a8911b9ce7a0d1f738fcae717177c231bf77437b"}, + {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9880078f683466b7f567b8624bfc16cad65077be046b6e8abb53bed4eeb82dd3"}, + {file = "pyzmq-25.1.2-cp311-cp311-win32.whl", hash = "sha256:4e5837af3e5aaa99a091302df5ee001149baff06ad22b722d34e30df5f0d9097"}, + {file = "pyzmq-25.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:25c2dbb97d38b5ac9fd15586e048ec5eb1e38f3d47fe7d92167b0c77bb3584e9"}, + {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:11e70516688190e9c2db14fcf93c04192b02d457b582a1f6190b154691b4c93a"}, + {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:313c3794d650d1fccaaab2df942af9f2c01d6217c846177cfcbc693c7410839e"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b3cbba2f47062b85fe0ef9de5b987612140a9ba3a9c6d2543c6dec9f7c2ab27"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc31baa0c32a2ca660784d5af3b9487e13b61b3032cb01a115fce6588e1bed30"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c9087b109070c5ab0b383079fa1b5f797f8d43e9a66c07a4b8b8bdecfd88ee"}, + {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f8429b17cbb746c3e043cb986328da023657e79d5ed258b711c06a70c2ea7537"}, + {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5074adeacede5f810b7ef39607ee59d94e948b4fd954495bdb072f8c54558181"}, + {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7ae8f354b895cbd85212da245f1a5ad8159e7840e37d78b476bb4f4c3f32a9fe"}, + {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b264bf2cc96b5bc43ce0e852be995e400376bd87ceb363822e2cb1964fcdc737"}, + {file = "pyzmq-25.1.2-cp312-cp312-win32.whl", hash = "sha256:02bbc1a87b76e04fd780b45e7f695471ae6de747769e540da909173d50ff8e2d"}, + {file = "pyzmq-25.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:ced111c2e81506abd1dc142e6cd7b68dd53747b3b7ae5edbea4578c5eeff96b7"}, + {file = "pyzmq-25.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7b6d09a8962a91151f0976008eb7b29b433a560fde056ec7a3db9ec8f1075438"}, + {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967668420f36878a3c9ecb5ab33c9d0ff8d054f9c0233d995a6d25b0e95e1b6b"}, + {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5edac3f57c7ddaacdb4d40f6ef2f9e299471fc38d112f4bc6d60ab9365445fb0"}, + {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0dabfb10ef897f3b7e101cacba1437bd3a5032ee667b7ead32bbcdd1a8422fe7"}, + {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2c6441e0398c2baacfe5ba30c937d274cfc2dc5b55e82e3749e333aabffde561"}, + {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:16b726c1f6c2e7625706549f9dbe9b06004dfbec30dbed4bf50cbdfc73e5b32a"}, + {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a86c2dd76ef71a773e70551a07318b8e52379f58dafa7ae1e0a4be78efd1ff16"}, + {file = "pyzmq-25.1.2-cp36-cp36m-win32.whl", hash = "sha256:359f7f74b5d3c65dae137f33eb2bcfa7ad9ebefd1cab85c935f063f1dbb245cc"}, + {file = "pyzmq-25.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:55875492f820d0eb3417b51d96fea549cde77893ae3790fd25491c5754ea2f68"}, + {file = "pyzmq-25.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8c8a419dfb02e91b453615c69568442e897aaf77561ee0064d789705ff37a92"}, + {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8807c87fa893527ae8a524c15fc505d9950d5e856f03dae5921b5e9aa3b8783b"}, + {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5e319ed7d6b8f5fad9b76daa0a68497bc6f129858ad956331a5835785761e003"}, + {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3c53687dde4d9d473c587ae80cc328e5b102b517447456184b485587ebd18b62"}, + {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9add2e5b33d2cd765ad96d5eb734a5e795a0755f7fc49aa04f76d7ddda73fd70"}, + {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e690145a8c0c273c28d3b89d6fb32c45e0d9605b2293c10e650265bf5c11cfec"}, + {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00a06faa7165634f0cac1abb27e54d7a0b3b44eb9994530b8ec73cf52e15353b"}, + {file = "pyzmq-25.1.2-cp37-cp37m-win32.whl", hash = "sha256:0f97bc2f1f13cb16905a5f3e1fbdf100e712d841482b2237484360f8bc4cb3d7"}, + {file = "pyzmq-25.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6cc0020b74b2e410287e5942e1e10886ff81ac77789eb20bec13f7ae681f0fdd"}, + {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bef02cfcbded83473bdd86dd8d3729cd82b2e569b75844fb4ea08fee3c26ae41"}, + {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e10a4b5a4b1192d74853cc71a5e9fd022594573926c2a3a4802020360aa719d8"}, + {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8c5f80e578427d4695adac6fdf4370c14a2feafdc8cb35549c219b90652536ae"}, + {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5dde6751e857910c1339890f3524de74007958557593b9e7e8c5f01cd919f8a7"}, + {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea1608dd169da230a0ad602d5b1ebd39807ac96cae1845c3ceed39af08a5c6df"}, + {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0f513130c4c361201da9bc69df25a086487250e16b5571ead521b31ff6b02220"}, + {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:019744b99da30330798bb37df33549d59d380c78e516e3bab9c9b84f87a9592f"}, + {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e2713ef44be5d52dd8b8e2023d706bf66cb22072e97fc71b168e01d25192755"}, + {file = "pyzmq-25.1.2-cp38-cp38-win32.whl", hash = "sha256:07cd61a20a535524906595e09344505a9bd46f1da7a07e504b315d41cd42eb07"}, + {file = "pyzmq-25.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb7e49a17fb8c77d3119d41a4523e432eb0c6932187c37deb6fbb00cc3028088"}, + {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:94504ff66f278ab4b7e03e4cba7e7e400cb73bfa9d3d71f58d8972a8dc67e7a6"}, + {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd0d50bbf9dca1d0bdea219ae6b40f713a3fb477c06ca3714f208fd69e16fd8"}, + {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:004ff469d21e86f0ef0369717351073e0e577428e514c47c8480770d5e24a565"}, + {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c0b5ca88a8928147b7b1e2dfa09f3b6c256bc1135a1338536cbc9ea13d3b7add"}, + {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9a79f1d2495b167119d02be7448bfba57fad2a4207c4f68abc0bab4b92925b"}, + {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:518efd91c3d8ac9f9b4f7dd0e2b7b8bf1a4fe82a308009016b07eaa48681af82"}, + {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1ec23bd7b3a893ae676d0e54ad47d18064e6c5ae1fadc2f195143fb27373f7f6"}, + {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db36c27baed588a5a8346b971477b718fdc66cf5b80cbfbd914b4d6d355e44e2"}, + {file = "pyzmq-25.1.2-cp39-cp39-win32.whl", hash = "sha256:39b1067f13aba39d794a24761e385e2eddc26295826530a8c7b6c6c341584289"}, + {file = "pyzmq-25.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:8e9f3fabc445d0ce320ea2c59a75fe3ea591fdbdeebec5db6de530dd4b09412e"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8c1d566344aee826b74e472e16edae0a02e2a044f14f7c24e123002dcff1c05"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759cfd391a0996345ba94b6a5110fca9c557ad4166d86a6e81ea526c376a01e8"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c61e346ac34b74028ede1c6b4bcecf649d69b707b3ff9dc0fab453821b04d1e"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb8fc1f8d69b411b8ec0b5f1ffbcaf14c1db95b6bccea21d83610987435f1a4"}, + {file = "pyzmq-25.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3c00c9b7d1ca8165c610437ca0c92e7b5607b2f9076f4eb4b095c85d6e680a1d"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:df0c7a16ebb94452d2909b9a7b3337940e9a87a824c4fc1c7c36bb4404cb0cde"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45999e7f7ed5c390f2e87ece7f6c56bf979fb213550229e711e45ecc7d42ccb8"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac170e9e048b40c605358667aca3d94e98f604a18c44bdb4c102e67070f3ac9b"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b604734bec94f05f81b360a272fc824334267426ae9905ff32dc2be433ab96"}, + {file = "pyzmq-25.1.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a793ac733e3d895d96f865f1806f160696422554e46d30105807fdc9841b9f7d"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0806175f2ae5ad4b835ecd87f5f85583316b69f17e97786f7443baaf54b9bb98"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ef12e259e7bc317c7597d4f6ef59b97b913e162d83b421dd0db3d6410f17a244"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea253b368eb41116011add00f8d5726762320b1bda892f744c91997b65754d73"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b9b1f2ad6498445a941d9a4fee096d387fee436e45cc660e72e768d3d8ee611"}, + {file = "pyzmq-25.1.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8b14c75979ce932c53b79976a395cb2a8cd3aaf14aef75e8c2cb55a330b9b49d"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:889370d5174a741a62566c003ee8ddba4b04c3f09a97b8000092b7ca83ec9c49"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a18fff090441a40ffda8a7f4f18f03dc56ae73f148f1832e109f9bffa85df15"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99a6b36f95c98839ad98f8c553d8507644c880cf1e0a57fe5e3a3f3969040882"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4345c9a27f4310afbb9c01750e9461ff33d6fb74cd2456b107525bbeebcb5be3"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3516e0b6224cf6e43e341d56da15fd33bdc37fa0c06af4f029f7d7dfceceabbc"}, + {file = "pyzmq-25.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:146b9b1f29ead41255387fb07be56dc29639262c0f7344f570eecdcd8d683314"}, + {file = "pyzmq-25.1.2.tar.gz", hash = "sha256:93f1aa311e8bb912e34f004cf186407a4e90eec4f0ecc0efd26056bf7eda0226"}, ] [package.dependencies] @@ -2188,14 +2237,14 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "referencing" -version = "0.30.1" +version = "0.33.0" description = "JSON Referencing + Python" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.30.1-py3-none-any.whl", hash = "sha256:185d4a29f001c6e8ae4dad3861e61282a81cb01b9f0ef70a15450c45c6513a0d"}, - {file = "referencing-0.30.1.tar.gz", hash = "sha256:9370c77ceefd39510d70948bbe7375ce2d0125b9c11fd380671d4de959a8e3ce"}, + {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, + {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, ] [package.dependencies] @@ -2253,109 +2302,111 @@ files = [ [[package]] name = "rpds-py" -version = "0.9.2" +version = "0.17.1" description = "Python bindings to Rust's persistent data structures (rpds)" category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.9.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:ab6919a09c055c9b092798ce18c6c4adf49d24d4d9e43a92b257e3f2548231e7"}, - {file = "rpds_py-0.9.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d55777a80f78dd09410bd84ff8c95ee05519f41113b2df90a69622f5540c4f8b"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a216b26e5af0a8e265d4efd65d3bcec5fba6b26909014effe20cd302fd1138fa"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:29cd8bfb2d716366a035913ced99188a79b623a3512292963d84d3e06e63b496"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44659b1f326214950a8204a248ca6199535e73a694be8d3e0e869f820767f12f"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:745f5a43fdd7d6d25a53ab1a99979e7f8ea419dfefebcab0a5a1e9095490ee5e"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a987578ac5214f18b99d1f2a3851cba5b09f4a689818a106c23dbad0dfeb760f"}, - {file = "rpds_py-0.9.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf4151acb541b6e895354f6ff9ac06995ad9e4175cbc6d30aaed08856558201f"}, - {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:03421628f0dc10a4119d714a17f646e2837126a25ac7a256bdf7c3943400f67f"}, - {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:13b602dc3e8dff3063734f02dcf05111e887f301fdda74151a93dbbc249930fe"}, - {file = "rpds_py-0.9.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fae5cb554b604b3f9e2c608241b5d8d303e410d7dfb6d397c335f983495ce7f6"}, - {file = "rpds_py-0.9.2-cp310-none-win32.whl", hash = "sha256:47c5f58a8e0c2c920cc7783113df2fc4ff12bf3a411d985012f145e9242a2764"}, - {file = "rpds_py-0.9.2-cp310-none-win_amd64.whl", hash = "sha256:4ea6b73c22d8182dff91155af018b11aac9ff7eca085750455c5990cb1cfae6e"}, - {file = "rpds_py-0.9.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:e564d2238512c5ef5e9d79338ab77f1cbbda6c2d541ad41b2af445fb200385e3"}, - {file = "rpds_py-0.9.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f411330a6376fb50e5b7a3e66894e4a39e60ca2e17dce258d53768fea06a37bd"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e7521f5af0233e89939ad626b15278c71b69dc1dfccaa7b97bd4cdf96536bb7"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8d3335c03100a073883857e91db9f2e0ef8a1cf42dc0369cbb9151c149dbbc1b"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d25b1c1096ef0447355f7293fbe9ad740f7c47ae032c2884113f8e87660d8f6e"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6a5d3fbd02efd9cf6a8ffc2f17b53a33542f6b154e88dd7b42ef4a4c0700fdad"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5934e2833afeaf36bd1eadb57256239785f5af0220ed8d21c2896ec4d3a765f"}, - {file = "rpds_py-0.9.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:095b460e117685867d45548fbd8598a8d9999227e9061ee7f012d9d264e6048d"}, - {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91378d9f4151adc223d584489591dbb79f78814c0734a7c3bfa9c9e09978121c"}, - {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:24a81c177379300220e907e9b864107614b144f6c2a15ed5c3450e19cf536fae"}, - {file = "rpds_py-0.9.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:de0b6eceb46141984671802d412568d22c6bacc9b230174f9e55fc72ef4f57de"}, - {file = "rpds_py-0.9.2-cp311-none-win32.whl", hash = "sha256:700375326ed641f3d9d32060a91513ad668bcb7e2cffb18415c399acb25de2ab"}, - {file = "rpds_py-0.9.2-cp311-none-win_amd64.whl", hash = "sha256:0766babfcf941db8607bdaf82569ec38107dbb03c7f0b72604a0b346b6eb3298"}, - {file = "rpds_py-0.9.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:b1440c291db3f98a914e1afd9d6541e8fc60b4c3aab1a9008d03da4651e67386"}, - {file = "rpds_py-0.9.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0f2996fbac8e0b77fd67102becb9229986396e051f33dbceada3debaacc7033f"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f30d205755566a25f2ae0382944fcae2f350500ae4df4e795efa9e850821d82"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:159fba751a1e6b1c69244e23ba6c28f879a8758a3e992ed056d86d74a194a0f3"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1f044792e1adcea82468a72310c66a7f08728d72a244730d14880cd1dabe36b"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9251eb8aa82e6cf88510530b29eef4fac825a2b709baf5b94a6094894f252387"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01899794b654e616c8625b194ddd1e5b51ef5b60ed61baa7a2d9c2ad7b2a4238"}, - {file = "rpds_py-0.9.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0c43f8ae8f6be1d605b0465671124aa8d6a0e40f1fb81dcea28b7e3d87ca1e1"}, - {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:207f57c402d1f8712618f737356e4b6f35253b6d20a324d9a47cb9f38ee43a6b"}, - {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b52e7c5ae35b00566d244ffefba0f46bb6bec749a50412acf42b1c3f402e2c90"}, - {file = "rpds_py-0.9.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:978fa96dbb005d599ec4fd9ed301b1cc45f1a8f7982d4793faf20b404b56677d"}, - {file = "rpds_py-0.9.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:6aa8326a4a608e1c28da191edd7c924dff445251b94653988efb059b16577a4d"}, - {file = "rpds_py-0.9.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aad51239bee6bff6823bbbdc8ad85136c6125542bbc609e035ab98ca1e32a192"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd4dc3602370679c2dfb818d9c97b1137d4dd412230cfecd3c66a1bf388a196"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd9da77c6ec1f258387957b754f0df60766ac23ed698b61941ba9acccd3284d1"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:190ca6f55042ea4649ed19c9093a9be9d63cd8a97880106747d7147f88a49d18"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:876bf9ed62323bc7dcfc261dbc5572c996ef26fe6406b0ff985cbcf460fc8a4c"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa2818759aba55df50592ecbc95ebcdc99917fa7b55cc6796235b04193eb3c55"}, - {file = "rpds_py-0.9.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9ea4d00850ef1e917815e59b078ecb338f6a8efda23369677c54a5825dbebb55"}, - {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5855c85eb8b8a968a74dc7fb014c9166a05e7e7a8377fb91d78512900aadd13d"}, - {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:14c408e9d1a80dcb45c05a5149e5961aadb912fff42ca1dd9b68c0044904eb32"}, - {file = "rpds_py-0.9.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65a0583c43d9f22cb2130c7b110e695fff834fd5e832a776a107197e59a1898e"}, - {file = "rpds_py-0.9.2-cp38-none-win32.whl", hash = "sha256:71f2f7715935a61fa3e4ae91d91b67e571aeb5cb5d10331ab681256bda2ad920"}, - {file = "rpds_py-0.9.2-cp38-none-win_amd64.whl", hash = "sha256:674c704605092e3ebbbd13687b09c9f78c362a4bc710343efe37a91457123044"}, - {file = "rpds_py-0.9.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:07e2c54bef6838fa44c48dfbc8234e8e2466d851124b551fc4e07a1cfeb37260"}, - {file = "rpds_py-0.9.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f7fdf55283ad38c33e35e2855565361f4bf0abd02470b8ab28d499c663bc5d7c"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:890ba852c16ace6ed9f90e8670f2c1c178d96510a21b06d2fa12d8783a905193"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50025635ba8b629a86d9d5474e650da304cb46bbb4d18690532dd79341467846"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:517cbf6e67ae3623c5127206489d69eb2bdb27239a3c3cc559350ef52a3bbf0b"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0836d71ca19071090d524739420a61580f3f894618d10b666cf3d9a1688355b1"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c439fd54b2b9053717cca3de9583be6584b384d88d045f97d409f0ca867d80f"}, - {file = "rpds_py-0.9.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f68996a3b3dc9335037f82754f9cdbe3a95db42bde571d8c3be26cc6245f2324"}, - {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7d68dc8acded354c972116f59b5eb2e5864432948e098c19fe6994926d8e15c3"}, - {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f963c6b1218b96db85fc37a9f0851eaf8b9040aa46dec112611697a7023da535"}, - {file = "rpds_py-0.9.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a46859d7f947061b4010e554ccd1791467d1b1759f2dc2ec9055fa239f1bc26"}, - {file = "rpds_py-0.9.2-cp39-none-win32.whl", hash = "sha256:e07e5dbf8a83c66783a9fe2d4566968ea8c161199680e8ad38d53e075df5f0d0"}, - {file = "rpds_py-0.9.2-cp39-none-win_amd64.whl", hash = "sha256:682726178138ea45a0766907957b60f3a1bf3acdf212436be9733f28b6c5af3c"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:196cb208825a8b9c8fc360dc0f87993b8b260038615230242bf18ec84447c08d"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:c7671d45530fcb6d5e22fd40c97e1e1e01965fc298cbda523bb640f3d923b387"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83b32f0940adec65099f3b1c215ef7f1d025d13ff947975a055989cb7fd019a4"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f67da97f5b9eac838b6980fc6da268622e91f8960e083a34533ca710bec8611"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03975db5f103997904c37e804e5f340c8fdabbb5883f26ee50a255d664eed58c"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:987b06d1cdb28f88a42e4fb8a87f094e43f3c435ed8e486533aea0bf2e53d931"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c861a7e4aef15ff91233751619ce3a3d2b9e5877e0fcd76f9ea4f6847183aa16"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02938432352359805b6da099c9c95c8a0547fe4b274ce8f1a91677401bb9a45f"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:ef1f08f2a924837e112cba2953e15aacfccbbfcd773b4b9b4723f8f2ddded08e"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:35da5cc5cb37c04c4ee03128ad59b8c3941a1e5cd398d78c37f716f32a9b7f67"}, - {file = "rpds_py-0.9.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:141acb9d4ccc04e704e5992d35472f78c35af047fa0cfae2923835d153f091be"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:79f594919d2c1a0cc17d1988a6adaf9a2f000d2e1048f71f298b056b1018e872"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:a06418fe1155e72e16dddc68bb3780ae44cebb2912fbd8bb6ff9161de56e1798"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b2eb034c94b0b96d5eddb290b7b5198460e2d5d0c421751713953a9c4e47d10"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8b08605d248b974eb02f40bdcd1a35d3924c83a2a5e8f5d0fa5af852c4d960af"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a0805911caedfe2736935250be5008b261f10a729a303f676d3d5fea6900c96a"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab2299e3f92aa5417d5e16bb45bb4586171c1327568f638e8453c9f8d9e0f020"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c8d7594e38cf98d8a7df25b440f684b510cf4627fe038c297a87496d10a174f"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b9ec12ad5f0a4625db34db7e0005be2632c1013b253a4a60e8302ad4d462afd"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1fcdee18fea97238ed17ab6478c66b2095e4ae7177e35fb71fbe561a27adf620"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:933a7d5cd4b84f959aedeb84f2030f0a01d63ae6cf256629af3081cf3e3426e8"}, - {file = "rpds_py-0.9.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:686ba516e02db6d6f8c279d1641f7067ebb5dc58b1d0536c4aaebb7bf01cdc5d"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:0173c0444bec0a3d7d848eaeca2d8bd32a1b43f3d3fde6617aac3731fa4be05f"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d576c3ef8c7b2d560e301eb33891d1944d965a4d7a2eacb6332eee8a71827db6"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed89861ee8c8c47d6beb742a602f912b1bb64f598b1e2f3d758948721d44d468"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1054a08e818f8e18910f1bee731583fe8f899b0a0a5044c6e680ceea34f93876"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99e7c4bb27ff1aab90dcc3e9d37ee5af0231ed98d99cb6f5250de28889a3d502"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c545d9d14d47be716495076b659db179206e3fd997769bc01e2d550eeb685596"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9039a11bca3c41be5a58282ed81ae422fa680409022b996032a43badef2a3752"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fb39aca7a64ad0c9490adfa719dbeeb87d13be137ca189d2564e596f8ba32c07"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2d8b3b3a2ce0eaa00c5bbbb60b6713e94e7e0becab7b3db6c5c77f979e8ed1f1"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:99b1c16f732b3a9971406fbfe18468592c5a3529585a45a35adbc1389a529a03"}, - {file = "rpds_py-0.9.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c27ee01a6c3223025f4badd533bea5e87c988cb0ba2811b690395dfe16088cfe"}, - {file = "rpds_py-0.9.2.tar.gz", hash = "sha256:8d70e8f14900f2657c249ea4def963bed86a29b81f81f5b76b5a9215680de945"}, + {file = "rpds_py-0.17.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d"}, + {file = "rpds_py-0.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9"}, + {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394"}, + {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59"}, + {file = "rpds_py-0.17.1-cp310-none-win32.whl", hash = "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d"}, + {file = "rpds_py-0.17.1-cp310-none-win_amd64.whl", hash = "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b"}, + {file = "rpds_py-0.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8"}, + {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd"}, + {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea"}, + {file = "rpds_py-0.17.1-cp311-none-win32.whl", hash = "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518"}, + {file = "rpds_py-0.17.1-cp311-none-win_amd64.whl", hash = "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf"}, + {file = "rpds_py-0.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9"}, + {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253"}, + {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23"}, + {file = "rpds_py-0.17.1-cp312-none-win32.whl", hash = "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1"}, + {file = "rpds_py-0.17.1-cp312-none-win_amd64.whl", hash = "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d"}, + {file = "rpds_py-0.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae"}, + {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde"}, + {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6"}, + {file = "rpds_py-0.17.1-cp38-none-win32.whl", hash = "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a"}, + {file = "rpds_py-0.17.1-cp38-none-win_amd64.whl", hash = "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a"}, + {file = "rpds_py-0.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256"}, + {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772"}, + {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b"}, + {file = "rpds_py-0.17.1-cp39-none-win32.whl", hash = "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f"}, + {file = "rpds_py-0.17.1-cp39-none-win_amd64.whl", hash = "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6"}, + {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb"}, + {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296"}, + {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68"}, + {file = "rpds_py-0.17.1.tar.gz", hash = "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7"}, ] [[package]] @@ -2401,26 +2452,26 @@ files = [ [[package]] name = "soupsieve" -version = "2.4.1" +version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, - {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, + {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, + {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, ] [[package]] name = "stack-data" -version = "0.6.2" +version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" category = "dev" optional = false python-versions = "*" files = [ - {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, - {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, ] [package.dependencies] @@ -2433,14 +2484,14 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "terminado" -version = "0.17.1" +version = "0.18.0" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, - {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, + {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"}, + {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"}, ] [package.dependencies] @@ -2451,6 +2502,7 @@ tornado = ">=6.1.0" [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "tinycss2" @@ -2497,75 +2549,87 @@ files = [ [[package]] name = "toolz" -version = "0.12.0" +version = "0.12.1" description = "List processing tools and functional utilities" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.7" files = [ - {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, - {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, + {file = "toolz-0.12.1-py3-none-any.whl", hash = "sha256:d22731364c07d72eea0a0ad45bafb2c2937ab6fd38a3507bf55eae8744aa7d85"}, + {file = "toolz-0.12.1.tar.gz", hash = "sha256:ecca342664893f177a13dac0e6b41cbd8ac25a358e5f215316d43e2100224f4d"}, ] [[package]] name = "tornado" -version = "6.3.2" +version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." category = "dev" optional = false python-versions = ">= 3.8" files = [ - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, - {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, - {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, - {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, - {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, - {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, - {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, + {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, + {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, + {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, + {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, + {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, + {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, ] [[package]] name = "traitlets" -version = "5.9.0" +version = "5.14.1" description = "Traitlets Python configuration system" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, - {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, + {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, + {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "types-python-dateutil" +version = "2.8.19.20240106" +description = "Typing stubs for python-dateutil" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-python-dateutil-2.8.19.20240106.tar.gz", hash = "sha256:1f8db221c3b98e6ca02ea83a58371b22c374f42ae5bbdf186db9c9a76581459f"}, + {file = "types_python_dateutil-2.8.19.20240106-py3-none-any.whl", hash = "sha256:efbbdc54590d0f16152fa103c9879c7d4a00e82078f6e2cf01769042165acaa2"}, +] [[package]] name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" +version = "4.9.0" +description = "Backported and Experimental Type Hints for Python 3.8+" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] name = "tzdata" -version = "2023.3" +version = "2023.4" description = "Provider of IANA time zone data" category = "main" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, - {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, + {file = "tzdata-2023.4-py2.py3-none-any.whl", hash = "sha256:aa3ace4329eeacda5b7beb7ea08ece826c28d761cda36e747cfbf97996d39bf3"}, + {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, ] [[package]] @@ -2585,19 +2649,19 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake [[package]] name = "urllib3" -version = "2.0.4" +version = "2.2.0" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "urllib3-2.0.4-py3-none-any.whl", hash = "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4"}, - {file = "urllib3-2.0.4.tar.gz", hash = "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11"}, + {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"}, + {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -2643,14 +2707,14 @@ watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.6" +version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" category = "dev" optional = false python-versions = "*" files = [ - {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, - {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] [[package]] @@ -2683,18 +2747,18 @@ files = [ [[package]] name = "websocket-client" -version = "1.6.1" +version = "1.7.0" description = "WebSocket client for Python with low level API options" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "websocket-client-1.6.1.tar.gz", hash = "sha256:c951af98631d24f8df89ab1019fc365f2227c0892f12fd150e935607c79dd0dd"}, - {file = "websocket_client-1.6.1-py3-none-any.whl", hash = "sha256:f1f9f2ad5291f0225a49efad77abf9e700b6fef553900623060dad6e26503b9d"}, + {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, + {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, ] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] @@ -2748,18 +2812,18 @@ docs = ["IPython", "nbsphinx", "numpydoc", "sphinx", "sphinx-pangeo-theme", "sph [[package]] name = "zipp" -version = "3.16.2" +version = "3.17.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.16.2-py3-none-any.whl", hash = "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0"}, - {file = "zipp-3.16.2.tar.gz", hash = "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147"}, + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] [extras] @@ -2769,4 +2833,4 @@ namelist = ["f90nml"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "befd7686089553e784c73196965696e59f097a7fd4fb0ba2c398da8b371764b0" +content-hash = "719448256665ca29080d597b35dab42342d0c6000f23eb18391a84c92d571ffd" diff --git a/pyproject.toml b/pyproject.toml index 17a1b0b..e83d03d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,10 +36,10 @@ optional = true black = "^22.10.0" jupyterlab = ">=3.5.1" -[tool.poetry.group.doc] +[tool.poetry.group.docs] optional = true -[tool.poetry.group.doc.dependencies] +[tool.poetry.group.docs.dependencies] mkdocs = "^1.5.3" [build-system] From d0e12c20cab67805588e721bd68d1e7fb3299786 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 19:16:40 +0100 Subject: [PATCH 03/18] add readthedocs config file --- .readthedocs.yaml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .readthedocs.yaml diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..956e14c --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,30 @@ +# Read the Docs configuration file for MkDocs projects +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.10" + jobs: + post_create_environment: + # Install poetry + # https://python-poetry.org/docs/#installing-with-the-official-installer + - curl -sSL https://install.python-poetry.org | python3 - + # Tell poetry to not use a virtual environment + - poetry config virtualenvs.create false + post_install: + # Install dependencies with 'docs' dependency group + # https://python-poetry.org/docs/managing-dependencies/#dependency-groups + - poetry install --with docs + +mkdocs: + configuration: mkdocs.yml + +# Optionally declare the Python requirements required to build your docs +python: + install: + - requirements: docs/requirements.txt From ce10f3dd539ccc348a23d1037b326c6c19350414 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 19:21:14 +0100 Subject: [PATCH 04/18] ignore build doc --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0056e1d..f976920 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ docs/_build # Dev dev/ tmp/ +site/ From 28d81b7056672004bb6dfdb4d8bea475f3066657 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 21:50:11 +0100 Subject: [PATCH 05/18] add docs --- README.md | 87 - docs/Makefile | 20 - docs/api.md | 3 + docs/conf.py | 54 - docs/index.md | 77 + docs/index.rst | 20 - docs/make.bat | 35 - docs/new.md | 40 + docs/src_example/compute_metrics.ipynb | 504 + docs/src_example/open_process_files.ipynb | 10274 ++++++++++++++++ .../recombing_mesh_mask_domain_cfg.ipynb | 3284 +++++ mkdocs.yml | 26 + poetry.lock | 401 +- pyproject.toml | 4 +- 14 files changed, 14572 insertions(+), 257 deletions(-) delete mode 100644 docs/Makefile create mode 100644 docs/api.md delete mode 100644 docs/conf.py create mode 100644 docs/index.md delete mode 100644 docs/index.rst delete mode 100644 docs/make.bat create mode 100644 docs/new.md create mode 100644 docs/src_example/compute_metrics.ipynb create mode 100644 docs/src_example/open_process_files.ipynb create mode 100644 docs/src_example/recombing_mesh_mask_domain_cfg.ipynb create mode 100644 mkdocs.yml diff --git a/README.md b/README.md index a37292e..9bb9924 100644 --- a/README.md +++ b/README.md @@ -28,90 +28,3 @@ from xnemogcm import get_metrics import xgcm grid = xgcm.Grid(ds, metrics=get_metrics(ds), periodic=False) ``` - -See the [example](https://nbviewer.ipython.org/github/rcaneill/xnemogcm/blob/master/example/) -directory for some jupyter notebook examples. -xnemocgm is able to process xarray.Datasets (e.g. they could be retrieved from a remote server), -and can get information of the variables grid points with multiple options -(see [example/open_process_files.ipynb](https://nbviewer.ipython.org/github/rcaneill/xnemogcm/blob/master/example/open_process_files.ipynb). - -### Note - -`xnemogcm` is capable or recombining the domain_cfg and mesh_mask files output -by multiple processors, -the recombining tool from the NEMO toolbox is thus not needed here, see -the [example/recombing_mesh_mask_domain_cfg.ipynb](https://nbviewer.ipython.org/github/rcaneill/xnemogcm/blob/master/example/recombing_mesh_mask_domain_cfg.ipynb) - -## Installation - -Installation via pip: -```bash -pip3 install xnemogcm -``` - -Installation via conda: -```bash -conda install -c conda-forge xnemogcm -``` - -## Requirements for dev - -We use *poetry* to set up a virtual environment containing all -needed packages to run xnemogcm and the tests. -To install all the dependencies, type `poetry install --with test,dev` -after cloning the directory. This will create a new virtual environment. -Typing `poetry shell` in the package directory will activate the virtual environment. - -### About test data - -Test data are based on the GYRE configuration, and produced by another repository: -[rcaneill/xnemogcm_test_data](https://github.com/rcaneill/xnemogcm_test_data). -Testing is built in a way that it is quite easy to add other nemo version to test. - -### About notebooks examples - -Sources for the notebooks are located in `src_example`. This is where to add / modify the -examples. A github action is set to automatically build the notebook according to -the latest version of the code, and publish them to `example` when commiting to master branch. - - -## What's new - -### v0.4.2 (2023-08-07) -* Allow additional dimension names occurring when variables on inner grid are diagnosed, e.g. `x_grid_U_inner` or `x_grid_U`. -* Add coordinates into the DataArrays -* Add some standard names and units in domcfg - -### v0.4.1 (2023-03-29) -* Allow to open files if time bounds are missing -* Minor bug correction for nemo 3.6 -* Add nemo 3.6 and 4.2.0 test data -* Update code to support nemo 3.6 and 4.2.0 - -### v0.4.0 (2022-12-08) -* Optimize speed -* Add option to decode grid type from attributes -* Shift from pipenv and setupy.py to poetry -* Refactor data test to allow testing of multiple version of NEMO - -### v0.3.4 (2021-06-15) -* Adding some example -* Bug fixes -* Add option to compute extra scale factors - -### v0.3.2 - v0.3.3 (2021-05-05) -* By default adds the lat/lon/depth variables of domcfg as coordinates - -### v0.3.1 (2021-05-04) -* Minor bug fix when merging -* better squeezing of time in domcfg + nemo v3.6 compatibility - -### v0.3.0 (2021-04-13) -* Cleaning the backend -* Removing the saving options (that were useless and confusing) -* Minor bug fixes -* Tested with realistic regional configuration - -### v0.2.3 (2021-03-15) -* Support for surface only files -* Reshaping the data files for the tests (dev) diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index d4bb2cb..0000000 --- a/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/api.md b/docs/api.md new file mode 100644 index 0000000..658d9c9 --- /dev/null +++ b/docs/api.md @@ -0,0 +1,3 @@ +# Reference + +::: xnemogcm diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index b377961..0000000 --- a/docs/conf.py +++ /dev/null @@ -1,54 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) - - -# -- Project information ----------------------------------------------------- - -project = "xnemogcm" -copyright = "2020, Romain Caneill" -author = "Romain Caneill" - -# The full version, including alpha/beta/rc tags -release = "0.0.0" - - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "alabaster" - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..ef9d18e --- /dev/null +++ b/docs/index.md @@ -0,0 +1,77 @@ +# xnemogcm + +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.5724577.svg)](https://doi.org/10.5281/zenodo.5724577) +![ci](https://github.com/rcaneill/xnemogcm/actions/workflows/ci.yml/badge.svg) +![pypi](https://badge.fury.io/py/xnemogcm.svg) +![anaconda badge](https://anaconda.org/conda-forge/xnemogcm/badges/version.svg) + +Interface to open NEMO ocean global circulation model output dataset and create a xgcm grid. +NEMO 3.6, 4.0, and 4.2.0 are tested and supported. Any version between 3.6 and 4.2.0 should work, +but in case of trouble, [please open an issue](https://github.com/rcaneill/xnemogcm/issues). + +This repository is mirrored at https://gitlab.com/open-ocean/xnemogcm. +If you wish to contribute but don't have a github account, send me an email with your questions or comments: `romain [dot] caneill [at] ens-lyon [.] org` + +## Usage + +```python +from pathlib import Path +from xnemogcm import open_nemo_and_domain_cfg + +ds = open_nemo_and_domain_cfg( + nemo_files='/path/to/output/files', + domcfg_files='/path/to/domain_cfg/mesh_mask/files' +) + +# Interface with xgcm +from xnemogcm import get_metrics +import xgcm +grid = xgcm.Grid(ds, metrics=get_metrics(ds), periodic=False) +``` + +See the [example](https://nbviewer.ipython.org/github/rcaneill/xnemogcm/blob/master/example/) +directory for some jupyter notebook examples. +xnemocgm is able to process xarray.Datasets (e.g. they could be retrieved from a remote server), +and can get information of the variables grid points with multiple options +(see [example/open_process_files.ipynb](https://nbviewer.ipython.org/github/rcaneill/xnemogcm/blob/master/example/open_process_files.ipynb). + +### Note + +`xnemogcm` is capable or recombining the domain_cfg and mesh_mask files output +by multiple processors, +the recombining tool from the NEMO toolbox is thus not needed here, see +the [example/recombing_mesh_mask_domain_cfg.ipynb](https://nbviewer.ipython.org/github/rcaneill/xnemogcm/blob/master/example/recombing_mesh_mask_domain_cfg.ipynb) + +## Installation + +Installation via pip: +```bash +pip3 install xnemogcm +``` + +Installation via conda: +```bash +conda install -c conda-forge xnemogcm +``` + +## Requirements for dev + +We use *poetry* to set up a virtual environment containing all +needed packages to run xnemogcm and the tests. +To install all the dependencies, type `poetry install --with test,dev` +after cloning the directory. This will create a new virtual environment. +Typing `poetry shell` in the package directory will activate the virtual environment. + +### About test data + +Test data are based on the GYRE configuration, and produced by another repository: +[rcaneill/xnemogcm_test_data](https://github.com/rcaneill/xnemogcm_test_data). +Testing is built in a way that it is quite easy to add other nemo version to test. + +### About notebooks examples + +Sources for the notebooks are located in `src_example`. This is where to add / modify the +examples. A github action is set to automatically build the notebook according to +the latest version of the code, and publish them to `example` when commiting to master branch. + + diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 7572fd1..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. xnemogcm documentation master file, created by - sphinx-quickstart on Fri Feb 7 09:48:55 2020. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to xnemogcm's documentation! -==================================== - -.. toctree:: - :maxdepth: 2 - :caption: Contents: - - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 2119f51..0000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs/new.md b/docs/new.md new file mode 100644 index 0000000..6f28dea --- /dev/null +++ b/docs/new.md @@ -0,0 +1,40 @@ +# What's new + +### v0.4.2 (2023-08-07) +* Allow additional dimension names occurring when variables on inner grid are diagnosed, e.g. `x_grid_U_inner` or `x_grid_U`. +* Add coordinates into the DataArrays +* Add some standard names and units in domcfg + +### v0.4.1 (2023-03-29) +* Allow to open files if time bounds are missing +* Minor bug correction for nemo 3.6 +* Add nemo 3.6 and 4.2.0 test data +* Update code to support nemo 3.6 and 4.2.0 + +### v0.4.0 (2022-12-08) +* Optimize speed +* Add option to decode grid type from attributes +* Shift from pipenv and setupy.py to poetry +* Refactor data test to allow testing of multiple version of NEMO + +### v0.3.4 (2021-06-15) +* Adding some example +* Bug fixes +* Add option to compute extra scale factors + +### v0.3.2 - v0.3.3 (2021-05-05) +* By default adds the lat/lon/depth variables of domcfg as coordinates + +### v0.3.1 (2021-05-04) +* Minor bug fix when merging +* better squeezing of time in domcfg + nemo v3.6 compatibility + +### v0.3.0 (2021-04-13) +* Cleaning the backend +* Removing the saving options (that were useless and confusing) +* Minor bug fixes +* Tested with realistic regional configuration + +### v0.2.3 (2021-03-15) +* Support for surface only files +* Reshaping the data files for the tests (dev) diff --git a/docs/src_example/compute_metrics.ipynb b/docs/src_example/compute_metrics.ipynb new file mode 100644 index 0000000..0b0ab1e --- /dev/null +++ b/docs/src_example/compute_metrics.ipynb @@ -0,0 +1,504 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "9975d773-21bd-40e2-8795-38e70753bd05", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from xnemogcm import open_nemo_and_domain_cfg\n", + "from xnemogcm.metrics import compute_missing_metrics\n", + "from xnemogcm import __version__ as xnemogcm_version" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f4d1aa0c-e02a-4999-aaeb-88cdf14a8adf", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.4.1\n" + ] + } + ], + "source": [ + "print(xnemogcm_version)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3d452d15-99de-4dda-a18b-907cace8688a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "datadir = Path('../xnemogcm/test/data/4.2.0/open_and_merge/')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "51096969-6558-493c-95ae-e3b82b57cb02", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", + " x_f: 32, y_f: 22, z_f: 4)\n", + "Coordinates: (12/20)\n", + " * z_c (z_c) int64 0 1 2 3\n", + " time_centered (t) object dask.array\n", + " * t (t) object 0001-07-01 00:00:00\n", + " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", + " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", + " gdept_1d (z_c) float64 dask.array\n", + " ... ...\n", + " gphit (y_c, x_c) float64 dask.array\n", + " gphiu (y_c, x_f) float64 dask.array\n", + " gphiv (y_f, x_c) float64 dask.array\n", + " gphif (y_f, x_f) float64 dask.array\n", + " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", + " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", + "Dimensions without coordinates: axis_nbounds\n", + "Data variables: (12/43)\n", + " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", + " time_centered_bounds (t, axis_nbounds) object dask.array\n", + " t_bounds (t, axis_nbounds) object dask.array\n", + " toce (t, z_c, y_c, x_c) float32 dask.array\n", + " soce (t, z_c, y_c, x_c) float32 dask.array\n", + " e3t (t, z_c, y_c, x_c) float32 dask.array\n", + " ... ...\n", + " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", + " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", + " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", + " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", + " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", + " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", + "Attributes: (12/18)\n", + " Conventions: CF-1.6\n", + " timeStamp: 2023-Mar-28 10:42:16 GMT\n", + " name: NEMO dataset\n", + " description: Ocean grid variables, set on the proper positions\n", + " title: Ocean grid variables\n", + " DOMAIN_dimensions_ids: [1 2]\n", + " ... ...\n", + " Iperio: 0\n", + " Jperio: 0\n", + " NFold: 0\n", + " NFtype: -\n", + " VertCoord: zco\n", + " IsfCav: 0\n" + ] + } + ], + "source": [ + "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", + "print(ds)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "b4958894-950c-4150-a312-9b70a94c4387", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Help on function compute_missing_metrics in module xnemogcm.metrics:\n", + "\n", + "compute_missing_metrics(ds, all_scale_factors=['e3t', 'e3u', 'e3v', 'e3f', 'e3w', 'e3uw', 'e3vw', 'e3fw'], time_varying=True, periodic=False)\n", + " Add all possible scale factors to the dataset.\n", + " \n", + " For the moment, e3t (or e3t_0) at least needs to be present in the dataset\n", + " for the time_varying=True (time_varying=False) case.\n", + " If e3t_0 is not found (e.g. for nemo 3.6), it will raise a warning and use e3t_1d\n", + " (this will lead to wrong results if terrain-following coordinates are used).\n", + " \n", + " May have some boundary issues.\n", + " \n", + " Will add the metrics to the given dataset. To avoid this, use a ds.copy()\n", + " \n", + " Parameters\n", + " ----------\n", + " ds : xarray.Dataset\n", + " dataset containing the scale factors. Must be xgcm compatible (e.g. opened with xnemogcm)\n", + " all_scale_factors : list\n", + " list of the scale factors to compute (nothing is done for the scale factors\n", + " already present in *ds*)\n", + " Must be a sublist of: ['e3t', 'e3u', 'e3v', 'e3f', 'e3w', 'e3uw', 'e3vw', 'e3fw']\n", + " time_varying : bool\n", + " Whether to use the time varying scale factors (True) of the constant ones (False, 'e3x_0')\n", + " \n", + " Returns\n", + " -------\n", + " the new dataset with the scale factors added\n", + "\n" + ] + } + ], + "source": [ + "help(compute_missing_metrics)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "2f5c7a41-ad3d-43f0-baf0-6cfb4fbbb761", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", + " x_f: 32, y_f: 22, z_f: 4)\n", + "Coordinates: (12/20)\n", + " * z_c (z_c) int64 0 1 2 3\n", + " time_centered (t) object dask.array\n", + " * t (t) object 0001-07-01 00:00:00\n", + " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", + " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", + " gdept_1d (z_c) float64 dask.array\n", + " ... ...\n", + " gphit (y_c, x_c) float64 dask.array\n", + " gphiu (y_c, x_f) float64 dask.array\n", + " gphiv (y_f, x_c) float64 dask.array\n", + " gphif (y_f, x_f) float64 dask.array\n", + " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", + " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", + "Dimensions without coordinates: axis_nbounds\n", + "Data variables: (12/47)\n", + " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", + " time_centered_bounds (t, axis_nbounds) object dask.array\n", + " t_bounds (t, axis_nbounds) object dask.array\n", + " toce (t, z_c, y_c, x_c) float32 dask.array\n", + " soce (t, z_c, y_c, x_c) float32 dask.array\n", + " e3t (t, z_c, y_c, x_c) float32 dask.array\n", + " ... ...\n", + " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", + " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", + " e3f (t, z_c, y_f, x_f) float32 dask.array\n", + " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", + " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", + " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", + "Attributes: (12/18)\n", + " Conventions: CF-1.6\n", + " timeStamp: 2023-Mar-28 10:42:16 GMT\n", + " name: NEMO dataset\n", + " description: Ocean grid variables, set on the proper positions\n", + " title: Ocean grid variables\n", + " DOMAIN_dimensions_ids: [1 2]\n", + " ... ...\n", + " Iperio: 0\n", + " Jperio: 0\n", + " NFold: 0\n", + " NFtype: -\n", + " VertCoord: zco\n", + " IsfCav: 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", + " warn(\n" + ] + } + ], + "source": [ + "# If you just want to get a copy\n", + "print(\n", + " compute_missing_metrics(ds.copy())\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "613b9c7a-724b-4185-856e-70cb9e5364d2", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", + " warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", + " x_f: 32, y_f: 22, z_f: 4)\n", + "Coordinates: (12/20)\n", + " * z_c (z_c) int64 0 1 2 3\n", + " time_centered (t) object dask.array\n", + " * t (t) object 0001-07-01 00:00:00\n", + " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", + " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", + " gdept_1d (z_c) float64 dask.array\n", + " ... ...\n", + " gphit (y_c, x_c) float64 dask.array\n", + " gphiu (y_c, x_f) float64 dask.array\n", + " gphiv (y_f, x_c) float64 dask.array\n", + " gphif (y_f, x_f) float64 dask.array\n", + " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", + " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", + "Dimensions without coordinates: axis_nbounds\n", + "Data variables: (12/47)\n", + " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", + " time_centered_bounds (t, axis_nbounds) object dask.array\n", + " t_bounds (t, axis_nbounds) object dask.array\n", + " toce (t, z_c, y_c, x_c) float32 dask.array\n", + " soce (t, z_c, y_c, x_c) float32 dask.array\n", + " e3t (t, z_c, y_c, x_c) float32 dask.array\n", + " ... ...\n", + " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", + " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", + " e3f (t, z_c, y_f, x_f) float32 dask.array\n", + " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", + " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", + " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", + "Attributes: (12/18)\n", + " Conventions: CF-1.6\n", + " timeStamp: 2023-Mar-28 10:42:16 GMT\n", + " name: NEMO dataset\n", + " description: Ocean grid variables, set on the proper positions\n", + " title: Ocean grid variables\n", + " DOMAIN_dimensions_ids: [1 2]\n", + " ... ...\n", + " Iperio: 0\n", + " Jperio: 0\n", + " NFold: 0\n", + " NFtype: -\n", + " VertCoord: zco\n", + " IsfCav: 0\n" + ] + } + ], + "source": [ + "# If you just want to add the scale factor inplace\n", + "compute_missing_metrics(ds)\n", + "print(ds)" + ] + }, + { + "cell_type": "markdown", + "id": "651306d8-2f5c-4c64-9942-461e04756e0c", + "metadata": {}, + "source": [ + "It is also possible to compute the time constant metrics, i.e. the e3x_0" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "aa9bc4a4-8194-4cc5-9bcf-c7cd08bf7cd1", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", + " warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", + " x_f: 32, y_f: 22, z_f: 4)\n", + "Coordinates: (12/20)\n", + " * z_c (z_c) int64 0 1 2 3\n", + " time_centered (t) object dask.array\n", + " * t (t) object 0001-07-01 00:00:00\n", + " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", + " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", + " gdept_1d (z_c) float64 dask.array\n", + " ... ...\n", + " gphit (y_c, x_c) float64 dask.array\n", + " gphiu (y_c, x_f) float64 dask.array\n", + " gphiv (y_f, x_c) float64 dask.array\n", + " gphif (y_f, x_f) float64 dask.array\n", + " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", + " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", + "Dimensions without coordinates: axis_nbounds\n", + "Data variables: (12/48)\n", + " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", + " time_centered_bounds (t, axis_nbounds) object dask.array\n", + " t_bounds (t, axis_nbounds) object dask.array\n", + " toce (t, z_c, y_c, x_c) float32 dask.array\n", + " soce (t, z_c, y_c, x_c) float32 dask.array\n", + " e3t (t, z_c, y_c, x_c) float32 dask.array\n", + " ... ...\n", + " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", + " e3f (t, z_c, y_f, x_f) float32 dask.array\n", + " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", + " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", + " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", + " e3fw_0 (z_f, y_f, x_f) float64 dask.array\n", + "Attributes: (12/18)\n", + " Conventions: CF-1.6\n", + " timeStamp: 2023-Mar-28 10:42:16 GMT\n", + " name: NEMO dataset\n", + " description: Ocean grid variables, set on the proper positions\n", + " title: Ocean grid variables\n", + " DOMAIN_dimensions_ids: [1 2]\n", + " ... ...\n", + " Iperio: 0\n", + " Jperio: 0\n", + " NFold: 0\n", + " NFtype: -\n", + " VertCoord: zco\n", + " IsfCav: 0\n" + ] + } + ], + "source": [ + "print(\n", + " compute_missing_metrics(ds.copy(), time_varying=False)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "69e30349-cbf9-45cb-bd53-6b2123d6c9c2", + "metadata": {}, + "source": [ + "And it is possible to only compute a subset of the possible metrics" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b190b080-d2ad-444e-b25f-429ae51028fc", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", + " x_f: 32, y_f: 22, z_f: 4)\n", + "Coordinates: (12/20)\n", + " * z_c (z_c) int64 0 1 2 3\n", + " time_centered (t) object dask.array\n", + " * t (t) object 0001-07-01 00:00:00\n", + " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", + " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", + " gdept_1d (z_c) float64 dask.array\n", + " ... ...\n", + " gphit (y_c, x_c) float64 dask.array\n", + " gphiu (y_c, x_f) float64 dask.array\n", + " gphiv (y_f, x_c) float64 dask.array\n", + " gphif (y_f, x_f) float64 dask.array\n", + " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", + " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", + "Dimensions without coordinates: axis_nbounds\n", + "Data variables: (12/44)\n", + " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", + " time_centered_bounds (t, axis_nbounds) object dask.array\n", + " t_bounds (t, axis_nbounds) object dask.array\n", + " toce (t, z_c, y_c, x_c) float32 dask.array\n", + " soce (t, z_c, y_c, x_c) float32 dask.array\n", + " e3t (t, z_c, y_c, x_c) float32 dask.array\n", + " ... ...\n", + " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", + " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", + " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", + " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", + " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", + " e3u (t, z_c, y_c, x_f) float32 dask.array\n", + "Attributes: (12/18)\n", + " Conventions: CF-1.6\n", + " timeStamp: 2023-Mar-28 10:42:16 GMT\n", + " name: NEMO dataset\n", + " description: Ocean grid variables, set on the proper positions\n", + " title: Ocean grid variables\n", + " DOMAIN_dimensions_ids: [1 2]\n", + " ... ...\n", + " Iperio: 0\n", + " Jperio: 0\n", + " NFold: 0\n", + " NFtype: -\n", + " VertCoord: zco\n", + " IsfCav: 0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", + " warn(\n" + ] + } + ], + "source": [ + "print(\n", + " compute_missing_metrics(ds.drop_vars(['e3u', 'e3v', 'e3f', 'e3w']).copy(), all_scale_factors=['e3u'])\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/src_example/open_process_files.ipynb b/docs/src_example/open_process_files.ipynb new file mode 100644 index 0000000..b59ab76 --- /dev/null +++ b/docs/src_example/open_process_files.ipynb @@ -0,0 +1,10274 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d4baf777-28bc-42a2-95d9-714e62b9fa84", + "metadata": {}, + "source": [ + "Start by importing the functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6e326e37-4bfa-4111-bde4-5f3587ab1edd", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:28.128160Z", + "iopub.status.busy": "2023-03-29T15:17:28.127928Z", + "iopub.status.idle": "2023-03-29T15:17:28.515987Z", + "shell.execute_reply": "2023-03-29T15:17:28.515350Z" + } + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from xnemogcm import open_domain_cfg, open_nemo, process_nemo, open_namelist, open_nemo_and_domain_cfg\n", + "from xnemogcm import __version__ as xnemogcm_version" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c6f5571a-61ec-408f-8eae-6dee765ee048", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:28.518960Z", + "iopub.status.busy": "2023-03-29T15:17:28.518496Z", + "iopub.status.idle": "2023-03-29T15:17:28.526296Z", + "shell.execute_reply": "2023-03-29T15:17:28.525772Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'0.4.1'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xnemogcm_version" + ] + }, + { + "cell_type": "markdown", + "id": "cf68f882-90a2-420a-b5b5-ceded0c96420", + "metadata": {}, + "source": [ + "# First open the domain_cfg and nemo files into 2 datasets\n", + "## domain" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3928df5c-06c9-4f4b-a85a-c4fad3170903", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:28.528500Z", + "iopub.status.busy": "2023-03-29T15:17:28.528305Z", + "iopub.status.idle": "2023-03-29T15:17:28.566306Z", + "shell.execute_reply": "2023-03-29T15:17:28.565741Z" + } + }, + "outputs": [], + "source": [ + "open_domain_cfg?" + ] + }, + { + "cell_type": "markdown", + "id": "add13a99-a665-4d2b-822a-436740a9709a", + "metadata": {}, + "source": [ + "---\n", + "\n", + "You can provide the file names / folder using 3 similar methods:\n", + "1. Give the path to the files and xnemogcm opens the domain_cfg_out and mesh_mesk files\n", + "2. Give the path to the data folder + the name of the files\n", + "3. Give the name of the files that already contain the tree (e.g. ['/path/to/file1', '/path/to/file2']\n", + "\n", + "These 3 methods are equivalent, however if your domain files don't have the strandard names you need to provide them by hand.\n", + "\n", + "We use one of the test folder:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "2ee3aa40-af70-4150-a7e6-ea6f690f364f", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:28.569047Z", + "iopub.status.busy": "2023-03-29T15:17:28.568607Z", + "iopub.status.idle": "2023-03-29T15:17:28.572140Z", + "shell.execute_reply": "2023-03-29T15:17:28.571591Z" + } + }, + "outputs": [], + "source": [ + "datadir = Path('../xnemogcm/test/data/4.2.0/open_and_merge/')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "fc2b9b94-5106-427d-9d44-59044cec476a", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:28.574380Z", + "iopub.status.busy": "2023-03-29T15:17:28.573958Z", + "iopub.status.idle": "2023-03-29T15:17:28.688462Z", + "shell.execute_reply": "2023-03-29T15:17:28.687629Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "GYRE_1y_00010101_00011230_grid_T.nc GYRE_1y_00010101_00011230_grid_W.nc\r\n", + "GYRE_1y_00010101_00011230_grid_U.nc mesh_mask.nc\r\n", + "GYRE_1y_00010101_00011230_grid_V.nc\r\n" + ] + } + ], + "source": [ + "!ls ../xnemogcm/test/data/4.2.0/open_and_merge/" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "5cd1ee94-3ac2-4d95-9610-ea651583af39", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:28.691707Z", + "iopub.status.busy": "2023-03-29T15:17:28.691336Z", + "iopub.status.idle": "2023-03-29T15:17:29.504439Z", + "shell.execute_reply": "2023-03-29T15:17:29.503906Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:    (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n",
+       "Coordinates: (12/18)\n",
+       "    glamt      (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    glamu      (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    glamv      (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    glamf      (y_f, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    gphit      (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    gphiu      (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    ...         ...\n",
+       "  * x_c        (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n",
+       "  * y_c        (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n",
+       "  * z_c        (z_c) int64 0 1 2 3\n",
+       "  * x_f        (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n",
+       "  * y_f        (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n",
+       "  * z_f        (z_f) float64 -0.5 0.5 1.5 2.5\n",
+       "Data variables: (12/28)\n",
+       "    tmask      (z_c, y_c, x_c) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    umask      (z_c, y_c, x_f) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    vmask      (z_c, y_f, x_c) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    fmask      (z_c, y_f, x_f) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    tmaskutil  (y_c, x_c) int8 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    umaskutil  (y_c, x_f) int8 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    ...         ...\n",
+       "    e3u_0      (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3v_0      (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3f_0      (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3w_0      (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3uw_0     (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3vw_0     (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "Attributes: (12/13)\n",
+       "    DOMAIN_dimensions_ids:   [1 2]\n",
+       "    DOMAIN_size_global:      [32 22]\n",
+       "    DOMAIN_halo_size_start:  [0 0]\n",
+       "    DOMAIN_halo_size_end:    [0 0]\n",
+       "    DOMAIN_type:             BOX\n",
+       "    CfgName:                 GYRE\n",
+       "    ...                      ...\n",
+       "    Iperio:                  0\n",
+       "    Jperio:                  0\n",
+       "    NFold:                   0\n",
+       "    NFtype:                  -\n",
+       "    VertCoord:               zco\n",
+       "    IsfCav:                  0
" + ], + "text/plain": [ + "\n", + "Dimensions: (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n", + "Coordinates: (12/18)\n", + " glamt (y_c, x_c) float64 dask.array\n", + " glamu (y_c, x_f) float64 dask.array\n", + " glamv (y_f, x_c) float64 dask.array\n", + " glamf (y_f, x_f) float64 dask.array\n", + " gphit (y_c, x_c) float64 dask.array\n", + " gphiu (y_c, x_f) float64 dask.array\n", + " ... ...\n", + " * x_c (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n", + " * y_c (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n", + " * z_c (z_c) int64 0 1 2 3\n", + " * x_f (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n", + " * y_f (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n", + " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", + "Data variables: (12/28)\n", + " tmask (z_c, y_c, x_c) int8 dask.array\n", + " umask (z_c, y_c, x_f) int8 dask.array\n", + " vmask (z_c, y_f, x_c) int8 dask.array\n", + " fmask (z_c, y_f, x_f) int8 dask.array\n", + " tmaskutil (y_c, x_c) int8 dask.array\n", + " umaskutil (y_c, x_f) int8 dask.array\n", + " ... ...\n", + " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", + " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", + " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", + " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", + " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", + " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", + "Attributes: (12/13)\n", + " DOMAIN_dimensions_ids: [1 2]\n", + " DOMAIN_size_global: [32 22]\n", + " DOMAIN_halo_size_start: [0 0]\n", + " DOMAIN_halo_size_end: [0 0]\n", + " DOMAIN_type: BOX\n", + " CfgName: GYRE\n", + " ... ...\n", + " Iperio: 0\n", + " Jperio: 0\n", + " NFold: 0\n", + " NFtype: -\n", + " VertCoord: zco\n", + " IsfCav: 0" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "domcfg = open_domain_cfg(datadir=datadir)\n", + "# or\n", + "domcfg = open_domain_cfg(datadir=datadir, files=['mesh_mask.nc'])\n", + "# or\n", + "domcfg = open_domain_cfg(files=datadir.glob('*mesh_mask*.nc'))\n", + "domcfg" + ] + }, + { + "cell_type": "markdown", + "id": "58fde32f-9f84-47f0-90e5-2590d6664ac5", + "metadata": {}, + "source": [ + "## Nemo\n", + "\n", + "2 options here: 1) open netcdf files and make the preprocess automatically with `open_nemo` or 2) open by hand the files (or retrieve them from anywhere, e.g. zarr on a remote) and process using `process_nemo`.\n", + "\n", + "Note: `open_nemo` internally uses `process_nemo`.\n", + "\n", + "### open_nemo" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "6fa2e261-a188-4973-ad6e-6381017ab5bc", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:29.507978Z", + "iopub.status.busy": "2023-03-29T15:17:29.507603Z", + "iopub.status.idle": "2023-03-29T15:17:29.512265Z", + "shell.execute_reply": "2023-03-29T15:17:29.511786Z" + } + }, + "outputs": [], + "source": [ + "open_nemo?" + ] + }, + { + "cell_type": "markdown", + "id": "3bc66d2b-a497-4394-a28f-80ac98587e3a", + "metadata": {}, + "source": [ + "---\n", + "We can provide the files folder / name following the same convention as for the `open_domain_cfg` function. We also need to provide the `domcfg` dataset so xnemogcm knows how to set the variables on the proper grid position. We can also provide extra kwargs to the underlying call to `xarray.open_mfdataset` function." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "9e5a0b8c-7199-46d2-9231-273fc57355f5", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:29.514523Z", + "iopub.status.busy": "2023-03-29T15:17:29.514036Z", + "iopub.status.idle": "2023-03-29T15:17:30.056215Z", + "shell.execute_reply": "2023-03-29T15:17:30.055616Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:               (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n",
+       "                           x_f: 32, y_f: 22, z_f: 4)\n",
+       "Coordinates:\n",
+       "  * z_c                   (z_c) int64 0 1 2 3\n",
+       "    time_centered         (t) object dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "  * t                     (t) object 0001-07-01 00:00:00\n",
+       "  * x_c                   (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n",
+       "  * y_c                   (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n",
+       "    gdept_1d              (z_c) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
+       "  * x_f                   (x_f) float64 0.5 1.5 2.5 3.5 ... 28.5 29.5 30.5 31.5\n",
+       "  * y_f                   (y_f) float64 0.5 1.5 2.5 3.5 ... 18.5 19.5 20.5 21.5\n",
+       "  * z_f                   (z_f) float64 -0.5 0.5 1.5 2.5\n",
+       "    gdepw_1d              (z_f) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
+       "Dimensions without coordinates: axis_nbounds\n",
+       "Data variables: (12/15)\n",
+       "    deptht_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
+       "    time_centered_bounds  (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
+       "    t_bounds              (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
+       "    toce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "    soce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "    e3t                   (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "    ...                    ...\n",
+       "    depthv_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
+       "    voce                  (t, z_c, y_f, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "    e3v                   (t, z_c, y_f, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "    depthw_bounds         (z_f, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
+       "    woce                  (t, z_f, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "    e3w                   (t, z_f, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "Attributes:\n",
+       "    Conventions:  CF-1.6\n",
+       "    timeStamp:    2023-Mar-28 10:42:16 GMT\n",
+       "    name:         NEMO dataset\n",
+       "    description:  Ocean grid variables, set on the proper positions\n",
+       "    title:        Ocean grid variables
" + ], + "text/plain": [ + "\n", + "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", + " x_f: 32, y_f: 22, z_f: 4)\n", + "Coordinates:\n", + " * z_c (z_c) int64 0 1 2 3\n", + " time_centered (t) object dask.array\n", + " * t (t) object 0001-07-01 00:00:00\n", + " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", + " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", + " gdept_1d (z_c) float64 dask.array\n", + " * x_f (x_f) float64 0.5 1.5 2.5 3.5 ... 28.5 29.5 30.5 31.5\n", + " * y_f (y_f) float64 0.5 1.5 2.5 3.5 ... 18.5 19.5 20.5 21.5\n", + " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", + " gdepw_1d (z_f) float64 dask.array\n", + "Dimensions without coordinates: axis_nbounds\n", + "Data variables: (12/15)\n", + " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", + " time_centered_bounds (t, axis_nbounds) object dask.array\n", + " t_bounds (t, axis_nbounds) object dask.array\n", + " toce (t, z_c, y_c, x_c) float32 dask.array\n", + " soce (t, z_c, y_c, x_c) float32 dask.array\n", + " e3t (t, z_c, y_c, x_c) float32 dask.array\n", + " ... ...\n", + " depthv_bounds (z_c, axis_nbounds) float32 dask.array\n", + " voce (t, z_c, y_f, x_c) float32 dask.array\n", + " e3v (t, z_c, y_f, x_c) float32 dask.array\n", + " depthw_bounds (z_f, axis_nbounds) float32 dask.array\n", + " woce (t, z_f, y_c, x_c) float32 dask.array\n", + " e3w (t, z_f, y_c, x_c) float32 dask.array\n", + "Attributes:\n", + " Conventions: CF-1.6\n", + " timeStamp: 2023-Mar-28 10:42:16 GMT\n", + " name: NEMO dataset\n", + " description: Ocean grid variables, set on the proper positions\n", + " title: Ocean grid variables" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nemo = open_nemo(domcfg=domcfg, datadir=datadir)\n", + "# or\n", + "nemo = open_nemo(domcfg=domcfg, files=datadir.glob('*grid*.nc'))\n", + "# or, using attributes from dataset and not name\n", + "datadir2 = Path('../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", + "nemo = open_nemo(\n", + " domcfg=domcfg, files=[\n", + " datadir2 / 'T.nc',\n", + " datadir2 / 'U.nc',\n", + " datadir2 / 'V.nc',\n", + " datadir2 / 'W.nc'\n", + " ]\n", + ")\n", + "nemo" + ] + }, + { + "cell_type": "markdown", + "id": "72017af7-df86-4f61-b2e4-e9ce2826fcd3", + "metadata": {}, + "source": [ + "### process_nemo" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e64f0c2a-fe6a-465e-b8c2-8df7db3ea0bb", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:30.058891Z", + "iopub.status.busy": "2023-03-29T15:17:30.058561Z", + "iopub.status.idle": "2023-03-29T15:17:30.063407Z", + "shell.execute_reply": "2023-03-29T15:17:30.062868Z" + } + }, + "outputs": [], + "source": [ + "process_nemo?" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "19b9bd17-e1f4-4be3-8039-7d02311238b0", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:30.065566Z", + "iopub.status.busy": "2023-03-29T15:17:30.065266Z", + "iopub.status.idle": "2023-03-29T15:17:30.190503Z", + "shell.execute_reply": "2023-03-29T15:17:30.189687Z" + } + }, + "outputs": [], + "source": [ + "import xarray as xr\n", + "datadir2 = Path('../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", + "nemo = process_nemo(\n", + " positions=[\n", + " (xr.open_dataset(datadir2 / 'T.nc'), 'T'),\n", + " (xr.open_dataset(datadir2 / 'U.nc'), 'U'),\n", + " (xr.open_dataset(datadir2 / 'V.nc'), 'V'),\n", + " (xr.open_dataset(datadir2 / 'W.nc'), 'W')\n", + " ],\n", + " domcfg=domcfg\n", + ")\n", + "# or, if the datasets contain the attribute 'description'\n", + "nemo = process_nemo(\n", + " positions=[\n", + " (xr.open_dataset(datadir2 / 'T.nc'), None),\n", + " (xr.open_dataset(datadir2 / 'U.nc'), None),\n", + " (xr.open_dataset(datadir2 / 'V.nc'), None),\n", + " (xr.open_dataset(datadir2 / 'W.nc'), None)\n", + " ],\n", + " domcfg=domcfg\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "90ab171c-d3d3-4c8e-897a-3b18a749390f", + "metadata": {}, + "source": [ + "# Open both at once\n", + "\n", + "It is possible to open the domain and nemo output at once in one unique dataset. What happens is that 2 datasets are created and then merged. Thus all option possible for the `open_nemo` and `open_domain_cfg` functions are still possible." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c3130a23-e65a-4097-a12d-cf41110a0836", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:30.193705Z", + "iopub.status.busy": "2023-03-29T15:17:30.193371Z", + "iopub.status.idle": "2023-03-29T15:17:30.199445Z", + "shell.execute_reply": "2023-03-29T15:17:30.198832Z" + } + }, + "outputs": [], + "source": [ + "open_nemo_and_domain_cfg?" + ] + }, + { + "cell_type": "markdown", + "id": "94f9a258-8204-48dd-9c78-c2859461b113", + "metadata": {}, + "source": [ + "---\n", + "Again, mutiple equivalent arguments are possible to open the data" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "361b5317-a173-4442-a7ec-7f70466d2eb3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:30.203692Z", + "iopub.status.busy": "2023-03-29T15:17:30.203405Z", + "iopub.status.idle": "2023-03-29T15:17:31.400022Z", + "shell.execute_reply": "2023-03-29T15:17:31.399454Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:               (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n",
+       "                           x_f: 32, y_f: 22, z_f: 4)\n",
+       "Coordinates: (12/20)\n",
+       "  * z_c                   (z_c) int64 0 1 2 3\n",
+       "    time_centered         (t) object dask.array<chunksize=(1,), meta=np.ndarray>\n",
+       "  * t                     (t) object 0001-07-01 00:00:00\n",
+       "  * x_c                   (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n",
+       "  * y_c                   (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n",
+       "    gdept_1d              (z_c) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
+       "    ...                    ...\n",
+       "    gphit                 (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    gphiu                 (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    gphiv                 (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    gphif                 (y_f, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
+       "    gdept_0               (z_c, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    gdepw_0               (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "Dimensions without coordinates: axis_nbounds\n",
+       "Data variables: (12/43)\n",
+       "    deptht_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
+       "    time_centered_bounds  (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
+       "    t_bounds              (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
+       "    toce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "    soce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "    e3t                   (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
+       "    ...                    ...\n",
+       "    e3u_0                 (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3v_0                 (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3f_0                 (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3w_0                 (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3uw_0                (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "    e3vw_0                (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
+       "Attributes: (12/18)\n",
+       "    Conventions:             CF-1.6\n",
+       "    timeStamp:               2023-Mar-28 10:42:16 GMT\n",
+       "    name:                    NEMO dataset\n",
+       "    description:             Ocean grid variables, set on the proper positions\n",
+       "    title:                   Ocean grid variables\n",
+       "    DOMAIN_dimensions_ids:   [1 2]\n",
+       "    ...                      ...\n",
+       "    Iperio:                  0\n",
+       "    Jperio:                  0\n",
+       "    NFold:                   0\n",
+       "    NFtype:                  -\n",
+       "    VertCoord:               zco\n",
+       "    IsfCav:                  0
" + ], + "text/plain": [ + "\n", + "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", + " x_f: 32, y_f: 22, z_f: 4)\n", + "Coordinates: (12/20)\n", + " * z_c (z_c) int64 0 1 2 3\n", + " time_centered (t) object dask.array\n", + " * t (t) object 0001-07-01 00:00:00\n", + " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", + " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", + " gdept_1d (z_c) float64 dask.array\n", + " ... ...\n", + " gphit (y_c, x_c) float64 dask.array\n", + " gphiu (y_c, x_f) float64 dask.array\n", + " gphiv (y_f, x_c) float64 dask.array\n", + " gphif (y_f, x_f) float64 dask.array\n", + " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", + " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", + "Dimensions without coordinates: axis_nbounds\n", + "Data variables: (12/43)\n", + " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", + " time_centered_bounds (t, axis_nbounds) object dask.array\n", + " t_bounds (t, axis_nbounds) object dask.array\n", + " toce (t, z_c, y_c, x_c) float32 dask.array\n", + " soce (t, z_c, y_c, x_c) float32 dask.array\n", + " e3t (t, z_c, y_c, x_c) float32 dask.array\n", + " ... ...\n", + " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", + " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", + " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", + " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", + " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", + " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", + "Attributes: (12/18)\n", + " Conventions: CF-1.6\n", + " timeStamp: 2023-Mar-28 10:42:16 GMT\n", + " name: NEMO dataset\n", + " description: Ocean grid variables, set on the proper positions\n", + " title: Ocean grid variables\n", + " DOMAIN_dimensions_ids: [1 2]\n", + " ... ...\n", + " Iperio: 0\n", + " Jperio: 0\n", + " NFold: 0\n", + " NFtype: -\n", + " VertCoord: zco\n", + " IsfCav: 0" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# the simplest for simple cases, provide the path\n", + "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", + "# or provide the files\n", + "ds = open_nemo_and_domain_cfg(nemo_files=datadir.glob('*grid*.nc'), domcfg_files=datadir.glob('*mesh*.nc'))\n", + "# or use the nemo_kwargs and domcfg_kwargs dictionnaries\n", + "ds = open_nemo_and_domain_cfg(nemo_kwargs=dict(datadir=datadir), domcfg_kwargs={'files':datadir.glob('*mesh*.nc')})\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "8bd99220-6f03-476d-9621-36499e9ffedc", + "metadata": {}, + "source": [ + "## Remark\n", + "\n", + "All opening are lazy using dask, which makes files quick to open, until you actually load the data you need" + ] + }, + { + "cell_type": "markdown", + "id": "ea964e50-68db-4394-baec-4b3c5fb90b3e", + "metadata": {}, + "source": [ + "# Namelist\n", + "\n", + "It can be convenient to open the namelist used for the run (e.g. to compare different runs with different parameters). This is possible using the `f90nml` package (it needs to be installed, this is an optional dependency)." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "8a6cb055-e2c2-4d37-be4e-3684b0f12a71", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:31.402997Z", + "iopub.status.busy": "2023-03-29T15:17:31.402560Z", + "iopub.status.idle": "2023-03-29T15:17:31.406932Z", + "shell.execute_reply": "2023-03-29T15:17:31.406343Z" + } + }, + "outputs": [], + "source": [ + "open_namelist?" + ] + }, + { + "cell_type": "markdown", + "id": "c81264ec-2a59-43b6-adfc-b2c19ba96b49", + "metadata": {}, + "source": [ + "---\n", + "Here you provide the folder path containing the reference and configuration namelists, or the filenames (as for nemo and domcfg). You can choose to load both, or only one of them. The configration namelist will overwrite the default one.\n", + "\n", + "For this we need to use another folder of the test data (with simplified namelists for the exemple):" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1fc7b7ba-cedf-4ebe-8105-de09edcbb7bf", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:31.409186Z", + "iopub.status.busy": "2023-03-29T15:17:31.408895Z", + "iopub.status.idle": "2023-03-29T15:17:31.411631Z", + "shell.execute_reply": "2023-03-29T15:17:31.411084Z" + } + }, + "outputs": [], + "source": [ + "datadir = Path('../xnemogcm/test/data/namelist/')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "f413ca78-2d0f-48fd-b9d5-427c4b8ca4b3", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:31.413698Z", + "iopub.status.busy": "2023-03-29T15:17:31.413414Z", + "iopub.status.idle": "2023-03-29T15:17:31.529759Z", + "shell.execute_reply": "2023-03-29T15:17:31.528930Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "namelist_cfg namelist_ref\r\n" + ] + } + ], + "source": [ + "!ls ../xnemogcm/test/data/namelist/" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "feabb3f4-f9b7-4092-b423-22db9cae36a1", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:31.533181Z", + "iopub.status.busy": "2023-03-29T15:17:31.532561Z", + "iopub.status.idle": "2023-03-29T15:17:31.547995Z", + "shell.execute_reply": "2023-03-29T15:17:31.547484Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:    ()\n",
+       "Data variables:\n",
+       "    nn_no      int64 0\n",
+       "    cn_exp     <U5 'BASIN'\n",
+       "    nn_it000   int64 1\n",
+       "    nn_itend   int64 5840\n",
+       "    rn_e1_deg  float64 1.0
" + ], + "text/plain": [ + "\n", + "Dimensions: ()\n", + "Data variables:\n", + " nn_no int64 0\n", + " cn_exp \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.DataArray 'nn_it000' ()>\n",
+       "array(1)\n",
+       "Attributes:\n",
+       "    namelist:  namrun
" + ], + "text/plain": [ + "\n", + "array(1)\n", + "Attributes:\n", + " namelist: namrun" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nam.nn_it000" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/src_example/recombing_mesh_mask_domain_cfg.ipynb b/docs/src_example/recombing_mesh_mask_domain_cfg.ipynb new file mode 100644 index 0000000..79c8350 --- /dev/null +++ b/docs/src_example/recombing_mesh_mask_domain_cfg.ipynb @@ -0,0 +1,3284 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "41aec3c0-ece5-4ba1-b47f-d7a6d67b0860", + "metadata": {}, + "source": [ + "Start by importing the functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "18606253-a4d5-4f6a-9da8-7dfd96b72bea", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:32.904175Z", + "iopub.status.busy": "2023-03-29T15:17:32.903942Z", + "iopub.status.idle": "2023-03-29T15:17:33.292390Z", + "shell.execute_reply": "2023-03-29T15:17:33.291757Z" + } + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from xnemogcm import open_domain_cfg, open_nemo_and_domain_cfg\n", + "from xnemogcm import __version__ as xnemogcm_version" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "84a7b456-0689-4cc7-b497-c41ea62ad477", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:33.295305Z", + "iopub.status.busy": "2023-03-29T15:17:33.294812Z", + "iopub.status.idle": "2023-03-29T15:17:33.302705Z", + "shell.execute_reply": "2023-03-29T15:17:33.302193Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'0.4.1'" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "xnemogcm_version" + ] + }, + { + "cell_type": "markdown", + "id": "96f57a3d-4035-4c7b-acb5-5ae843eb87fd", + "metadata": {}, + "source": [ + "By default nemo outputs a mesh_mask / domain_cfg file per computing processor, if the namelist parameter is set on .true.:\n", + "\n", + "* `ln_write_cfg = .true.` to output the domain_cfg if created analyticaly in the usrdef_zgr.F90 and usrdef_hgr.F90 files\n", + "* `ln_meshmask = .true.` to output the mesh_mask files (that also contain the masks)\n", + "\n", + "While it is possible to recombine the files using the nemo fortran toolbox, xnemogcm can also recombine them easily.\n", + "\n", + "To illustrate this, we use a data folder from the test data:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "7e7eb827-e9ff-4652-8e11-c3ad01b1a65e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:33.305220Z", + "iopub.status.busy": "2023-03-29T15:17:33.304915Z", + "iopub.status.idle": "2023-03-29T15:17:33.308137Z", + "shell.execute_reply": "2023-03-29T15:17:33.307575Z" + } + }, + "outputs": [], + "source": [ + "datadir = Path('../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/')" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "9874f77d-9755-4881-afaf-0fe72f61950e", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:33.310315Z", + "iopub.status.busy": "2023-03-29T15:17:33.310027Z", + "iopub.status.idle": "2023-03-29T15:17:33.424492Z", + "shell.execute_reply": "2023-03-29T15:17:33.423640Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mesh_mask_0000.nc mesh_mask_0001.nc mesh_mask_0002.nc mesh_mask_0003.nc\r\n" + ] + } + ], + "source": [ + "!ls ../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "193b27f6-8421-4cbd-be2e-228a8705a792", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:33.428228Z", + "iopub.status.busy": "2023-03-29T15:17:33.427622Z", + "iopub.status.idle": "2023-03-29T15:17:34.176712Z", + "shell.execute_reply": "2023-03-29T15:17:34.176187Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
<xarray.Dataset>\n",
+       "Dimensions:    (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n",
+       "Coordinates: (12/18)\n",
+       "    glamt      (y_c, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
+       "    glamu      (y_c, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
+       "    glamv      (y_f, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
+       "    glamf      (y_f, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
+       "    gphit      (y_c, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
+       "    gphiu      (y_c, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
+       "    ...         ...\n",
+       "  * x_c        (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n",
+       "  * y_c        (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n",
+       "  * z_c        (z_c) int64 0 1 2 3\n",
+       "  * x_f        (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n",
+       "  * y_f        (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n",
+       "  * z_f        (z_f) float64 -0.5 0.5 1.5 2.5\n",
+       "Data variables: (12/28)\n",
+       "    tmask      (z_c, y_c, x_c) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "    umask      (z_c, y_c, x_f) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "    vmask      (z_c, y_f, x_c) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "    fmask      (z_c, y_f, x_f) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "    tmaskutil  (y_c, x_c) int8 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
+       "    umaskutil  (y_c, x_f) int8 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
+       "    ...         ...\n",
+       "    e3u_0      (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "    e3v_0      (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "    e3f_0      (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "    e3w_0      (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "    e3uw_0     (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "    e3vw_0     (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
+       "Attributes: (12/13)\n",
+       "    DOMAIN_dimensions_ids:   [1 2]\n",
+       "    DOMAIN_size_global:      [32 22]\n",
+       "    DOMAIN_halo_size_start:  [0 0]\n",
+       "    DOMAIN_halo_size_end:    [0 0]\n",
+       "    DOMAIN_type:             BOX\n",
+       "    CfgName:                 GYRE\n",
+       "    ...                      ...\n",
+       "    Iperio:                  0\n",
+       "    Jperio:                  0\n",
+       "    NFold:                   0\n",
+       "    NFtype:                  -\n",
+       "    VertCoord:               zco\n",
+       "    IsfCav:                  0
" + ], + "text/plain": [ + "\n", + "Dimensions: (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n", + "Coordinates: (12/18)\n", + " glamt (y_c, x_c) float64 dask.array\n", + " glamu (y_c, x_f) float64 dask.array\n", + " glamv (y_f, x_c) float64 dask.array\n", + " glamf (y_f, x_f) float64 dask.array\n", + " gphit (y_c, x_c) float64 dask.array\n", + " gphiu (y_c, x_f) float64 dask.array\n", + " ... ...\n", + " * x_c (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n", + " * y_c (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n", + " * z_c (z_c) int64 0 1 2 3\n", + " * x_f (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n", + " * y_f (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n", + " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", + "Data variables: (12/28)\n", + " tmask (z_c, y_c, x_c) int8 dask.array\n", + " umask (z_c, y_c, x_f) int8 dask.array\n", + " vmask (z_c, y_f, x_c) int8 dask.array\n", + " fmask (z_c, y_f, x_f) int8 dask.array\n", + " tmaskutil (y_c, x_c) int8 dask.array\n", + " umaskutil (y_c, x_f) int8 dask.array\n", + " ... ...\n", + " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", + " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", + " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", + " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", + " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", + " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", + "Attributes: (12/13)\n", + " DOMAIN_dimensions_ids: [1 2]\n", + " DOMAIN_size_global: [32 22]\n", + " DOMAIN_halo_size_start: [0 0]\n", + " DOMAIN_halo_size_end: [0 0]\n", + " DOMAIN_type: BOX\n", + " CfgName: GYRE\n", + " ... ...\n", + " Iperio: 0\n", + " Jperio: 0\n", + " NFold: 0\n", + " NFtype: -\n", + " VertCoord: zco\n", + " IsfCav: 0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "domcfg = open_domain_cfg(datadir=datadir)\n", + "domcfg" + ] + }, + { + "cell_type": "markdown", + "id": "475a6a89-9353-4c11-b49f-f0874b304546", + "metadata": {}, + "source": [ + "We verify that the variables are the same than when opening a unique full mesh_mask file." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "1143759e-b37e-4352-b05c-bad53db8a3b2", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:34.180003Z", + "iopub.status.busy": "2023-03-29T15:17:34.179479Z", + "iopub.status.idle": "2023-03-29T15:17:34.380865Z", + "shell.execute_reply": "2023-03-29T15:17:34.380226Z" + } + }, + "outputs": [], + "source": [ + "domcfg_1_file = open_domain_cfg(datadir=Path('../xnemogcm/test/data/4.2.0/mesh_mask_1_file/'), files=['mesh_mask.nc'])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "771405fe-0fef-4bce-a760-bd3d2463b831", + "metadata": { + "execution": { + "iopub.execute_input": "2023-03-29T15:17:34.384149Z", + "iopub.status.busy": "2023-03-29T15:17:34.383515Z", + "iopub.status.idle": "2023-03-29T15:17:34.828933Z", + "shell.execute_reply": "2023-03-29T15:17:34.828376Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "domcfg_1_file.equals(domcfg)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..38e8ae8 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,26 @@ +site_name: xnemogcm documentation +site_url: https://xnemogcm.readthedocs.io +nav: + - Get started: + - Get started: index.md + - Examples: + - "open files / Datasets": src_example/open_process_files.ipynb + - "recombine files": src_example/recombing_mesh_mask_domain_cfg.ipynb + - "compute metrics": src_example/compute_metrics.ipynb + - API: + - API: api.md + - "What's new": + - "What's new": new.md +theme: readthedocs +plugins: + - mkdocs-jupyter: + execute: true + include_source: True + - mkdocstrings: + handlers: + python: + options: + show_submodules: true + docstring_style: numpy + heading_level: 2 + default_handler: python diff --git a/poetry.lock b/poetry.lock index 8701567..7662771 100644 --- a/poetry.lock +++ b/poetry.lock @@ -180,9 +180,6 @@ files = [ {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, ] -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - [package.extras] dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] @@ -763,6 +760,21 @@ python-dateutil = ">=2.8.1" [package.extras] dev = ["flake8", "markdown", "twine", "wheel"] +[[package]] +name = "griffe" +version = "0.40.0" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "griffe-0.40.0-py3-none-any.whl", hash = "sha256:db1da6d1d8e08cbb20f1a7dee8c09da940540c2d4c1bfa26a9091cf6fc36a9ec"}, + {file = "griffe-0.40.0.tar.gz", hash = "sha256:76c4439eaa2737af46ae003c331ab6ca79c5365b552f7b5aed263a3b4125735b"}, +] + +[package.dependencies] +colorama = ">=0.4" + [[package]] name = "idna" version = "3.6" @@ -795,25 +807,6 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link perf = ["ipython"] testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] -[[package]] -name = "importlib-resources" -version = "6.1.1" -description = "Read resources from Python packages" -category = "dev" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, - {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] - [[package]] name = "iniconfig" version = "2.0.0" @@ -996,11 +989,9 @@ files = [ attrs = ">=22.2.0" fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} jsonschema-specifications = ">=2023.03.6" -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} @@ -1025,7 +1016,6 @@ files = [ ] [package.dependencies] -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} referencing = ">=0.31.0" [[package]] @@ -1187,7 +1177,6 @@ files = [ [package.dependencies] async-lru = ">=1.0.0" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -importlib-resources = {version = ">=1.4", markers = "python_version < \"3.9\""} ipykernel = "*" jinja2 = ">=3.0.3" jupyter-core = "*" @@ -1245,6 +1234,36 @@ docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pyd openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +[[package]] +name = "jupytext" +version = "1.16.1" +description = "Jupyter notebooks as Markdown documents, Julia, Python or R scripts" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupytext-1.16.1-py3-none-any.whl", hash = "sha256:796ec4f68ada663569e5d38d4ef03738a01284bfe21c943c485bc36433898bd0"}, + {file = "jupytext-1.16.1.tar.gz", hash = "sha256:68c7b68685e870e80e60fda8286fbd6269e9c74dc1df4316df6fe46eabc94c99"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0" +mdit-py-plugins = "*" +nbformat = "*" +packaging = "*" +pyyaml = "*" +toml = "*" + +[package.extras] +dev = ["jupytext[test-cov,test-external]"] +docs = ["myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] +test = ["pytest", "pytest-randomly", "pytest-xdist"] +test-cov = ["jupytext[test-integration]", "pytest-cov (>=2.6.1)"] +test-external = ["autopep8", "black", "flake8", "gitpython", "isort", "jupyter-fs (<0.4.0)", "jupytext[test-integration]", "pre-commit", "sphinx-gallery (<0.8)"] +test-functional = ["jupytext[test]"] +test-integration = ["ipykernel", "jupyter-server (!=2.11)", "jupytext[test-functional]", "nbconvert"] +test-ui = ["calysto-bash"] + [[package]] name = "locket" version = "1.0.0" @@ -1276,6 +1295,31 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "dev" +optional = false +python-versions = ">=3.8" +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"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + [[package]] name = "markupsafe" version = "2.1.5" @@ -1361,6 +1405,38 @@ files = [ [package.dependencies] traitlets = "*" +[[package]] +name = "mdit-py-plugins" +version = "0.4.0" +description = "Collection of plugins for markdown-it-py" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mdit_py_plugins-0.4.0-py3-none-any.whl", hash = "sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9"}, + {file = "mdit_py_plugins-0.4.0.tar.gz", hash = "sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<4.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "mergedeep" version = "1.3.4" @@ -1417,6 +1493,130 @@ watchdog = ">=2.0" i18n = ["babel (>=2.9.0)"] min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] +[[package]] +name = "mkdocs-autorefs" +version = "0.5.0" +description = "Automatically link across pages in MkDocs." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_autorefs-0.5.0-py3-none-any.whl", hash = "sha256:7930fcb8ac1249f10e683967aeaddc0af49d90702af111a5e390e8b20b3d97ff"}, + {file = "mkdocs_autorefs-0.5.0.tar.gz", hash = "sha256:9a5054a94c08d28855cfab967ada10ed5be76e2bfad642302a610b252c3274c0"}, +] + +[package.dependencies] +Markdown = ">=3.3" +mkdocs = ">=1.1" + +[[package]] +name = "mkdocs-jupyter" +version = "0.24.6" +description = "Use Jupyter in mkdocs websites" +category = "dev" +optional = false +python-versions = ">=3.9" +files = [ + {file = "mkdocs_jupyter-0.24.6-py3-none-any.whl", hash = "sha256:56fb7ad796f2414a4143d54a966b805caf315c32413e97f85591623fa87dceca"}, + {file = "mkdocs_jupyter-0.24.6.tar.gz", hash = "sha256:89fcbe8a9523864d5416de1a60711640b6bc2972279d2adf46ed2776c2d9ff7c"}, +] + +[package.dependencies] +ipykernel = ">6.0.0,<7.0.0" +jupytext = ">1.13.8,<2" +mkdocs = ">=1.4.0,<2" +mkdocs-material = ">9.0.0" +nbconvert = ">=7.2.9,<8" +pygments = ">2.12.0" + +[[package]] +name = "mkdocs-material" +version = "9.5.7" +description = "Documentation that simply works" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material-9.5.7-py3-none-any.whl", hash = "sha256:0be8ce8bcfebb52bae9b00cf9b851df45b8a92d629afcfd7f2c09b2dfa155ea3"}, + {file = "mkdocs_material-9.5.7.tar.gz", hash = "sha256:16110292575d88a338d2961f3cb665cf12943ff8829e551a9b364f24019e46af"}, +] + +[package.dependencies] +babel = ">=2.10,<3.0" +colorama = ">=0.4,<1.0" +jinja2 = ">=3.0,<4.0" +markdown = ">=3.2,<4.0" +mkdocs = ">=1.5.3,<1.6.0" +mkdocs-material-extensions = ">=1.3,<2.0" +paginate = ">=0.5,<1.0" +pygments = ">=2.16,<3.0" +pymdown-extensions = ">=10.2,<11.0" +regex = ">=2022.4" +requests = ">=2.26,<3.0" + +[package.extras] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] +recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] + +[[package]] +name = "mkdocs-material-extensions" +version = "1.3.1" +description = "Extension pack for Python Markdown and MkDocs Material." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, + {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, +] + +[[package]] +name = "mkdocstrings" +version = "0.24.0" +description = "Automatic documentation from sources, for MkDocs." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocstrings-0.24.0-py3-none-any.whl", hash = "sha256:f4908560c10f587326d8f5165d1908817b2e280bbf707607f601c996366a2264"}, + {file = "mkdocstrings-0.24.0.tar.gz", hash = "sha256:222b1165be41257b494a9d29b14135d2b7ca43f38161d5b10caae03b87bd4f7e"}, +] + +[package.dependencies] +click = ">=7.0" +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.11.1" +Markdown = ">=3.3" +MarkupSafe = ">=1.1" +mkdocs = ">=1.4" +mkdocs-autorefs = ">=0.3.1" +mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""} +platformdirs = ">=2.2.0" +pymdown-extensions = ">=6.3" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "1.8.0" +description = "A Python handler for mkdocstrings." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocstrings_python-1.8.0-py3-none-any.whl", hash = "sha256:4209970cc90bec194568682a535848a8d8489516c6ed4adbe58bbc67b699ca9d"}, + {file = "mkdocstrings_python-1.8.0.tar.gz", hash = "sha256:1488bddf50ee42c07d9a488dddc197f8e8999c2899687043ec5dd1643d057192"}, +] + +[package.dependencies] +griffe = ">=0.37" +mkdocstrings = ">=0.20" + [[package]] name = "mypy-extensions" version = "1.0.0" @@ -1650,6 +1850,17 @@ files = [ {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, ] +[[package]] +name = "paginate" +version = "0.5.6" +description = "Divides large result sets into pages for easier browsing" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"}, +] + [[package]] name = "pandas" version = "2.0.3" @@ -1804,18 +2015,6 @@ files = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] -[[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, -] - [[package]] name = "platformdirs" version = "4.2.0" @@ -1962,6 +2161,25 @@ files = [ plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pymdown-extensions" +version = "10.7" +description = "Extension pack for Python Markdown." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pymdown_extensions-10.7-py3-none-any.whl", hash = "sha256:6ca215bc57bc12bf32b414887a68b810637d039124ed9b2e5bd3325cbb2c050c"}, + {file = "pymdown_extensions-10.7.tar.gz", hash = "sha256:c0d64d5cf62566f59e6b2b690a4095c931107c250a8c8e1351c1de5f6b036deb"}, +] + +[package.dependencies] +markdown = ">=3.5" +pyyaml = "*" + +[package.extras] +extra = ["pygments (>=2.12)"] + [[package]] name = "pytest" version = "8.0.0" @@ -2251,6 +2469,109 @@ files = [ attrs = ">=22.2.0" rpds-py = ">=0.7.0" +[[package]] +name = "regex" +version = "2023.12.25" +description = "Alternative regular expression module, to replace re." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"}, + {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"}, + {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"}, + {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"}, + {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"}, + {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"}, + {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"}, + {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"}, + {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"}, + {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"}, + {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"}, + {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"}, + {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"}, + {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"}, + {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"}, + {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"}, + {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"}, + {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"}, + {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"}, + {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"}, + {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"}, + {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"}, + {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"}, + {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"}, + {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"}, + {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"}, + {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"}, + {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"}, + {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"}, + {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"}, + {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"}, + {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"}, +] + [[package]] name = "requests" version = "2.31.0" @@ -2832,5 +3153,5 @@ namelist = ["f90nml"] [metadata] lock-version = "2.0" -python-versions = ">=3.8,<3.12" -content-hash = "719448256665ca29080d597b35dab42342d0c6000f23eb18391a84c92d571ffd" +python-versions = ">=3.9,<3.12" +content-hash = "4e84d5cf70e2f30ca35dbfddce4e9a2b1bb35f289ed7a776ca52d2e57ae2148d" diff --git a/pyproject.toml b/pyproject.toml index e83d03d..0e1793e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,7 @@ readme = "README.md" exclude = ["xnemogcm/test/data"] [tool.poetry.dependencies] -python = ">=3.8,<3.12" +python = ">=3.9,<3.12" dask = {extras = ["array"], version = "*"} netcdf4 = ">=1.5.8" xarray = ">=0.21.1" @@ -41,6 +41,8 @@ optional = true [tool.poetry.group.docs.dependencies] mkdocs = "^1.5.3" +mkdocs-jupyter = "^0.24.6" +mkdocstrings = {extras = ["python"], version = "^0.24.0"} [build-system] requires = ["poetry-core>=1.0.0"] From c14890f2f25534fc9aecb216e520a5736eec0a6a Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:09:02 +0100 Subject: [PATCH 06/18] correct poetry intallation --- .readthedocs.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 956e14c..b9257cd 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -16,6 +16,7 @@ build: - curl -sSL https://install.python-poetry.org | python3 - # Tell poetry to not use a virtual environment - poetry config virtualenvs.create false + - export PATH=$PATH:$HOME/.local/bin post_install: # Install dependencies with 'docs' dependency group # https://python-poetry.org/docs/managing-dependencies/#dependency-groups From 8ff39ef67e15fc3384ac700bf5ba3a3d066c168b Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:12:31 +0100 Subject: [PATCH 07/18] correct poetry path --- .readthedocs.yaml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index b9257cd..ec12a71 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -16,16 +16,10 @@ build: - curl -sSL https://install.python-poetry.org | python3 - # Tell poetry to not use a virtual environment - poetry config virtualenvs.create false - - export PATH=$PATH:$HOME/.local/bin post_install: # Install dependencies with 'docs' dependency group # https://python-poetry.org/docs/managing-dependencies/#dependency-groups - - poetry install --with docs + - $HOME/.local/bin/poetry install --with docs mkdocs: configuration: mkdocs.yml - -# Optionally declare the Python requirements required to build your docs -python: - install: - - requirements: docs/requirements.txt From 0f410a24799dc35af3ec2153dbd79eb476d17260 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:13:05 +0100 Subject: [PATCH 08/18] examples moved to doc --- src_example/compute_metrics.ipynb | 504 - src_example/open_process_files.ipynb | 10274 ---------------- .../recombing_mesh_mask_domain_cfg.ipynb | 3284 ----- 3 files changed, 14062 deletions(-) delete mode 100644 src_example/compute_metrics.ipynb delete mode 100644 src_example/open_process_files.ipynb delete mode 100644 src_example/recombing_mesh_mask_domain_cfg.ipynb diff --git a/src_example/compute_metrics.ipynb b/src_example/compute_metrics.ipynb deleted file mode 100644 index 0b0ab1e..0000000 --- a/src_example/compute_metrics.ipynb +++ /dev/null @@ -1,504 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "9975d773-21bd-40e2-8795-38e70753bd05", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "from xnemogcm import open_nemo_and_domain_cfg\n", - "from xnemogcm.metrics import compute_missing_metrics\n", - "from xnemogcm import __version__ as xnemogcm_version" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "f4d1aa0c-e02a-4999-aaeb-88cdf14a8adf", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.4.1\n" - ] - } - ], - "source": [ - "print(xnemogcm_version)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "3d452d15-99de-4dda-a18b-907cace8688a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/4.2.0/open_and_merge/')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "51096969-6558-493c-95ae-e3b82b57cb02", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/43)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - } - ], - "source": [ - "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", - "print(ds)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "b4958894-950c-4150-a312-9b70a94c4387", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on function compute_missing_metrics in module xnemogcm.metrics:\n", - "\n", - "compute_missing_metrics(ds, all_scale_factors=['e3t', 'e3u', 'e3v', 'e3f', 'e3w', 'e3uw', 'e3vw', 'e3fw'], time_varying=True, periodic=False)\n", - " Add all possible scale factors to the dataset.\n", - " \n", - " For the moment, e3t (or e3t_0) at least needs to be present in the dataset\n", - " for the time_varying=True (time_varying=False) case.\n", - " If e3t_0 is not found (e.g. for nemo 3.6), it will raise a warning and use e3t_1d\n", - " (this will lead to wrong results if terrain-following coordinates are used).\n", - " \n", - " May have some boundary issues.\n", - " \n", - " Will add the metrics to the given dataset. To avoid this, use a ds.copy()\n", - " \n", - " Parameters\n", - " ----------\n", - " ds : xarray.Dataset\n", - " dataset containing the scale factors. Must be xgcm compatible (e.g. opened with xnemogcm)\n", - " all_scale_factors : list\n", - " list of the scale factors to compute (nothing is done for the scale factors\n", - " already present in *ds*)\n", - " Must be a sublist of: ['e3t', 'e3u', 'e3v', 'e3f', 'e3w', 'e3uw', 'e3vw', 'e3fw']\n", - " time_varying : bool\n", - " Whether to use the time varying scale factors (True) of the constant ones (False, 'e3x_0')\n", - " \n", - " Returns\n", - " -------\n", - " the new dataset with the scale factors added\n", - "\n" - ] - } - ], - "source": [ - "help(compute_missing_metrics)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "2f5c7a41-ad3d-43f0-baf0-6cfb4fbbb761", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/47)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3f (t, z_c, y_f, x_f) float32 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - } - ], - "source": [ - "# If you just want to get a copy\n", - "print(\n", - " compute_missing_metrics(ds.copy())\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "613b9c7a-724b-4185-856e-70cb9e5364d2", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/47)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3f (t, z_c, y_f, x_f) float32 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - } - ], - "source": [ - "# If you just want to add the scale factor inplace\n", - "compute_missing_metrics(ds)\n", - "print(ds)" - ] - }, - { - "cell_type": "markdown", - "id": "651306d8-2f5c-4c64-9942-461e04756e0c", - "metadata": {}, - "source": [ - "It is also possible to compute the time constant metrics, i.e. the e3x_0" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "aa9bc4a4-8194-4cc5-9bcf-c7cd08bf7cd1", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/48)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3f (t, z_c, y_f, x_f) float32 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - " e3fw_0 (z_f, y_f, x_f) float64 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - } - ], - "source": [ - "print(\n", - " compute_missing_metrics(ds.copy(), time_varying=False)\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "69e30349-cbf9-45cb-bd53-6b2123d6c9c2", - "metadata": {}, - "source": [ - "And it is possible to only compute a subset of the possible metrics" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "b190b080-d2ad-444e-b25f-429ae51028fc", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/44)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - " e3u (t, z_c, y_c, x_f) float32 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - } - ], - "source": [ - "print(\n", - " compute_missing_metrics(ds.drop_vars(['e3u', 'e3v', 'e3f', 'e3w']).copy(), all_scale_factors=['e3u'])\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src_example/open_process_files.ipynb b/src_example/open_process_files.ipynb deleted file mode 100644 index b59ab76..0000000 --- a/src_example/open_process_files.ipynb +++ /dev/null @@ -1,10274 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "d4baf777-28bc-42a2-95d9-714e62b9fa84", - "metadata": {}, - "source": [ - "Start by importing the functions" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "6e326e37-4bfa-4111-bde4-5f3587ab1edd", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.128160Z", - "iopub.status.busy": "2023-03-29T15:17:28.127928Z", - "iopub.status.idle": "2023-03-29T15:17:28.515987Z", - "shell.execute_reply": "2023-03-29T15:17:28.515350Z" - } - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "from xnemogcm import open_domain_cfg, open_nemo, process_nemo, open_namelist, open_nemo_and_domain_cfg\n", - "from xnemogcm import __version__ as xnemogcm_version" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c6f5571a-61ec-408f-8eae-6dee765ee048", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.518960Z", - "iopub.status.busy": "2023-03-29T15:17:28.518496Z", - "iopub.status.idle": "2023-03-29T15:17:28.526296Z", - "shell.execute_reply": "2023-03-29T15:17:28.525772Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'0.4.1'" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "xnemogcm_version" - ] - }, - { - "cell_type": "markdown", - "id": "cf68f882-90a2-420a-b5b5-ceded0c96420", - "metadata": {}, - "source": [ - "# First open the domain_cfg and nemo files into 2 datasets\n", - "## domain" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "3928df5c-06c9-4f4b-a85a-c4fad3170903", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.528500Z", - "iopub.status.busy": "2023-03-29T15:17:28.528305Z", - "iopub.status.idle": "2023-03-29T15:17:28.566306Z", - "shell.execute_reply": "2023-03-29T15:17:28.565741Z" - } - }, - "outputs": [], - "source": [ - "open_domain_cfg?" - ] - }, - { - "cell_type": "markdown", - "id": "add13a99-a665-4d2b-822a-436740a9709a", - "metadata": {}, - "source": [ - "---\n", - "\n", - "You can provide the file names / folder using 3 similar methods:\n", - "1. Give the path to the files and xnemogcm opens the domain_cfg_out and mesh_mesk files\n", - "2. Give the path to the data folder + the name of the files\n", - "3. Give the name of the files that already contain the tree (e.g. ['/path/to/file1', '/path/to/file2']\n", - "\n", - "These 3 methods are equivalent, however if your domain files don't have the strandard names you need to provide them by hand.\n", - "\n", - "We use one of the test folder:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "2ee3aa40-af70-4150-a7e6-ea6f690f364f", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.569047Z", - "iopub.status.busy": "2023-03-29T15:17:28.568607Z", - "iopub.status.idle": "2023-03-29T15:17:28.572140Z", - "shell.execute_reply": "2023-03-29T15:17:28.571591Z" - } - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/4.2.0/open_and_merge/')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "fc2b9b94-5106-427d-9d44-59044cec476a", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.574380Z", - "iopub.status.busy": "2023-03-29T15:17:28.573958Z", - "iopub.status.idle": "2023-03-29T15:17:28.688462Z", - "shell.execute_reply": "2023-03-29T15:17:28.687629Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "GYRE_1y_00010101_00011230_grid_T.nc GYRE_1y_00010101_00011230_grid_W.nc\r\n", - "GYRE_1y_00010101_00011230_grid_U.nc mesh_mask.nc\r\n", - "GYRE_1y_00010101_00011230_grid_V.nc\r\n" - ] - } - ], - "source": [ - "!ls ../xnemogcm/test/data/4.2.0/open_and_merge/" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "5cd1ee94-3ac2-4d95-9610-ea651583af39", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.691707Z", - "iopub.status.busy": "2023-03-29T15:17:28.691336Z", - "iopub.status.idle": "2023-03-29T15:17:29.504439Z", - "shell.execute_reply": "2023-03-29T15:17:29.503906Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/18)\n",
-       "    glamt      (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamu      (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamv      (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamf      (y_f, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphit      (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphiu      (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "  * x_c        (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n",
-       "  * y_c        (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n",
-       "  * z_c        (z_c) int64 0 1 2 3\n",
-       "  * x_f        (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n",
-       "  * y_f        (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n",
-       "  * z_f        (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "Data variables: (12/28)\n",
-       "    tmask      (z_c, y_c, x_c) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    umask      (z_c, y_c, x_f) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    vmask      (z_c, y_f, x_c) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    fmask      (z_c, y_f, x_f) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    tmaskutil  (y_c, x_c) int8 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    umaskutil  (y_c, x_f) int8 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "    e3u_0      (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3v_0      (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3f_0      (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3w_0      (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3uw_0     (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3vw_0     (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "Attributes: (12/13)\n",
-       "    DOMAIN_dimensions_ids:   [1 2]\n",
-       "    DOMAIN_size_global:      [32 22]\n",
-       "    DOMAIN_halo_size_start:  [0 0]\n",
-       "    DOMAIN_halo_size_end:    [0 0]\n",
-       "    DOMAIN_type:             BOX\n",
-       "    CfgName:                 GYRE\n",
-       "    ...                      ...\n",
-       "    Iperio:                  0\n",
-       "    Jperio:                  0\n",
-       "    NFold:                   0\n",
-       "    NFtype:                  -\n",
-       "    VertCoord:               zco\n",
-       "    IsfCav:                  0
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/18)\n", - " glamt (y_c, x_c) float64 dask.array\n", - " glamu (y_c, x_f) float64 dask.array\n", - " glamv (y_f, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " ... ...\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n", - " * z_c (z_c) int64 0 1 2 3\n", - " * x_f (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n", - " * y_f (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - "Data variables: (12/28)\n", - " tmask (z_c, y_c, x_c) int8 dask.array\n", - " umask (z_c, y_c, x_f) int8 dask.array\n", - " vmask (z_c, y_f, x_c) int8 dask.array\n", - " fmask (z_c, y_f, x_f) int8 dask.array\n", - " tmaskutil (y_c, x_c) int8 dask.array\n", - " umaskutil (y_c, x_f) int8 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/13)\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " DOMAIN_size_global: [32 22]\n", - " DOMAIN_halo_size_start: [0 0]\n", - " DOMAIN_halo_size_end: [0 0]\n", - " DOMAIN_type: BOX\n", - " CfgName: GYRE\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "domcfg = open_domain_cfg(datadir=datadir)\n", - "# or\n", - "domcfg = open_domain_cfg(datadir=datadir, files=['mesh_mask.nc'])\n", - "# or\n", - "domcfg = open_domain_cfg(files=datadir.glob('*mesh_mask*.nc'))\n", - "domcfg" - ] - }, - { - "cell_type": "markdown", - "id": "58fde32f-9f84-47f0-90e5-2590d6664ac5", - "metadata": {}, - "source": [ - "## Nemo\n", - "\n", - "2 options here: 1) open netcdf files and make the preprocess automatically with `open_nemo` or 2) open by hand the files (or retrieve them from anywhere, e.g. zarr on a remote) and process using `process_nemo`.\n", - "\n", - "Note: `open_nemo` internally uses `process_nemo`.\n", - "\n", - "### open_nemo" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "6fa2e261-a188-4973-ad6e-6381017ab5bc", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:29.507978Z", - "iopub.status.busy": "2023-03-29T15:17:29.507603Z", - "iopub.status.idle": "2023-03-29T15:17:29.512265Z", - "shell.execute_reply": "2023-03-29T15:17:29.511786Z" - } - }, - "outputs": [], - "source": [ - "open_nemo?" - ] - }, - { - "cell_type": "markdown", - "id": "3bc66d2b-a497-4394-a28f-80ac98587e3a", - "metadata": {}, - "source": [ - "---\n", - "We can provide the files folder / name following the same convention as for the `open_domain_cfg` function. We also need to provide the `domcfg` dataset so xnemogcm knows how to set the variables on the proper grid position. We can also provide extra kwargs to the underlying call to `xarray.open_mfdataset` function." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "9e5a0b8c-7199-46d2-9231-273fc57355f5", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:29.514523Z", - "iopub.status.busy": "2023-03-29T15:17:29.514036Z", - "iopub.status.idle": "2023-03-29T15:17:30.056215Z", - "shell.execute_reply": "2023-03-29T15:17:30.055616Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:               (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n",
-       "                           x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates:\n",
-       "  * z_c                   (z_c) int64 0 1 2 3\n",
-       "    time_centered         (t) object dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "  * t                     (t) object 0001-07-01 00:00:00\n",
-       "  * x_c                   (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n",
-       "  * y_c                   (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n",
-       "    gdept_1d              (z_c) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "  * x_f                   (x_f) float64 0.5 1.5 2.5 3.5 ... 28.5 29.5 30.5 31.5\n",
-       "  * y_f                   (y_f) float64 0.5 1.5 2.5 3.5 ... 18.5 19.5 20.5 21.5\n",
-       "  * z_f                   (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "    gdepw_1d              (z_f) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "Dimensions without coordinates: axis_nbounds\n",
-       "Data variables: (12/15)\n",
-       "    deptht_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    time_centered_bounds  (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    t_bounds              (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    toce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    soce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3t                   (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "    depthv_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    voce                  (t, z_c, y_f, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3v                   (t, z_c, y_f, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    depthw_bounds         (z_f, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    woce                  (t, z_f, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3w                   (t, z_f, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "Attributes:\n",
-       "    Conventions:  CF-1.6\n",
-       "    timeStamp:    2023-Mar-28 10:42:16 GMT\n",
-       "    name:         NEMO dataset\n",
-       "    description:  Ocean grid variables, set on the proper positions\n",
-       "    title:        Ocean grid variables
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates:\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " * x_f (x_f) float64 0.5 1.5 2.5 3.5 ... 28.5 29.5 30.5 31.5\n", - " * y_f (y_f) float64 0.5 1.5 2.5 3.5 ... 18.5 19.5 20.5 21.5\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - " gdepw_1d (z_f) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/15)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " depthv_bounds (z_c, axis_nbounds) float32 dask.array\n", - " voce (t, z_c, y_f, x_c) float32 dask.array\n", - " e3v (t, z_c, y_f, x_c) float32 dask.array\n", - " depthw_bounds (z_f, axis_nbounds) float32 dask.array\n", - " woce (t, z_f, y_c, x_c) float32 dask.array\n", - " e3w (t, z_f, y_c, x_c) float32 dask.array\n", - "Attributes:\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nemo = open_nemo(domcfg=domcfg, datadir=datadir)\n", - "# or\n", - "nemo = open_nemo(domcfg=domcfg, files=datadir.glob('*grid*.nc'))\n", - "# or, using attributes from dataset and not name\n", - "datadir2 = Path('../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", - "nemo = open_nemo(\n", - " domcfg=domcfg, files=[\n", - " datadir2 / 'T.nc',\n", - " datadir2 / 'U.nc',\n", - " datadir2 / 'V.nc',\n", - " datadir2 / 'W.nc'\n", - " ]\n", - ")\n", - "nemo" - ] - }, - { - "cell_type": "markdown", - "id": "72017af7-df86-4f61-b2e4-e9ce2826fcd3", - "metadata": {}, - "source": [ - "### process_nemo" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "e64f0c2a-fe6a-465e-b8c2-8df7db3ea0bb", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:30.058891Z", - "iopub.status.busy": "2023-03-29T15:17:30.058561Z", - "iopub.status.idle": "2023-03-29T15:17:30.063407Z", - "shell.execute_reply": "2023-03-29T15:17:30.062868Z" - } - }, - "outputs": [], - "source": [ - "process_nemo?" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "19b9bd17-e1f4-4be3-8039-7d02311238b0", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:30.065566Z", - "iopub.status.busy": "2023-03-29T15:17:30.065266Z", - "iopub.status.idle": "2023-03-29T15:17:30.190503Z", - "shell.execute_reply": "2023-03-29T15:17:30.189687Z" - } - }, - "outputs": [], - "source": [ - "import xarray as xr\n", - "datadir2 = Path('../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", - "nemo = process_nemo(\n", - " positions=[\n", - " (xr.open_dataset(datadir2 / 'T.nc'), 'T'),\n", - " (xr.open_dataset(datadir2 / 'U.nc'), 'U'),\n", - " (xr.open_dataset(datadir2 / 'V.nc'), 'V'),\n", - " (xr.open_dataset(datadir2 / 'W.nc'), 'W')\n", - " ],\n", - " domcfg=domcfg\n", - ")\n", - "# or, if the datasets contain the attribute 'description'\n", - "nemo = process_nemo(\n", - " positions=[\n", - " (xr.open_dataset(datadir2 / 'T.nc'), None),\n", - " (xr.open_dataset(datadir2 / 'U.nc'), None),\n", - " (xr.open_dataset(datadir2 / 'V.nc'), None),\n", - " (xr.open_dataset(datadir2 / 'W.nc'), None)\n", - " ],\n", - " domcfg=domcfg\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "90ab171c-d3d3-4c8e-897a-3b18a749390f", - "metadata": {}, - "source": [ - "# Open both at once\n", - "\n", - "It is possible to open the domain and nemo output at once in one unique dataset. What happens is that 2 datasets are created and then merged. Thus all option possible for the `open_nemo` and `open_domain_cfg` functions are still possible." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "c3130a23-e65a-4097-a12d-cf41110a0836", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:30.193705Z", - "iopub.status.busy": "2023-03-29T15:17:30.193371Z", - "iopub.status.idle": "2023-03-29T15:17:30.199445Z", - "shell.execute_reply": "2023-03-29T15:17:30.198832Z" - } - }, - "outputs": [], - "source": [ - "open_nemo_and_domain_cfg?" - ] - }, - { - "cell_type": "markdown", - "id": "94f9a258-8204-48dd-9c78-c2859461b113", - "metadata": {}, - "source": [ - "---\n", - "Again, mutiple equivalent arguments are possible to open the data" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "361b5317-a173-4442-a7ec-7f70466d2eb3", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:30.203692Z", - "iopub.status.busy": "2023-03-29T15:17:30.203405Z", - "iopub.status.idle": "2023-03-29T15:17:31.400022Z", - "shell.execute_reply": "2023-03-29T15:17:31.399454Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:               (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n",
-       "                           x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/20)\n",
-       "  * z_c                   (z_c) int64 0 1 2 3\n",
-       "    time_centered         (t) object dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "  * t                     (t) object 0001-07-01 00:00:00\n",
-       "  * x_c                   (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n",
-       "  * y_c                   (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n",
-       "    gdept_1d              (z_c) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "    gphit                 (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphiu                 (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphiv                 (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphif                 (y_f, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gdept_0               (z_c, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    gdepw_0               (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "Dimensions without coordinates: axis_nbounds\n",
-       "Data variables: (12/43)\n",
-       "    deptht_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    time_centered_bounds  (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    t_bounds              (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    toce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    soce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3t                   (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "    e3u_0                 (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3v_0                 (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3f_0                 (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3w_0                 (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3uw_0                (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3vw_0                (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "Attributes: (12/18)\n",
-       "    Conventions:             CF-1.6\n",
-       "    timeStamp:               2023-Mar-28 10:42:16 GMT\n",
-       "    name:                    NEMO dataset\n",
-       "    description:             Ocean grid variables, set on the proper positions\n",
-       "    title:                   Ocean grid variables\n",
-       "    DOMAIN_dimensions_ids:   [1 2]\n",
-       "    ...                      ...\n",
-       "    Iperio:                  0\n",
-       "    Jperio:                  0\n",
-       "    NFold:                   0\n",
-       "    NFtype:                  -\n",
-       "    VertCoord:               zco\n",
-       "    IsfCav:                  0
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/43)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# the simplest for simple cases, provide the path\n", - "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", - "# or provide the files\n", - "ds = open_nemo_and_domain_cfg(nemo_files=datadir.glob('*grid*.nc'), domcfg_files=datadir.glob('*mesh*.nc'))\n", - "# or use the nemo_kwargs and domcfg_kwargs dictionnaries\n", - "ds = open_nemo_and_domain_cfg(nemo_kwargs=dict(datadir=datadir), domcfg_kwargs={'files':datadir.glob('*mesh*.nc')})\n", - "ds" - ] - }, - { - "cell_type": "markdown", - "id": "8bd99220-6f03-476d-9621-36499e9ffedc", - "metadata": {}, - "source": [ - "## Remark\n", - "\n", - "All opening are lazy using dask, which makes files quick to open, until you actually load the data you need" - ] - }, - { - "cell_type": "markdown", - "id": "ea964e50-68db-4394-baec-4b3c5fb90b3e", - "metadata": {}, - "source": [ - "# Namelist\n", - "\n", - "It can be convenient to open the namelist used for the run (e.g. to compare different runs with different parameters). This is possible using the `f90nml` package (it needs to be installed, this is an optional dependency)." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "8a6cb055-e2c2-4d37-be4e-3684b0f12a71", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:31.402997Z", - "iopub.status.busy": "2023-03-29T15:17:31.402560Z", - "iopub.status.idle": "2023-03-29T15:17:31.406932Z", - "shell.execute_reply": "2023-03-29T15:17:31.406343Z" - } - }, - "outputs": [], - "source": [ - "open_namelist?" - ] - }, - { - "cell_type": "markdown", - "id": "c81264ec-2a59-43b6-adfc-b2c19ba96b49", - "metadata": {}, - "source": [ - "---\n", - "Here you provide the folder path containing the reference and configuration namelists, or the filenames (as for nemo and domcfg). You can choose to load both, or only one of them. The configration namelist will overwrite the default one.\n", - "\n", - "For this we need to use another folder of the test data (with simplified namelists for the exemple):" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "1fc7b7ba-cedf-4ebe-8105-de09edcbb7bf", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:31.409186Z", - "iopub.status.busy": "2023-03-29T15:17:31.408895Z", - "iopub.status.idle": "2023-03-29T15:17:31.411631Z", - "shell.execute_reply": "2023-03-29T15:17:31.411084Z" - } - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/namelist/')" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "f413ca78-2d0f-48fd-b9d5-427c4b8ca4b3", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:31.413698Z", - "iopub.status.busy": "2023-03-29T15:17:31.413414Z", - "iopub.status.idle": "2023-03-29T15:17:31.529759Z", - "shell.execute_reply": "2023-03-29T15:17:31.528930Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namelist_cfg namelist_ref\r\n" - ] - } - ], - "source": [ - "!ls ../xnemogcm/test/data/namelist/" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "feabb3f4-f9b7-4092-b423-22db9cae36a1", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:31.533181Z", - "iopub.status.busy": "2023-03-29T15:17:31.532561Z", - "iopub.status.idle": "2023-03-29T15:17:31.547995Z", - "shell.execute_reply": "2023-03-29T15:17:31.547484Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    ()\n",
-       "Data variables:\n",
-       "    nn_no      int64 0\n",
-       "    cn_exp     <U5 'BASIN'\n",
-       "    nn_it000   int64 1\n",
-       "    nn_itend   int64 5840\n",
-       "    rn_e1_deg  float64 1.0
" - ], - "text/plain": [ - "\n", - "Dimensions: ()\n", - "Data variables:\n", - " nn_no int64 0\n", - " cn_exp \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.DataArray 'nn_it000' ()>\n",
-       "array(1)\n",
-       "Attributes:\n",
-       "    namelist:  namrun
" - ], - "text/plain": [ - "\n", - "array(1)\n", - "Attributes:\n", - " namelist: namrun" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nam.nn_it000" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/src_example/recombing_mesh_mask_domain_cfg.ipynb b/src_example/recombing_mesh_mask_domain_cfg.ipynb deleted file mode 100644 index 79c8350..0000000 --- a/src_example/recombing_mesh_mask_domain_cfg.ipynb +++ /dev/null @@ -1,3284 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "41aec3c0-ece5-4ba1-b47f-d7a6d67b0860", - "metadata": {}, - "source": [ - "Start by importing the functions" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "18606253-a4d5-4f6a-9da8-7dfd96b72bea", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:32.904175Z", - "iopub.status.busy": "2023-03-29T15:17:32.903942Z", - "iopub.status.idle": "2023-03-29T15:17:33.292390Z", - "shell.execute_reply": "2023-03-29T15:17:33.291757Z" - } - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "from xnemogcm import open_domain_cfg, open_nemo_and_domain_cfg\n", - "from xnemogcm import __version__ as xnemogcm_version" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "84a7b456-0689-4cc7-b497-c41ea62ad477", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:33.295305Z", - "iopub.status.busy": "2023-03-29T15:17:33.294812Z", - "iopub.status.idle": "2023-03-29T15:17:33.302705Z", - "shell.execute_reply": "2023-03-29T15:17:33.302193Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'0.4.1'" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "xnemogcm_version" - ] - }, - { - "cell_type": "markdown", - "id": "96f57a3d-4035-4c7b-acb5-5ae843eb87fd", - "metadata": {}, - "source": [ - "By default nemo outputs a mesh_mask / domain_cfg file per computing processor, if the namelist parameter is set on .true.:\n", - "\n", - "* `ln_write_cfg = .true.` to output the domain_cfg if created analyticaly in the usrdef_zgr.F90 and usrdef_hgr.F90 files\n", - "* `ln_meshmask = .true.` to output the mesh_mask files (that also contain the masks)\n", - "\n", - "While it is possible to recombine the files using the nemo fortran toolbox, xnemogcm can also recombine them easily.\n", - "\n", - "To illustrate this, we use a data folder from the test data:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "7e7eb827-e9ff-4652-8e11-c3ad01b1a65e", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:33.305220Z", - "iopub.status.busy": "2023-03-29T15:17:33.304915Z", - "iopub.status.idle": "2023-03-29T15:17:33.308137Z", - "shell.execute_reply": "2023-03-29T15:17:33.307575Z" - } - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "9874f77d-9755-4881-afaf-0fe72f61950e", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:33.310315Z", - "iopub.status.busy": "2023-03-29T15:17:33.310027Z", - "iopub.status.idle": "2023-03-29T15:17:33.424492Z", - "shell.execute_reply": "2023-03-29T15:17:33.423640Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mesh_mask_0000.nc mesh_mask_0001.nc mesh_mask_0002.nc mesh_mask_0003.nc\r\n" - ] - } - ], - "source": [ - "!ls ../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "193b27f6-8421-4cbd-be2e-228a8705a792", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:33.428228Z", - "iopub.status.busy": "2023-03-29T15:17:33.427622Z", - "iopub.status.idle": "2023-03-29T15:17:34.176712Z", - "shell.execute_reply": "2023-03-29T15:17:34.176187Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/18)\n",
-       "    glamt      (y_c, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    glamu      (y_c, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    glamv      (y_f, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    glamf      (y_f, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    gphit      (y_c, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    gphiu      (y_c, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "  * x_c        (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n",
-       "  * y_c        (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n",
-       "  * z_c        (z_c) int64 0 1 2 3\n",
-       "  * x_f        (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n",
-       "  * y_f        (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n",
-       "  * z_f        (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "Data variables: (12/28)\n",
-       "    tmask      (z_c, y_c, x_c) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    umask      (z_c, y_c, x_f) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    vmask      (z_c, y_f, x_c) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    fmask      (z_c, y_f, x_f) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    tmaskutil  (y_c, x_c) int8 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    umaskutil  (y_c, x_f) int8 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "    e3u_0      (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3v_0      (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3f_0      (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3w_0      (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3uw_0     (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3vw_0     (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "Attributes: (12/13)\n",
-       "    DOMAIN_dimensions_ids:   [1 2]\n",
-       "    DOMAIN_size_global:      [32 22]\n",
-       "    DOMAIN_halo_size_start:  [0 0]\n",
-       "    DOMAIN_halo_size_end:    [0 0]\n",
-       "    DOMAIN_type:             BOX\n",
-       "    CfgName:                 GYRE\n",
-       "    ...                      ...\n",
-       "    Iperio:                  0\n",
-       "    Jperio:                  0\n",
-       "    NFold:                   0\n",
-       "    NFtype:                  -\n",
-       "    VertCoord:               zco\n",
-       "    IsfCav:                  0
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/18)\n", - " glamt (y_c, x_c) float64 dask.array\n", - " glamu (y_c, x_f) float64 dask.array\n", - " glamv (y_f, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " ... ...\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n", - " * z_c (z_c) int64 0 1 2 3\n", - " * x_f (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n", - " * y_f (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - "Data variables: (12/28)\n", - " tmask (z_c, y_c, x_c) int8 dask.array\n", - " umask (z_c, y_c, x_f) int8 dask.array\n", - " vmask (z_c, y_f, x_c) int8 dask.array\n", - " fmask (z_c, y_f, x_f) int8 dask.array\n", - " tmaskutil (y_c, x_c) int8 dask.array\n", - " umaskutil (y_c, x_f) int8 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/13)\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " DOMAIN_size_global: [32 22]\n", - " DOMAIN_halo_size_start: [0 0]\n", - " DOMAIN_halo_size_end: [0 0]\n", - " DOMAIN_type: BOX\n", - " CfgName: GYRE\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "domcfg = open_domain_cfg(datadir=datadir)\n", - "domcfg" - ] - }, - { - "cell_type": "markdown", - "id": "475a6a89-9353-4c11-b49f-f0874b304546", - "metadata": {}, - "source": [ - "We verify that the variables are the same than when opening a unique full mesh_mask file." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "1143759e-b37e-4352-b05c-bad53db8a3b2", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:34.180003Z", - "iopub.status.busy": "2023-03-29T15:17:34.179479Z", - "iopub.status.idle": "2023-03-29T15:17:34.380865Z", - "shell.execute_reply": "2023-03-29T15:17:34.380226Z" - } - }, - "outputs": [], - "source": [ - "domcfg_1_file = open_domain_cfg(datadir=Path('../xnemogcm/test/data/4.2.0/mesh_mask_1_file/'), files=['mesh_mask.nc'])" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "771405fe-0fef-4bce-a760-bd3d2463b831", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:34.384149Z", - "iopub.status.busy": "2023-03-29T15:17:34.383515Z", - "iopub.status.idle": "2023-03-29T15:17:34.828933Z", - "shell.execute_reply": "2023-03-29T15:17:34.828376Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "domcfg_1_file.equals(domcfg)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} From 63f0e16c26b531a6736773cd6d071d7697744547 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:14:05 +0100 Subject: [PATCH 09/18] correct poetry path --- .readthedocs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index ec12a71..eeaf073 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -15,7 +15,7 @@ build: # https://python-poetry.org/docs/#installing-with-the-official-installer - curl -sSL https://install.python-poetry.org | python3 - # Tell poetry to not use a virtual environment - - poetry config virtualenvs.create false + - $HOME/.local/bin/poetry config virtualenvs.create false post_install: # Install dependencies with 'docs' dependency group # https://python-poetry.org/docs/managing-dependencies/#dependency-groups From f17ac7041544e57a1415d339647740bb8d780be3 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:14:52 +0100 Subject: [PATCH 10/18] now moved to doc --- .github/workflows/ci_run_notebook.yml | 63 --------------------------- 1 file changed, 63 deletions(-) delete mode 100644 .github/workflows/ci_run_notebook.yml diff --git a/.github/workflows/ci_run_notebook.yml b/.github/workflows/ci_run_notebook.yml deleted file mode 100644 index f54c618..0000000 --- a/.github/workflows/ci_run_notebook.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Run Notebooks in examples -on: - push: - branches: - - master - -jobs: - build_doc: - name: build notebook doc - runs-on: ubuntu-latest - permissions: - # Give the default GITHUB_TOKEN write permission to commit and push the - # added or changed files to the repository. - contents: write - pull-requests: write - strategy: - fail-fast: false - steps: - - uses: actions/checkout@v2 - - name: Set up Python 3.11 - uses: actions/setup-python@v2 - with: - python-version: 3.11 - - name: Run poetry - uses: abatilo/actions-poetry@v2.0.0 - with: - poetry-version: 1.3.2 - - name: Install / build - run: poetry install --with dev,test - - name: Install nbdiff - run: | - python3 -m pip install --user pipx - python3 -m pipx ensurepath - pipx install nbdime==3.1.1 - pipx inject nbdime ipython_genutils - - name: Run nbconvert - run: | - mv example tmp - mkdir example - poetry run jupyter nbconvert --to notebook --execute src_example/*.ipynb --output-dir example - - name: Check differences - run: | - cd example - for n in *.ipynb; do - output_diff=$( nbdiff -os $n ../tmp/$n ) - if [ -z "$output_diff" ] - then - # output is empty - we copy back the old notebook export to keep metadata - cp ../tmp/$n $n - fi - done - # Make changes to pull request here - - name: Create Pull Request - id: cpr - uses: peter-evans/create-pull-request@v4 - with: - branch: create-pull-request-patch-${{ github.sha }} - - name: Merge PR - env: - GH_TOKEN: ${{ github.token }} - if: ${{ steps.cpr.outputs.pull-request-number }} - run: | - gh pr merge --auto --merge "${{ steps.cpr.outputs.pull-request-number }}" From 9d0768407a1a10ac5a27929fd8f58654cb4f1f71 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:15:44 +0100 Subject: [PATCH 11/18] rm python 3.8 --- .github/workflows/ci.yml | 4 ++-- .github/workflows/ci_upgrade_dependencies.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3e9b691..5298cbc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: fail-fast: false matrix: os: ["ubuntu-latest", "macos-latest"] - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] steps: - uses: actions/checkout@v2 @@ -35,7 +35,7 @@ jobs: fail-fast: false matrix: os: ["ubuntu-latest"] - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.9", "3.10", "3.11"] poetry-version: ["1.3.2"] steps: - name: Checkout diff --git a/.github/workflows/ci_upgrade_dependencies.yml b/.github/workflows/ci_upgrade_dependencies.yml index ec5013e..c1f3fbb 100644 --- a/.github/workflows/ci_upgrade_dependencies.yml +++ b/.github/workflows/ci_upgrade_dependencies.yml @@ -26,7 +26,7 @@ jobs: fail-fast: false matrix: os: ["ubuntu-latest"] - python-version: ["3.8"] + python-version: ["3.9"] poetry-version: ["1.3.2"] steps: - name: Checkout From 0df4a8ee74bc27fb0536074c133f928c6b8b433a Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:22:48 +0100 Subject: [PATCH 12/18] try to install --- .readthedocs.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index eeaf073..f69e667 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -19,6 +19,8 @@ build: post_install: # Install dependencies with 'docs' dependency group # https://python-poetry.org/docs/managing-dependencies/#dependency-groups + - which python + - which python3 - $HOME/.local/bin/poetry install --with docs mkdocs: From 3c2b559025ef951ded93726fac8e01fab69d72ec Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:27:45 +0100 Subject: [PATCH 13/18] try to install --- .readthedocs.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index f69e667..a0ffe6b 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -19,8 +19,8 @@ build: post_install: # Install dependencies with 'docs' dependency group # https://python-poetry.org/docs/managing-dependencies/#dependency-groups - - which python - - which python3 + - python --version + - python3 --version - $HOME/.local/bin/poetry install --with docs mkdocs: From 9622838346a4b1cfd8d7f79686548080244e94d9 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:28:14 +0100 Subject: [PATCH 14/18] wip --- .github/workflows/ci.yml | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5298cbc..8692068 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,24 +53,3 @@ jobs: poetry install --with test - name: Run tests with pytest run: poetry run pytest xnemogcm/test - - - test_notebooks: - name: test notebook doc - runs-on: ubuntu-latest - strategy: - fail-fast: false - steps: - - uses: actions/checkout@v2 - - name: Set up Python 3.11 - uses: actions/setup-python@v2 - with: - python-version: 3.11 - - name: Run poetry - uses: abatilo/actions-poetry@v2.0.0 - with: - poetry-version: 1.3.2 - - name: Install / build - run: poetry install --with dev,test - - name: Run nbconvert - run: poetry run jupyter nbconvert --to notebook --execute src_example/*.ipynb --stdout From 0fb392b5c6339239a3dd585b414920f53332c451 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:32:01 +0100 Subject: [PATCH 15/18] try to install --- .readthedocs.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index a0ffe6b..c858bd5 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -19,9 +19,8 @@ build: post_install: # Install dependencies with 'docs' dependency group # https://python-poetry.org/docs/managing-dependencies/#dependency-groups - - python --version - - python3 --version - - $HOME/.local/bin/poetry install --with docs + - python -m pip install --requirement <($HOME/.local/bin/poetry export --with docs --format requirements.txt) + - python -m pip install --no-deps . mkdocs: configuration: mkdocs.yml From ad9a6e08c706d7205c56f9799de1689b1d3f7be8 Mon Sep 17 00:00:00 2001 From: Romain Date: Sun, 4 Feb 2024 22:35:17 +0100 Subject: [PATCH 16/18] try to install --- .readthedocs.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index c858bd5..8555865 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -19,7 +19,8 @@ build: post_install: # Install dependencies with 'docs' dependency group # https://python-poetry.org/docs/managing-dependencies/#dependency-groups - - python -m pip install --requirement <($HOME/.local/bin/poetry export --with docs --format requirements.txt) + - $HOME/.local/bin/poetry export --with docs --format requirements.txt > requirements.txt + - python -m pip install -r requirements.txt - python -m pip install --no-deps . mkdocs: From 1aca4e425270b2f5a9b0165b383b853aace942c6 Mon Sep 17 00:00:00 2001 From: Romain Date: Mon, 5 Feb 2024 11:54:14 +0100 Subject: [PATCH 17/18] update doc --- README.md | 4 +- docs/dev.md | 13 + docs/examples/compute_metrics.ipynb | 163 + docs/examples/open_process_files.ipynb | 358 + .../recombing_mesh_mask_domain_cfg.ipynb | 130 + docs/index.md | 41 +- docs/src_example/compute_metrics.ipynb | 504 - docs/src_example/open_process_files.ipynb | 10274 --------------- .../recombing_mesh_mask_domain_cfg.ipynb | 3284 ----- example/compute_metrics.ipynb | 558 - example/open_process_files.ipynb | 10763 ---------------- example/recombing_mesh_mask_domain_cfg.ipynb | 3283 ----- mkdocs.yml | 10 +- 13 files changed, 683 insertions(+), 28702 deletions(-) create mode 100644 docs/dev.md create mode 100644 docs/examples/compute_metrics.ipynb create mode 100644 docs/examples/open_process_files.ipynb create mode 100644 docs/examples/recombing_mesh_mask_domain_cfg.ipynb delete mode 100644 docs/src_example/compute_metrics.ipynb delete mode 100644 docs/src_example/open_process_files.ipynb delete mode 100644 docs/src_example/recombing_mesh_mask_domain_cfg.ipynb delete mode 100644 example/compute_metrics.ipynb delete mode 100644 example/open_process_files.ipynb delete mode 100644 example/recombing_mesh_mask_domain_cfg.ipynb diff --git a/README.md b/README.md index 9bb9924..ff3a0a1 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ Interface to open NEMO ocean global circulation model output dataset and create NEMO 3.6, 4.0, and 4.2.0 are tested and supported. Any version between 3.6 and 4.2.0 should work, but in case of trouble, [please open an issue](https://github.com/rcaneill/xnemogcm/issues). -This repository is mirrored at https://gitlab.com/open-ocean/xnemogcm. If you wish to contribute but don't have a github account, send me an email with your questions or comments: `romain [dot] caneill [at] ens-lyon [.] org` ## Usage @@ -28,3 +27,6 @@ from xnemogcm import get_metrics import xgcm grid = xgcm.Grid(ds, metrics=get_metrics(ds), periodic=False) ``` + +[The full documentation is hosted online: +[https://xnemogcm.readthedocs.io/](https://xnemogcm.readthedocs.io/) diff --git a/docs/dev.md b/docs/dev.md new file mode 100644 index 0000000..d2a43a4 --- /dev/null +++ b/docs/dev.md @@ -0,0 +1,13 @@ +## Requirements for dev + +We use *poetry* to set up a virtual environment containing all +needed packages to run xnemogcm and the tests. +To install all the dependencies, type `poetry install --with test,dev,docs` +after cloning the directory. This will create a new virtual environment. +Typing `poetry shell` in the package directory will activate the virtual environment. + +## About test data + +Test data are based on the GYRE configuration, and produced by another repository: +[rcaneill/xnemogcm_test_data](https://github.com/rcaneill/xnemogcm_test_data). +Testing is built in a way that it is quite easy to add other nemo version to test. diff --git a/docs/examples/compute_metrics.ipynb b/docs/examples/compute_metrics.ipynb new file mode 100644 index 0000000..e9f7028 --- /dev/null +++ b/docs/examples/compute_metrics.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "9975d773-21bd-40e2-8795-38e70753bd05", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from xnemogcm import open_nemo_and_domain_cfg\n", + "from xnemogcm.metrics import compute_missing_metrics\n", + "from xnemogcm import __version__ as xnemogcm_version" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f4d1aa0c-e02a-4999-aaeb-88cdf14a8adf", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "print(xnemogcm_version)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3d452d15-99de-4dda-a18b-907cace8688a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "datadir = Path('../../xnemogcm/test/data/4.2.0/open_and_merge/')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "51096969-6558-493c-95ae-e3b82b57cb02", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", + "print(ds)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4958894-950c-4150-a312-9b70a94c4387", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "help(compute_missing_metrics)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f5c7a41-ad3d-43f0-baf0-6cfb4fbbb761", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# If you just want to get a copy\n", + "print(\n", + " compute_missing_metrics(ds.copy())\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "613b9c7a-724b-4185-856e-70cb9e5364d2", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# If you just want to add the scale factor inplace\n", + "compute_missing_metrics(ds)\n", + "print(ds)" + ] + }, + { + "cell_type": "markdown", + "id": "651306d8-2f5c-4c64-9942-461e04756e0c", + "metadata": {}, + "source": [ + "It is also possible to compute the time constant metrics, i.e. the e3x_0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aa9bc4a4-8194-4cc5-9bcf-c7cd08bf7cd1", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "print(\n", + " compute_missing_metrics(ds.copy(), time_varying=False)\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "69e30349-cbf9-45cb-bd53-6b2123d6c9c2", + "metadata": {}, + "source": [ + "And it is possible to only compute a subset of the possible metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b190b080-d2ad-444e-b25f-429ae51028fc", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "print(\n", + " compute_missing_metrics(ds.drop_vars(['e3u', 'e3v', 'e3f', 'e3w']).copy(), all_scale_factors=['e3u'])\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/examples/open_process_files.ipynb b/docs/examples/open_process_files.ipynb new file mode 100644 index 0000000..2409f3e --- /dev/null +++ b/docs/examples/open_process_files.ipynb @@ -0,0 +1,358 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d4baf777-28bc-42a2-95d9-714e62b9fa84", + "metadata": {}, + "source": [ + "Start by importing the functions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6e326e37-4bfa-4111-bde4-5f3587ab1edd", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from xnemogcm import open_domain_cfg, open_nemo, process_nemo, open_namelist, open_nemo_and_domain_cfg\n", + "from xnemogcm import __version__ as xnemogcm_version" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c6f5571a-61ec-408f-8eae-6dee765ee048", + "metadata": {}, + "outputs": [], + "source": [ + "xnemogcm_version" + ] + }, + { + "cell_type": "markdown", + "id": "cf68f882-90a2-420a-b5b5-ceded0c96420", + "metadata": {}, + "source": [ + "## First open the domain_cfg and nemo files into 2 datasets\n", + "### domain" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3928df5c-06c9-4f4b-a85a-c4fad3170903", + "metadata": {}, + "outputs": [], + "source": [ + "help(open_domain_cfg)" + ] + }, + { + "cell_type": "markdown", + "id": "add13a99-a665-4d2b-822a-436740a9709a", + "metadata": {}, + "source": [ + "---\n", + "\n", + "You can provide the file names / folder using 3 similar methods:\n", + "1. Give the path to the files and xnemogcm opens the domain_cfg_out and mesh_mesk files\n", + "2. Give the path to the data folder + the name of the files\n", + "3. Give the name of the files that already contain the tree (e.g. ['/path/to/file1', '/path/to/file2']\n", + "\n", + "These 3 methods are equivalent, however if your domain files don't have the strandard names you need to provide them by hand.\n", + "\n", + "We use one of the test folder:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2ee3aa40-af70-4150-a7e6-ea6f690f364f", + "metadata": {}, + "outputs": [], + "source": [ + "datadir = Path('../../xnemogcm/test/data/4.2.0/open_and_merge/')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fc2b9b94-5106-427d-9d44-59044cec476a", + "metadata": {}, + "outputs": [], + "source": [ + "!ls ../xnemogcm/test/data/4.2.0/open_and_merge/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5cd1ee94-3ac2-4d95-9610-ea651583af39", + "metadata": {}, + "outputs": [], + "source": [ + "domcfg = open_domain_cfg(datadir=datadir)\n", + "# or\n", + "domcfg = open_domain_cfg(datadir=datadir, files=['mesh_mask.nc'])\n", + "# or\n", + "domcfg = open_domain_cfg(files=datadir.glob('*mesh_mask*.nc'))\n", + "domcfg" + ] + }, + { + "cell_type": "markdown", + "id": "58fde32f-9f84-47f0-90e5-2590d6664ac5", + "metadata": {}, + "source": [ + "### Nemo\n", + "\n", + "2 options here: 1) open netcdf files and make the preprocess automatically with `open_nemo` or 2) open by hand the files (or retrieve them from anywhere, e.g. zarr on a remote) and process using `process_nemo`.\n", + "\n", + "Note: `open_nemo` internally uses `process_nemo`.\n", + "\n", + "#### open_nemo" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6fa2e261-a188-4973-ad6e-6381017ab5bc", + "metadata": {}, + "outputs": [], + "source": [ + "help(open_nemo)" + ] + }, + { + "cell_type": "markdown", + "id": "3bc66d2b-a497-4394-a28f-80ac98587e3a", + "metadata": {}, + "source": [ + "---\n", + "We can provide the files folder / name following the same convention as for the `open_domain_cfg` function. We also need to provide the `domcfg` dataset so xnemogcm knows how to set the variables on the proper grid position. We can also provide extra kwargs to the underlying call to `xarray.open_mfdataset` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9e5a0b8c-7199-46d2-9231-273fc57355f5", + "metadata": {}, + "outputs": [], + "source": [ + "nemo = open_nemo(domcfg=domcfg, datadir=datadir)\n", + "# or\n", + "nemo = open_nemo(domcfg=domcfg, files=datadir.glob('*grid*.nc'))\n", + "# or, using attributes from dataset and not name\n", + "datadir2 = Path('../../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", + "nemo = open_nemo(\n", + " domcfg=domcfg, files=[\n", + " datadir2 / 'T.nc',\n", + " datadir2 / 'U.nc',\n", + " datadir2 / 'V.nc',\n", + " datadir2 / 'W.nc'\n", + " ]\n", + ")\n", + "nemo" + ] + }, + { + "cell_type": "markdown", + "id": "72017af7-df86-4f61-b2e4-e9ce2826fcd3", + "metadata": {}, + "source": [ + "#### process_nemo" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e64f0c2a-fe6a-465e-b8c2-8df7db3ea0bb", + "metadata": {}, + "outputs": [], + "source": [ + "help(process_nemo)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "19b9bd17-e1f4-4be3-8039-7d02311238b0", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr\n", + "datadir2 = Path('../../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", + "nemo = process_nemo(\n", + " positions=[\n", + " (xr.open_dataset(datadir2 / 'T.nc'), 'T'),\n", + " (xr.open_dataset(datadir2 / 'U.nc'), 'U'),\n", + " (xr.open_dataset(datadir2 / 'V.nc'), 'V'),\n", + " (xr.open_dataset(datadir2 / 'W.nc'), 'W')\n", + " ],\n", + " domcfg=domcfg\n", + ")\n", + "# or, if the datasets contain the attribute 'description'\n", + "nemo = process_nemo(\n", + " positions=[\n", + " (xr.open_dataset(datadir2 / 'T.nc'), None),\n", + " (xr.open_dataset(datadir2 / 'U.nc'), None),\n", + " (xr.open_dataset(datadir2 / 'V.nc'), None),\n", + " (xr.open_dataset(datadir2 / 'W.nc'), None)\n", + " ],\n", + " domcfg=domcfg\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "90ab171c-d3d3-4c8e-897a-3b18a749390f", + "metadata": {}, + "source": [ + "## Open both at once\n", + "\n", + "It is possible to open the domain and nemo output at once in one unique dataset. What happens is that 2 datasets are created and then merged. Thus all option possible for the `open_nemo` and `open_domain_cfg` functions are still possible." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c3130a23-e65a-4097-a12d-cf41110a0836", + "metadata": {}, + "outputs": [], + "source": [ + "help(open_nemo_and_domain_cfg)" + ] + }, + { + "cell_type": "markdown", + "id": "94f9a258-8204-48dd-9c78-c2859461b113", + "metadata": {}, + "source": [ + "---\n", + "Again, mutiple equivalent arguments are possible to open the data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "361b5317-a173-4442-a7ec-7f70466d2eb3", + "metadata": {}, + "outputs": [], + "source": [ + "# the simplest for simple cases, provide the path\n", + "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", + "# or provide the files\n", + "ds = open_nemo_and_domain_cfg(nemo_files=datadir.glob('*grid*.nc'), domcfg_files=datadir.glob('*mesh*.nc'))\n", + "# or use the nemo_kwargs and domcfg_kwargs dictionnaries\n", + "ds = open_nemo_and_domain_cfg(nemo_kwargs=dict(datadir=datadir), domcfg_kwargs={'files':datadir.glob('*mesh*.nc')})\n", + "ds" + ] + }, + { + "cell_type": "markdown", + "id": "8bd99220-6f03-476d-9621-36499e9ffedc", + "metadata": {}, + "source": [ + "### Remark\n", + "\n", + "All opening are lazy using dask, which makes files quick to open, until you actually load the data you need" + ] + }, + { + "cell_type": "markdown", + "id": "ea964e50-68db-4394-baec-4b3c5fb90b3e", + "metadata": {}, + "source": [ + "## Namelist\n", + "\n", + "It can be convenient to open the namelist used for the run (e.g. to compare different runs with different parameters). This is possible using the `f90nml` package (it needs to be installed, this is an optional dependency)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8a6cb055-e2c2-4d37-be4e-3684b0f12a71", + "metadata": {}, + "outputs": [], + "source": [ + "help(open_namelist)" + ] + }, + { + "cell_type": "markdown", + "id": "c81264ec-2a59-43b6-adfc-b2c19ba96b49", + "metadata": {}, + "source": [ + "---\n", + "Here you provide the folder path containing the reference and configuration namelists, or the filenames (as for nemo and domcfg). You can choose to load both, or only one of them. The configration namelist will overwrite the default one.\n", + "\n", + "For this we need to use another folder of the test data (with simplified namelists for the exemple):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1fc7b7ba-cedf-4ebe-8105-de09edcbb7bf", + "metadata": {}, + "outputs": [], + "source": [ + "datadir = Path('../../xnemogcm/test/data/namelist/')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f413ca78-2d0f-48fd-b9d5-427c4b8ca4b3", + "metadata": {}, + "outputs": [], + "source": [ + "!ls ../xnemogcm/test/data/namelist/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "feabb3f4-f9b7-4092-b423-22db9cae36a1", + "metadata": {}, + "outputs": [], + "source": [ + "nam = open_namelist(datadir)\n", + "nam" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8c51560d-1f06-4192-997a-db0f89629557", + "metadata": {}, + "outputs": [], + "source": [ + "nam.nn_it000" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/examples/recombing_mesh_mask_domain_cfg.ipynb b/docs/examples/recombing_mesh_mask_domain_cfg.ipynb new file mode 100644 index 0000000..bcddb89 --- /dev/null +++ b/docs/examples/recombing_mesh_mask_domain_cfg.ipynb @@ -0,0 +1,130 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "41aec3c0-ece5-4ba1-b47f-d7a6d67b0860", + "metadata": {}, + "source": [ + "Start by importing the functions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "18606253-a4d5-4f6a-9da8-7dfd96b72bea", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "from xnemogcm import open_domain_cfg, open_nemo_and_domain_cfg\n", + "from xnemogcm import __version__ as xnemogcm_version" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "84a7b456-0689-4cc7-b497-c41ea62ad477", + "metadata": {}, + "outputs": [], + "source": [ + "xnemogcm_version" + ] + }, + { + "cell_type": "markdown", + "id": "96f57a3d-4035-4c7b-acb5-5ae843eb87fd", + "metadata": {}, + "source": [ + "By default nemo outputs a mesh_mask / domain_cfg file per computing processor, if the namelist parameter is set on .true.:\n", + "\n", + "* `ln_write_cfg = .true.` to output the domain_cfg if created analyticaly in the usrdef_zgr.F90 and usrdef_hgr.F90 files\n", + "* `ln_meshmask = .true.` to output the mesh_mask files (that also contain the masks)\n", + "\n", + "While it is possible to recombine the files using the nemo fortran toolbox, xnemogcm can also recombine them easily.\n", + "\n", + "To illustrate this, we use a data folder from the test data:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7e7eb827-e9ff-4652-8e11-c3ad01b1a65e", + "metadata": {}, + "outputs": [], + "source": [ + "datadir = Path('../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9874f77d-9755-4881-afaf-0fe72f61950e", + "metadata": {}, + "outputs": [], + "source": [ + "!ls ../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "193b27f6-8421-4cbd-be2e-228a8705a792", + "metadata": {}, + "outputs": [], + "source": [ + "domcfg = open_domain_cfg(datadir=datadir)\n", + "domcfg" + ] + }, + { + "cell_type": "markdown", + "id": "475a6a89-9353-4c11-b49f-f0874b304546", + "metadata": {}, + "source": [ + "We verify that the variables are the same than when opening a unique full mesh_mask file." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1143759e-b37e-4352-b05c-bad53db8a3b2", + "metadata": {}, + "outputs": [], + "source": [ + "domcfg_1_file = open_domain_cfg(datadir=Path('../xnemogcm/test/data/4.2.0/mesh_mask_1_file/'), files=['mesh_mask.nc'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "771405fe-0fef-4bce-a760-bd3d2463b831", + "metadata": {}, + "outputs": [], + "source": [ + "domcfg_1_file.equals(domcfg)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/index.md b/docs/index.md index ef9d18e..623f80b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,7 +9,6 @@ Interface to open NEMO ocean global circulation model output dataset and create NEMO 3.6, 4.0, and 4.2.0 are tested and supported. Any version between 3.6 and 4.2.0 should work, but in case of trouble, [please open an issue](https://github.com/rcaneill/xnemogcm/issues). -This repository is mirrored at https://gitlab.com/open-ocean/xnemogcm. If you wish to contribute but don't have a github account, send me an email with your questions or comments: `romain [dot] caneill [at] ens-lyon [.] org` ## Usage @@ -29,18 +28,20 @@ import xgcm grid = xgcm.Grid(ds, metrics=get_metrics(ds), periodic=False) ``` -See the [example](https://nbviewer.ipython.org/github/rcaneill/xnemogcm/blob/master/example/) -directory for some jupyter notebook examples. -xnemocgm is able to process xarray.Datasets (e.g. they could be retrieved from a remote server), -and can get information of the variables grid points with multiple options -(see [example/open_process_files.ipynb](https://nbviewer.ipython.org/github/rcaneill/xnemogcm/blob/master/example/open_process_files.ipynb). +## Examples -### Note +`xnemocgm` is able to process xarray.Datasets (e.g. they could be retrieved from a remote server), +and can get information of the variables grid points with multiple options: +see [examples/open_process_files](examples/open_process_files). `xnemogcm` is capable or recombining the domain_cfg and mesh_mask files output by multiple processors, -the recombining tool from the NEMO toolbox is thus not needed here, see -the [example/recombing_mesh_mask_domain_cfg.ipynb](https://nbviewer.ipython.org/github/rcaneill/xnemogcm/blob/master/example/recombing_mesh_mask_domain_cfg.ipynb) +the recombining tool from the NEMO toolbox is thus not needed here: see +[examples/recombing_mesh_mask_domain_cfg](examples/recombing_mesh_mask_domain_cfg). + +`xnemogcm` has a minimum capability of computing missing metrics +(scale factors): see [examples/compute_metrics](examples/compute_metrics). + ## Installation @@ -53,25 +54,3 @@ Installation via conda: ```bash conda install -c conda-forge xnemogcm ``` - -## Requirements for dev - -We use *poetry* to set up a virtual environment containing all -needed packages to run xnemogcm and the tests. -To install all the dependencies, type `poetry install --with test,dev` -after cloning the directory. This will create a new virtual environment. -Typing `poetry shell` in the package directory will activate the virtual environment. - -### About test data - -Test data are based on the GYRE configuration, and produced by another repository: -[rcaneill/xnemogcm_test_data](https://github.com/rcaneill/xnemogcm_test_data). -Testing is built in a way that it is quite easy to add other nemo version to test. - -### About notebooks examples - -Sources for the notebooks are located in `src_example`. This is where to add / modify the -examples. A github action is set to automatically build the notebook according to -the latest version of the code, and publish them to `example` when commiting to master branch. - - diff --git a/docs/src_example/compute_metrics.ipynb b/docs/src_example/compute_metrics.ipynb deleted file mode 100644 index 0b0ab1e..0000000 --- a/docs/src_example/compute_metrics.ipynb +++ /dev/null @@ -1,504 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "9975d773-21bd-40e2-8795-38e70753bd05", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "from xnemogcm import open_nemo_and_domain_cfg\n", - "from xnemogcm.metrics import compute_missing_metrics\n", - "from xnemogcm import __version__ as xnemogcm_version" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "f4d1aa0c-e02a-4999-aaeb-88cdf14a8adf", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.4.1\n" - ] - } - ], - "source": [ - "print(xnemogcm_version)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "3d452d15-99de-4dda-a18b-907cace8688a", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/4.2.0/open_and_merge/')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "51096969-6558-493c-95ae-e3b82b57cb02", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/43)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - } - ], - "source": [ - "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", - "print(ds)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "b4958894-950c-4150-a312-9b70a94c4387", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on function compute_missing_metrics in module xnemogcm.metrics:\n", - "\n", - "compute_missing_metrics(ds, all_scale_factors=['e3t', 'e3u', 'e3v', 'e3f', 'e3w', 'e3uw', 'e3vw', 'e3fw'], time_varying=True, periodic=False)\n", - " Add all possible scale factors to the dataset.\n", - " \n", - " For the moment, e3t (or e3t_0) at least needs to be present in the dataset\n", - " for the time_varying=True (time_varying=False) case.\n", - " If e3t_0 is not found (e.g. for nemo 3.6), it will raise a warning and use e3t_1d\n", - " (this will lead to wrong results if terrain-following coordinates are used).\n", - " \n", - " May have some boundary issues.\n", - " \n", - " Will add the metrics to the given dataset. To avoid this, use a ds.copy()\n", - " \n", - " Parameters\n", - " ----------\n", - " ds : xarray.Dataset\n", - " dataset containing the scale factors. Must be xgcm compatible (e.g. opened with xnemogcm)\n", - " all_scale_factors : list\n", - " list of the scale factors to compute (nothing is done for the scale factors\n", - " already present in *ds*)\n", - " Must be a sublist of: ['e3t', 'e3u', 'e3v', 'e3f', 'e3w', 'e3uw', 'e3vw', 'e3fw']\n", - " time_varying : bool\n", - " Whether to use the time varying scale factors (True) of the constant ones (False, 'e3x_0')\n", - " \n", - " Returns\n", - " -------\n", - " the new dataset with the scale factors added\n", - "\n" - ] - } - ], - "source": [ - "help(compute_missing_metrics)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "2f5c7a41-ad3d-43f0-baf0-6cfb4fbbb761", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/47)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3f (t, z_c, y_f, x_f) float32 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - } - ], - "source": [ - "# If you just want to get a copy\n", - "print(\n", - " compute_missing_metrics(ds.copy())\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "613b9c7a-724b-4185-856e-70cb9e5364d2", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/47)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3f (t, z_c, y_f, x_f) float32 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - } - ], - "source": [ - "# If you just want to add the scale factor inplace\n", - "compute_missing_metrics(ds)\n", - "print(ds)" - ] - }, - { - "cell_type": "markdown", - "id": "651306d8-2f5c-4c64-9942-461e04756e0c", - "metadata": {}, - "source": [ - "It is also possible to compute the time constant metrics, i.e. the e3x_0" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "aa9bc4a4-8194-4cc5-9bcf-c7cd08bf7cd1", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/48)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3f (t, z_c, y_f, x_f) float32 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - " e3fw_0 (z_f, y_f, x_f) float64 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - } - ], - "source": [ - "print(\n", - " compute_missing_metrics(ds.copy(), time_varying=False)\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "69e30349-cbf9-45cb-bd53-6b2123d6c9c2", - "metadata": {}, - "source": [ - "And it is possible to only compute a subset of the possible metrics" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "b190b080-d2ad-444e-b25f-429ae51028fc", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/44)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - " e3u (t, z_c, y_c, x_f) float32 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romain/Documents/Education/PhD/Dev-prog/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - } - ], - "source": [ - "print(\n", - " compute_missing_metrics(ds.drop_vars(['e3u', 'e3v', 'e3f', 'e3w']).copy(), all_scale_factors=['e3u'])\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/src_example/open_process_files.ipynb b/docs/src_example/open_process_files.ipynb deleted file mode 100644 index b59ab76..0000000 --- a/docs/src_example/open_process_files.ipynb +++ /dev/null @@ -1,10274 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "d4baf777-28bc-42a2-95d9-714e62b9fa84", - "metadata": {}, - "source": [ - "Start by importing the functions" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "6e326e37-4bfa-4111-bde4-5f3587ab1edd", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.128160Z", - "iopub.status.busy": "2023-03-29T15:17:28.127928Z", - "iopub.status.idle": "2023-03-29T15:17:28.515987Z", - "shell.execute_reply": "2023-03-29T15:17:28.515350Z" - } - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "from xnemogcm import open_domain_cfg, open_nemo, process_nemo, open_namelist, open_nemo_and_domain_cfg\n", - "from xnemogcm import __version__ as xnemogcm_version" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c6f5571a-61ec-408f-8eae-6dee765ee048", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.518960Z", - "iopub.status.busy": "2023-03-29T15:17:28.518496Z", - "iopub.status.idle": "2023-03-29T15:17:28.526296Z", - "shell.execute_reply": "2023-03-29T15:17:28.525772Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'0.4.1'" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "xnemogcm_version" - ] - }, - { - "cell_type": "markdown", - "id": "cf68f882-90a2-420a-b5b5-ceded0c96420", - "metadata": {}, - "source": [ - "# First open the domain_cfg and nemo files into 2 datasets\n", - "## domain" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "3928df5c-06c9-4f4b-a85a-c4fad3170903", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.528500Z", - "iopub.status.busy": "2023-03-29T15:17:28.528305Z", - "iopub.status.idle": "2023-03-29T15:17:28.566306Z", - "shell.execute_reply": "2023-03-29T15:17:28.565741Z" - } - }, - "outputs": [], - "source": [ - "open_domain_cfg?" - ] - }, - { - "cell_type": "markdown", - "id": "add13a99-a665-4d2b-822a-436740a9709a", - "metadata": {}, - "source": [ - "---\n", - "\n", - "You can provide the file names / folder using 3 similar methods:\n", - "1. Give the path to the files and xnemogcm opens the domain_cfg_out and mesh_mesk files\n", - "2. Give the path to the data folder + the name of the files\n", - "3. Give the name of the files that already contain the tree (e.g. ['/path/to/file1', '/path/to/file2']\n", - "\n", - "These 3 methods are equivalent, however if your domain files don't have the strandard names you need to provide them by hand.\n", - "\n", - "We use one of the test folder:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "2ee3aa40-af70-4150-a7e6-ea6f690f364f", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.569047Z", - "iopub.status.busy": "2023-03-29T15:17:28.568607Z", - "iopub.status.idle": "2023-03-29T15:17:28.572140Z", - "shell.execute_reply": "2023-03-29T15:17:28.571591Z" - } - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/4.2.0/open_and_merge/')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "fc2b9b94-5106-427d-9d44-59044cec476a", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.574380Z", - "iopub.status.busy": "2023-03-29T15:17:28.573958Z", - "iopub.status.idle": "2023-03-29T15:17:28.688462Z", - "shell.execute_reply": "2023-03-29T15:17:28.687629Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "GYRE_1y_00010101_00011230_grid_T.nc GYRE_1y_00010101_00011230_grid_W.nc\r\n", - "GYRE_1y_00010101_00011230_grid_U.nc mesh_mask.nc\r\n", - "GYRE_1y_00010101_00011230_grid_V.nc\r\n" - ] - } - ], - "source": [ - "!ls ../xnemogcm/test/data/4.2.0/open_and_merge/" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "5cd1ee94-3ac2-4d95-9610-ea651583af39", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:28.691707Z", - "iopub.status.busy": "2023-03-29T15:17:28.691336Z", - "iopub.status.idle": "2023-03-29T15:17:29.504439Z", - "shell.execute_reply": "2023-03-29T15:17:29.503906Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/18)\n",
-       "    glamt      (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamu      (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamv      (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamf      (y_f, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphit      (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphiu      (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "  * x_c        (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n",
-       "  * y_c        (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n",
-       "  * z_c        (z_c) int64 0 1 2 3\n",
-       "  * x_f        (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n",
-       "  * y_f        (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n",
-       "  * z_f        (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "Data variables: (12/28)\n",
-       "    tmask      (z_c, y_c, x_c) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    umask      (z_c, y_c, x_f) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    vmask      (z_c, y_f, x_c) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    fmask      (z_c, y_f, x_f) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    tmaskutil  (y_c, x_c) int8 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    umaskutil  (y_c, x_f) int8 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "    e3u_0      (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3v_0      (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3f_0      (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3w_0      (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3uw_0     (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3vw_0     (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "Attributes: (12/13)\n",
-       "    DOMAIN_dimensions_ids:   [1 2]\n",
-       "    DOMAIN_size_global:      [32 22]\n",
-       "    DOMAIN_halo_size_start:  [0 0]\n",
-       "    DOMAIN_halo_size_end:    [0 0]\n",
-       "    DOMAIN_type:             BOX\n",
-       "    CfgName:                 GYRE\n",
-       "    ...                      ...\n",
-       "    Iperio:                  0\n",
-       "    Jperio:                  0\n",
-       "    NFold:                   0\n",
-       "    NFtype:                  -\n",
-       "    VertCoord:               zco\n",
-       "    IsfCav:                  0
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/18)\n", - " glamt (y_c, x_c) float64 dask.array\n", - " glamu (y_c, x_f) float64 dask.array\n", - " glamv (y_f, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " ... ...\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n", - " * z_c (z_c) int64 0 1 2 3\n", - " * x_f (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n", - " * y_f (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - "Data variables: (12/28)\n", - " tmask (z_c, y_c, x_c) int8 dask.array\n", - " umask (z_c, y_c, x_f) int8 dask.array\n", - " vmask (z_c, y_f, x_c) int8 dask.array\n", - " fmask (z_c, y_f, x_f) int8 dask.array\n", - " tmaskutil (y_c, x_c) int8 dask.array\n", - " umaskutil (y_c, x_f) int8 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/13)\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " DOMAIN_size_global: [32 22]\n", - " DOMAIN_halo_size_start: [0 0]\n", - " DOMAIN_halo_size_end: [0 0]\n", - " DOMAIN_type: BOX\n", - " CfgName: GYRE\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "domcfg = open_domain_cfg(datadir=datadir)\n", - "# or\n", - "domcfg = open_domain_cfg(datadir=datadir, files=['mesh_mask.nc'])\n", - "# or\n", - "domcfg = open_domain_cfg(files=datadir.glob('*mesh_mask*.nc'))\n", - "domcfg" - ] - }, - { - "cell_type": "markdown", - "id": "58fde32f-9f84-47f0-90e5-2590d6664ac5", - "metadata": {}, - "source": [ - "## Nemo\n", - "\n", - "2 options here: 1) open netcdf files and make the preprocess automatically with `open_nemo` or 2) open by hand the files (or retrieve them from anywhere, e.g. zarr on a remote) and process using `process_nemo`.\n", - "\n", - "Note: `open_nemo` internally uses `process_nemo`.\n", - "\n", - "### open_nemo" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "6fa2e261-a188-4973-ad6e-6381017ab5bc", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:29.507978Z", - "iopub.status.busy": "2023-03-29T15:17:29.507603Z", - "iopub.status.idle": "2023-03-29T15:17:29.512265Z", - "shell.execute_reply": "2023-03-29T15:17:29.511786Z" - } - }, - "outputs": [], - "source": [ - "open_nemo?" - ] - }, - { - "cell_type": "markdown", - "id": "3bc66d2b-a497-4394-a28f-80ac98587e3a", - "metadata": {}, - "source": [ - "---\n", - "We can provide the files folder / name following the same convention as for the `open_domain_cfg` function. We also need to provide the `domcfg` dataset so xnemogcm knows how to set the variables on the proper grid position. We can also provide extra kwargs to the underlying call to `xarray.open_mfdataset` function." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "9e5a0b8c-7199-46d2-9231-273fc57355f5", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:29.514523Z", - "iopub.status.busy": "2023-03-29T15:17:29.514036Z", - "iopub.status.idle": "2023-03-29T15:17:30.056215Z", - "shell.execute_reply": "2023-03-29T15:17:30.055616Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:               (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n",
-       "                           x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates:\n",
-       "  * z_c                   (z_c) int64 0 1 2 3\n",
-       "    time_centered         (t) object dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "  * t                     (t) object 0001-07-01 00:00:00\n",
-       "  * x_c                   (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n",
-       "  * y_c                   (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n",
-       "    gdept_1d              (z_c) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "  * x_f                   (x_f) float64 0.5 1.5 2.5 3.5 ... 28.5 29.5 30.5 31.5\n",
-       "  * y_f                   (y_f) float64 0.5 1.5 2.5 3.5 ... 18.5 19.5 20.5 21.5\n",
-       "  * z_f                   (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "    gdepw_1d              (z_f) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "Dimensions without coordinates: axis_nbounds\n",
-       "Data variables: (12/15)\n",
-       "    deptht_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    time_centered_bounds  (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    t_bounds              (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    toce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    soce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3t                   (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "    depthv_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    voce                  (t, z_c, y_f, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3v                   (t, z_c, y_f, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    depthw_bounds         (z_f, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    woce                  (t, z_f, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3w                   (t, z_f, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "Attributes:\n",
-       "    Conventions:  CF-1.6\n",
-       "    timeStamp:    2023-Mar-28 10:42:16 GMT\n",
-       "    name:         NEMO dataset\n",
-       "    description:  Ocean grid variables, set on the proper positions\n",
-       "    title:        Ocean grid variables
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates:\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " * x_f (x_f) float64 0.5 1.5 2.5 3.5 ... 28.5 29.5 30.5 31.5\n", - " * y_f (y_f) float64 0.5 1.5 2.5 3.5 ... 18.5 19.5 20.5 21.5\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - " gdepw_1d (z_f) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/15)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " depthv_bounds (z_c, axis_nbounds) float32 dask.array\n", - " voce (t, z_c, y_f, x_c) float32 dask.array\n", - " e3v (t, z_c, y_f, x_c) float32 dask.array\n", - " depthw_bounds (z_f, axis_nbounds) float32 dask.array\n", - " woce (t, z_f, y_c, x_c) float32 dask.array\n", - " e3w (t, z_f, y_c, x_c) float32 dask.array\n", - "Attributes:\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nemo = open_nemo(domcfg=domcfg, datadir=datadir)\n", - "# or\n", - "nemo = open_nemo(domcfg=domcfg, files=datadir.glob('*grid*.nc'))\n", - "# or, using attributes from dataset and not name\n", - "datadir2 = Path('../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", - "nemo = open_nemo(\n", - " domcfg=domcfg, files=[\n", - " datadir2 / 'T.nc',\n", - " datadir2 / 'U.nc',\n", - " datadir2 / 'V.nc',\n", - " datadir2 / 'W.nc'\n", - " ]\n", - ")\n", - "nemo" - ] - }, - { - "cell_type": "markdown", - "id": "72017af7-df86-4f61-b2e4-e9ce2826fcd3", - "metadata": {}, - "source": [ - "### process_nemo" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "e64f0c2a-fe6a-465e-b8c2-8df7db3ea0bb", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:30.058891Z", - "iopub.status.busy": "2023-03-29T15:17:30.058561Z", - "iopub.status.idle": "2023-03-29T15:17:30.063407Z", - "shell.execute_reply": "2023-03-29T15:17:30.062868Z" - } - }, - "outputs": [], - "source": [ - "process_nemo?" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "19b9bd17-e1f4-4be3-8039-7d02311238b0", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:30.065566Z", - "iopub.status.busy": "2023-03-29T15:17:30.065266Z", - "iopub.status.idle": "2023-03-29T15:17:30.190503Z", - "shell.execute_reply": "2023-03-29T15:17:30.189687Z" - } - }, - "outputs": [], - "source": [ - "import xarray as xr\n", - "datadir2 = Path('../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", - "nemo = process_nemo(\n", - " positions=[\n", - " (xr.open_dataset(datadir2 / 'T.nc'), 'T'),\n", - " (xr.open_dataset(datadir2 / 'U.nc'), 'U'),\n", - " (xr.open_dataset(datadir2 / 'V.nc'), 'V'),\n", - " (xr.open_dataset(datadir2 / 'W.nc'), 'W')\n", - " ],\n", - " domcfg=domcfg\n", - ")\n", - "# or, if the datasets contain the attribute 'description'\n", - "nemo = process_nemo(\n", - " positions=[\n", - " (xr.open_dataset(datadir2 / 'T.nc'), None),\n", - " (xr.open_dataset(datadir2 / 'U.nc'), None),\n", - " (xr.open_dataset(datadir2 / 'V.nc'), None),\n", - " (xr.open_dataset(datadir2 / 'W.nc'), None)\n", - " ],\n", - " domcfg=domcfg\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "90ab171c-d3d3-4c8e-897a-3b18a749390f", - "metadata": {}, - "source": [ - "# Open both at once\n", - "\n", - "It is possible to open the domain and nemo output at once in one unique dataset. What happens is that 2 datasets are created and then merged. Thus all option possible for the `open_nemo` and `open_domain_cfg` functions are still possible." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "c3130a23-e65a-4097-a12d-cf41110a0836", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:30.193705Z", - "iopub.status.busy": "2023-03-29T15:17:30.193371Z", - "iopub.status.idle": "2023-03-29T15:17:30.199445Z", - "shell.execute_reply": "2023-03-29T15:17:30.198832Z" - } - }, - "outputs": [], - "source": [ - "open_nemo_and_domain_cfg?" - ] - }, - { - "cell_type": "markdown", - "id": "94f9a258-8204-48dd-9c78-c2859461b113", - "metadata": {}, - "source": [ - "---\n", - "Again, mutiple equivalent arguments are possible to open the data" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "361b5317-a173-4442-a7ec-7f70466d2eb3", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:30.203692Z", - "iopub.status.busy": "2023-03-29T15:17:30.203405Z", - "iopub.status.idle": "2023-03-29T15:17:31.400022Z", - "shell.execute_reply": "2023-03-29T15:17:31.399454Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:               (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n",
-       "                           x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/20)\n",
-       "  * z_c                   (z_c) int64 0 1 2 3\n",
-       "    time_centered         (t) object dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "  * t                     (t) object 0001-07-01 00:00:00\n",
-       "  * x_c                   (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n",
-       "  * y_c                   (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n",
-       "    gdept_1d              (z_c) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "    gphit                 (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphiu                 (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphiv                 (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphif                 (y_f, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gdept_0               (z_c, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    gdepw_0               (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "Dimensions without coordinates: axis_nbounds\n",
-       "Data variables: (12/43)\n",
-       "    deptht_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    time_centered_bounds  (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    t_bounds              (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    toce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    soce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3t                   (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "    e3u_0                 (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3v_0                 (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3f_0                 (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3w_0                 (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3uw_0                (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3vw_0                (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "Attributes: (12/18)\n",
-       "    Conventions:             CF-1.6\n",
-       "    timeStamp:               2023-Mar-28 10:42:16 GMT\n",
-       "    name:                    NEMO dataset\n",
-       "    description:             Ocean grid variables, set on the proper positions\n",
-       "    title:                   Ocean grid variables\n",
-       "    DOMAIN_dimensions_ids:   [1 2]\n",
-       "    ...                      ...\n",
-       "    Iperio:                  0\n",
-       "    Jperio:                  0\n",
-       "    NFold:                   0\n",
-       "    NFtype:                  -\n",
-       "    VertCoord:               zco\n",
-       "    IsfCav:                  0
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - " gdept_0 (z_c, y_c, x_c) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/43)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# the simplest for simple cases, provide the path\n", - "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", - "# or provide the files\n", - "ds = open_nemo_and_domain_cfg(nemo_files=datadir.glob('*grid*.nc'), domcfg_files=datadir.glob('*mesh*.nc'))\n", - "# or use the nemo_kwargs and domcfg_kwargs dictionnaries\n", - "ds = open_nemo_and_domain_cfg(nemo_kwargs=dict(datadir=datadir), domcfg_kwargs={'files':datadir.glob('*mesh*.nc')})\n", - "ds" - ] - }, - { - "cell_type": "markdown", - "id": "8bd99220-6f03-476d-9621-36499e9ffedc", - "metadata": {}, - "source": [ - "## Remark\n", - "\n", - "All opening are lazy using dask, which makes files quick to open, until you actually load the data you need" - ] - }, - { - "cell_type": "markdown", - "id": "ea964e50-68db-4394-baec-4b3c5fb90b3e", - "metadata": {}, - "source": [ - "# Namelist\n", - "\n", - "It can be convenient to open the namelist used for the run (e.g. to compare different runs with different parameters). This is possible using the `f90nml` package (it needs to be installed, this is an optional dependency)." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "8a6cb055-e2c2-4d37-be4e-3684b0f12a71", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:31.402997Z", - "iopub.status.busy": "2023-03-29T15:17:31.402560Z", - "iopub.status.idle": "2023-03-29T15:17:31.406932Z", - "shell.execute_reply": "2023-03-29T15:17:31.406343Z" - } - }, - "outputs": [], - "source": [ - "open_namelist?" - ] - }, - { - "cell_type": "markdown", - "id": "c81264ec-2a59-43b6-adfc-b2c19ba96b49", - "metadata": {}, - "source": [ - "---\n", - "Here you provide the folder path containing the reference and configuration namelists, or the filenames (as for nemo and domcfg). You can choose to load both, or only one of them. The configration namelist will overwrite the default one.\n", - "\n", - "For this we need to use another folder of the test data (with simplified namelists for the exemple):" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "1fc7b7ba-cedf-4ebe-8105-de09edcbb7bf", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:31.409186Z", - "iopub.status.busy": "2023-03-29T15:17:31.408895Z", - "iopub.status.idle": "2023-03-29T15:17:31.411631Z", - "shell.execute_reply": "2023-03-29T15:17:31.411084Z" - } - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/namelist/')" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "f413ca78-2d0f-48fd-b9d5-427c4b8ca4b3", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:31.413698Z", - "iopub.status.busy": "2023-03-29T15:17:31.413414Z", - "iopub.status.idle": "2023-03-29T15:17:31.529759Z", - "shell.execute_reply": "2023-03-29T15:17:31.528930Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namelist_cfg namelist_ref\r\n" - ] - } - ], - "source": [ - "!ls ../xnemogcm/test/data/namelist/" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "feabb3f4-f9b7-4092-b423-22db9cae36a1", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:31.533181Z", - "iopub.status.busy": "2023-03-29T15:17:31.532561Z", - "iopub.status.idle": "2023-03-29T15:17:31.547995Z", - "shell.execute_reply": "2023-03-29T15:17:31.547484Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    ()\n",
-       "Data variables:\n",
-       "    nn_no      int64 0\n",
-       "    cn_exp     <U5 'BASIN'\n",
-       "    nn_it000   int64 1\n",
-       "    nn_itend   int64 5840\n",
-       "    rn_e1_deg  float64 1.0
" - ], - "text/plain": [ - "\n", - "Dimensions: ()\n", - "Data variables:\n", - " nn_no int64 0\n", - " cn_exp \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.DataArray 'nn_it000' ()>\n",
-       "array(1)\n",
-       "Attributes:\n",
-       "    namelist:  namrun
" - ], - "text/plain": [ - "\n", - "array(1)\n", - "Attributes:\n", - " namelist: namrun" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nam.nn_it000" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/docs/src_example/recombing_mesh_mask_domain_cfg.ipynb b/docs/src_example/recombing_mesh_mask_domain_cfg.ipynb deleted file mode 100644 index 79c8350..0000000 --- a/docs/src_example/recombing_mesh_mask_domain_cfg.ipynb +++ /dev/null @@ -1,3284 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "41aec3c0-ece5-4ba1-b47f-d7a6d67b0860", - "metadata": {}, - "source": [ - "Start by importing the functions" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "18606253-a4d5-4f6a-9da8-7dfd96b72bea", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:32.904175Z", - "iopub.status.busy": "2023-03-29T15:17:32.903942Z", - "iopub.status.idle": "2023-03-29T15:17:33.292390Z", - "shell.execute_reply": "2023-03-29T15:17:33.291757Z" - } - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "from xnemogcm import open_domain_cfg, open_nemo_and_domain_cfg\n", - "from xnemogcm import __version__ as xnemogcm_version" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "84a7b456-0689-4cc7-b497-c41ea62ad477", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:33.295305Z", - "iopub.status.busy": "2023-03-29T15:17:33.294812Z", - "iopub.status.idle": "2023-03-29T15:17:33.302705Z", - "shell.execute_reply": "2023-03-29T15:17:33.302193Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'0.4.1'" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "xnemogcm_version" - ] - }, - { - "cell_type": "markdown", - "id": "96f57a3d-4035-4c7b-acb5-5ae843eb87fd", - "metadata": {}, - "source": [ - "By default nemo outputs a mesh_mask / domain_cfg file per computing processor, if the namelist parameter is set on .true.:\n", - "\n", - "* `ln_write_cfg = .true.` to output the domain_cfg if created analyticaly in the usrdef_zgr.F90 and usrdef_hgr.F90 files\n", - "* `ln_meshmask = .true.` to output the mesh_mask files (that also contain the masks)\n", - "\n", - "While it is possible to recombine the files using the nemo fortran toolbox, xnemogcm can also recombine them easily.\n", - "\n", - "To illustrate this, we use a data folder from the test data:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "7e7eb827-e9ff-4652-8e11-c3ad01b1a65e", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:33.305220Z", - "iopub.status.busy": "2023-03-29T15:17:33.304915Z", - "iopub.status.idle": "2023-03-29T15:17:33.308137Z", - "shell.execute_reply": "2023-03-29T15:17:33.307575Z" - } - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "9874f77d-9755-4881-afaf-0fe72f61950e", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:33.310315Z", - "iopub.status.busy": "2023-03-29T15:17:33.310027Z", - "iopub.status.idle": "2023-03-29T15:17:33.424492Z", - "shell.execute_reply": "2023-03-29T15:17:33.423640Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mesh_mask_0000.nc mesh_mask_0001.nc mesh_mask_0002.nc mesh_mask_0003.nc\r\n" - ] - } - ], - "source": [ - "!ls ../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "193b27f6-8421-4cbd-be2e-228a8705a792", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:33.428228Z", - "iopub.status.busy": "2023-03-29T15:17:33.427622Z", - "iopub.status.idle": "2023-03-29T15:17:34.176712Z", - "shell.execute_reply": "2023-03-29T15:17:34.176187Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/18)\n",
-       "    glamt      (y_c, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    glamu      (y_c, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    glamv      (y_f, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    glamf      (y_f, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    gphit      (y_c, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    gphiu      (y_c, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "  * x_c        (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n",
-       "  * y_c        (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n",
-       "  * z_c        (z_c) int64 0 1 2 3\n",
-       "  * x_f        (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n",
-       "  * y_f        (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n",
-       "  * z_f        (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "Data variables: (12/28)\n",
-       "    tmask      (z_c, y_c, x_c) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    umask      (z_c, y_c, x_f) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    vmask      (z_c, y_f, x_c) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    fmask      (z_c, y_f, x_f) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    tmaskutil  (y_c, x_c) int8 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    umaskutil  (y_c, x_f) int8 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "    e3u_0      (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3v_0      (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3f_0      (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3w_0      (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3uw_0     (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3vw_0     (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "Attributes: (12/13)\n",
-       "    DOMAIN_dimensions_ids:   [1 2]\n",
-       "    DOMAIN_size_global:      [32 22]\n",
-       "    DOMAIN_halo_size_start:  [0 0]\n",
-       "    DOMAIN_halo_size_end:    [0 0]\n",
-       "    DOMAIN_type:             BOX\n",
-       "    CfgName:                 GYRE\n",
-       "    ...                      ...\n",
-       "    Iperio:                  0\n",
-       "    Jperio:                  0\n",
-       "    NFold:                   0\n",
-       "    NFtype:                  -\n",
-       "    VertCoord:               zco\n",
-       "    IsfCav:                  0
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/18)\n", - " glamt (y_c, x_c) float64 dask.array\n", - " glamu (y_c, x_f) float64 dask.array\n", - " glamv (y_f, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " ... ...\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n", - " * z_c (z_c) int64 0 1 2 3\n", - " * x_f (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n", - " * y_f (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - "Data variables: (12/28)\n", - " tmask (z_c, y_c, x_c) int8 dask.array\n", - " umask (z_c, y_c, x_f) int8 dask.array\n", - " vmask (z_c, y_f, x_c) int8 dask.array\n", - " fmask (z_c, y_f, x_f) int8 dask.array\n", - " tmaskutil (y_c, x_c) int8 dask.array\n", - " umaskutil (y_c, x_f) int8 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/13)\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " DOMAIN_size_global: [32 22]\n", - " DOMAIN_halo_size_start: [0 0]\n", - " DOMAIN_halo_size_end: [0 0]\n", - " DOMAIN_type: BOX\n", - " CfgName: GYRE\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "domcfg = open_domain_cfg(datadir=datadir)\n", - "domcfg" - ] - }, - { - "cell_type": "markdown", - "id": "475a6a89-9353-4c11-b49f-f0874b304546", - "metadata": {}, - "source": [ - "We verify that the variables are the same than when opening a unique full mesh_mask file." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "1143759e-b37e-4352-b05c-bad53db8a3b2", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:34.180003Z", - "iopub.status.busy": "2023-03-29T15:17:34.179479Z", - "iopub.status.idle": "2023-03-29T15:17:34.380865Z", - "shell.execute_reply": "2023-03-29T15:17:34.380226Z" - } - }, - "outputs": [], - "source": [ - "domcfg_1_file = open_domain_cfg(datadir=Path('../xnemogcm/test/data/4.2.0/mesh_mask_1_file/'), files=['mesh_mask.nc'])" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "771405fe-0fef-4bce-a760-bd3d2463b831", - "metadata": { - "execution": { - "iopub.execute_input": "2023-03-29T15:17:34.384149Z", - "iopub.status.busy": "2023-03-29T15:17:34.383515Z", - "iopub.status.idle": "2023-03-29T15:17:34.828933Z", - "shell.execute_reply": "2023-03-29T15:17:34.828376Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "domcfg_1_file.equals(domcfg)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.2" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/example/compute_metrics.ipynb b/example/compute_metrics.ipynb deleted file mode 100644 index 7dead2f..0000000 --- a/example/compute_metrics.ipynb +++ /dev/null @@ -1,558 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "9975d773-21bd-40e2-8795-38e70753bd05", - "metadata": { - "execution": { - "iopub.execute_input": "2023-08-07T10:07:16.531363Z", - "iopub.status.busy": "2023-08-07T10:07:16.531167Z", - "iopub.status.idle": "2023-08-07T10:07:17.098487Z", - "shell.execute_reply": "2023-08-07T10:07:17.097919Z" - }, - "tags": [] - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "from xnemogcm import open_nemo_and_domain_cfg\n", - "from xnemogcm.metrics import compute_missing_metrics\n", - "from xnemogcm import __version__ as xnemogcm_version" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "f4d1aa0c-e02a-4999-aaeb-88cdf14a8adf", - "metadata": { - "execution": { - "iopub.execute_input": "2023-08-07T10:07:17.101708Z", - "iopub.status.busy": "2023-08-07T10:07:17.101179Z", - "iopub.status.idle": "2023-08-07T10:07:17.105138Z", - "shell.execute_reply": "2023-08-07T10:07:17.104628Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.4.2\n" - ] - } - ], - "source": [ - "print(xnemogcm_version)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "3d452d15-99de-4dda-a18b-907cace8688a", - "metadata": { - "execution": { - "iopub.execute_input": "2023-08-07T10:07:17.107704Z", - "iopub.status.busy": "2023-08-07T10:07:17.107281Z", - "iopub.status.idle": "2023-08-07T10:07:17.110119Z", - "shell.execute_reply": "2023-08-07T10:07:17.109565Z" - }, - "tags": [] - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/4.2.0/open_and_merge/')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "51096969-6558-493c-95ae-e3b82b57cb02", - "metadata": { - "execution": { - "iopub.execute_input": "2023-08-07T10:07:17.112267Z", - "iopub.status.busy": "2023-08-07T10:07:17.111986Z", - "iopub.status.idle": "2023-08-07T10:07:17.614474Z", - "shell.execute_reply": "2023-08-07T10:07:17.613978Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " glamv (y_f, x_c) float64 dask.array\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - " gdepw_1d (z_f) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/43)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - } - ], - "source": [ - "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", - "print(ds)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "b4958894-950c-4150-a312-9b70a94c4387", - "metadata": { - "execution": { - "iopub.execute_input": "2023-08-07T10:07:17.617205Z", - "iopub.status.busy": "2023-08-07T10:07:17.616905Z", - "iopub.status.idle": "2023-08-07T10:07:17.621377Z", - "shell.execute_reply": "2023-08-07T10:07:17.620799Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on function compute_missing_metrics in module xnemogcm.metrics:\n", - "\n", - "compute_missing_metrics(ds, all_scale_factors=['e3t', 'e3u', 'e3v', 'e3f', 'e3w', 'e3uw', 'e3vw', 'e3fw'], time_varying=True, periodic=False)\n", - " Add all possible scale factors to the dataset.\n", - " \n", - " For the moment, e3t (or e3t_0) at least needs to be present in the dataset\n", - " for the time_varying=True (time_varying=False) case.\n", - " If e3t_0 is not found (e.g. for nemo 3.6), it will raise a warning and use e3t_1d\n", - " (this will lead to wrong results if terrain-following coordinates are used).\n", - " \n", - " May have some boundary issues.\n", - " \n", - " Will add the metrics to the given dataset. To avoid this, use a ds.copy()\n", - " \n", - " Parameters\n", - " ----------\n", - " ds : xarray.Dataset\n", - " dataset containing the scale factors. Must be xgcm compatible (e.g. opened with xnemogcm)\n", - " all_scale_factors : list\n", - " list of the scale factors to compute (nothing is done for the scale factors\n", - " already present in *ds*)\n", - " Must be a sublist of: ['e3t', 'e3u', 'e3v', 'e3f', 'e3w', 'e3uw', 'e3vw', 'e3fw']\n", - " time_varying : bool\n", - " Whether to use the time varying scale factors (True) of the constant ones (False, 'e3x_0')\n", - " \n", - " Returns\n", - " -------\n", - " the new dataset with the scale factors added\n", - "\n" - ] - } - ], - "source": [ - "help(compute_missing_metrics)" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "2f5c7a41-ad3d-43f0-baf0-6cfb4fbbb761", - "metadata": { - "execution": { - "iopub.execute_input": "2023-08-07T10:07:17.623880Z", - "iopub.status.busy": "2023-08-07T10:07:17.623446Z", - "iopub.status.idle": "2023-08-07T10:07:17.706714Z", - "shell.execute_reply": "2023-08-07T10:07:17.706094Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " glamv (y_f, x_c) float64 dask.array\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - " gdepw_1d (z_f) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/47)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3f (t, z_c, y_f, x_f) float32 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/runner/work/xnemogcm/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - } - ], - "source": [ - "# If you just want to get a copy\n", - "print(\n", - " compute_missing_metrics(ds.copy())\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "613b9c7a-724b-4185-856e-70cb9e5364d2", - "metadata": { - "execution": { - "iopub.execute_input": "2023-08-07T10:07:17.710053Z", - "iopub.status.busy": "2023-08-07T10:07:17.709854Z", - "iopub.status.idle": "2023-08-07T10:07:17.752723Z", - "shell.execute_reply": "2023-08-07T10:07:17.752250Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " glamv (y_f, x_c) float64 dask.array\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - " gdepw_1d (z_f) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/47)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3f (t, z_c, y_f, x_f) float32 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/runner/work/xnemogcm/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - } - ], - "source": [ - "# If you just want to add the scale factor inplace\n", - "compute_missing_metrics(ds)\n", - "print(ds)" - ] - }, - { - "cell_type": "markdown", - "id": "651306d8-2f5c-4c64-9942-461e04756e0c", - "metadata": {}, - "source": [ - "It is also possible to compute the time constant metrics, i.e. the e3x_0" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "aa9bc4a4-8194-4cc5-9bcf-c7cd08bf7cd1", - "metadata": { - "execution": { - "iopub.execute_input": "2023-08-07T10:07:17.756203Z", - "iopub.status.busy": "2023-08-07T10:07:17.755789Z", - "iopub.status.idle": "2023-08-07T10:07:17.774744Z", - "shell.execute_reply": "2023-08-07T10:07:17.774148Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " glamv (y_f, x_c) float64 dask.array\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - " gdepw_1d (z_f) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/48)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3f (t, z_c, y_f, x_f) float32 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - " e3fw_0 (z_f, y_f, x_f) float64 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/runner/work/xnemogcm/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - } - ], - "source": [ - "print(\n", - " compute_missing_metrics(ds.copy(), time_varying=False)\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "69e30349-cbf9-45cb-bd53-6b2123d6c9c2", - "metadata": {}, - "source": [ - "And it is possible to only compute a subset of the possible metrics" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "b190b080-d2ad-444e-b25f-429ae51028fc", - "metadata": { - "execution": { - "iopub.execute_input": "2023-08-07T10:07:17.778653Z", - "iopub.status.busy": "2023-08-07T10:07:17.778226Z", - "iopub.status.idle": "2023-08-07T10:07:17.795778Z", - "shell.execute_reply": "2023-08-07T10:07:17.795087Z" - }, - "tags": [] - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " glamv (y_f, x_c) float64 dask.array\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - " gdepw_1d (z_f) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/44)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - " e3uw (t, z_f, y_c, x_f) float32 dask.array\n", - " e3vw (t, z_f, y_f, x_c) float32 dask.array\n", - " e3fw (t, z_f, y_f, x_f) float32 dask.array\n", - " e3u (t, z_c, y_c, x_f) float32 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/runner/work/xnemogcm/xnemogcm/xnemogcm/metrics.py:63: UserWarning: This function is in pre-phase. Do not expect a high precision, but a good estimate. Some boundary issues may arise.\n", - " warn(\n" - ] - } - ], - "source": [ - "print(\n", - " compute_missing_metrics(ds.drop_vars(['e3u', 'e3v', 'e3f', 'e3w']).copy(), all_scale_factors=['e3u'])\n", - ")" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.4" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/example/open_process_files.ipynb b/example/open_process_files.ipynb deleted file mode 100644 index 17e36b7..0000000 --- a/example/open_process_files.ipynb +++ /dev/null @@ -1,10763 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "d4baf777-28bc-42a2-95d9-714e62b9fa84", - "metadata": {}, - "source": [ - "Start by importing the functions" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "6e326e37-4bfa-4111-bde4-5f3587ab1edd", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:31.261188Z", - "iopub.status.busy": "2023-11-29T15:56:31.260464Z", - "iopub.status.idle": "2023-11-29T15:56:31.597251Z", - "shell.execute_reply": "2023-11-29T15:56:31.596760Z" - } - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "from xnemogcm import open_domain_cfg, open_nemo, process_nemo, open_namelist, open_nemo_and_domain_cfg\n", - "from xnemogcm import __version__ as xnemogcm_version" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "c6f5571a-61ec-408f-8eae-6dee765ee048", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:31.599814Z", - "iopub.status.busy": "2023-11-29T15:56:31.599374Z", - "iopub.status.idle": "2023-11-29T15:56:31.605082Z", - "shell.execute_reply": "2023-11-29T15:56:31.604527Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'0.4.2'" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "xnemogcm_version" - ] - }, - { - "cell_type": "markdown", - "id": "cf68f882-90a2-420a-b5b5-ceded0c96420", - "metadata": {}, - "source": [ - "# First open the domain_cfg and nemo files into 2 datasets\n", - "## domain" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "3928df5c-06c9-4f4b-a85a-c4fad3170903", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:31.607169Z", - "iopub.status.busy": "2023-11-29T15:56:31.606863Z", - "iopub.status.idle": "2023-11-29T15:56:31.637163Z", - "shell.execute_reply": "2023-11-29T15:56:31.636595Z" - } - }, - "outputs": [], - "source": [ - "open_domain_cfg?" - ] - }, - { - "cell_type": "markdown", - "id": "add13a99-a665-4d2b-822a-436740a9709a", - "metadata": {}, - "source": [ - "---\n", - "\n", - "You can provide the file names / folder using 3 similar methods:\n", - "1. Give the path to the files and xnemogcm opens the domain_cfg_out and mesh_mesk files\n", - "2. Give the path to the data folder + the name of the files\n", - "3. Give the name of the files that already contain the tree (e.g. ['/path/to/file1', '/path/to/file2']\n", - "\n", - "These 3 methods are equivalent, however if your domain files don't have the strandard names you need to provide them by hand.\n", - "\n", - "We use one of the test folder:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "2ee3aa40-af70-4150-a7e6-ea6f690f364f", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:31.639589Z", - "iopub.status.busy": "2023-11-29T15:56:31.639146Z", - "iopub.status.idle": "2023-11-29T15:56:31.641715Z", - "shell.execute_reply": "2023-11-29T15:56:31.641287Z" - } - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/4.2.0/open_and_merge/')" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "fc2b9b94-5106-427d-9d44-59044cec476a", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:31.643669Z", - "iopub.status.busy": "2023-11-29T15:56:31.643375Z", - "iopub.status.idle": "2023-11-29T15:56:31.757484Z", - "shell.execute_reply": "2023-11-29T15:56:31.756949Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "GYRE_1y_00010101_00011230_grid_T.nc GYRE_1y_00010101_00011230_grid_W.nc\r\n", - "GYRE_1y_00010101_00011230_grid_U.nc mesh_mask.nc\r\n", - "GYRE_1y_00010101_00011230_grid_V.nc\r\n" - ] - } - ], - "source": [ - "!ls ../xnemogcm/test/data/4.2.0/open_and_merge/" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "5cd1ee94-3ac2-4d95-9610-ea651583af39", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:31.759974Z", - "iopub.status.busy": "2023-11-29T15:56:31.759584Z", - "iopub.status.idle": "2023-11-29T15:56:32.461657Z", - "shell.execute_reply": "2023-11-29T15:56:32.461068Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/18)\n",
-       "    glamt      (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamu      (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamv      (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamf      (y_f, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphit      (y_c, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphiu      (y_c, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "  * x_c        (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n",
-       "  * y_c        (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n",
-       "  * z_c        (z_c) int64 0 1 2 3\n",
-       "  * x_f        (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n",
-       "  * y_f        (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n",
-       "  * z_f        (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "Data variables: (12/28)\n",
-       "    tmask      (z_c, y_c, x_c) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    umask      (z_c, y_c, x_f) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    vmask      (z_c, y_f, x_c) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    fmask      (z_c, y_f, x_f) int8 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    tmaskutil  (y_c, x_c) int8 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    umaskutil  (y_c, x_f) int8 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "    e3u_0      (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3v_0      (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3f_0      (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3w_0      (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3uw_0     (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3vw_0     (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "Attributes: (12/13)\n",
-       "    DOMAIN_dimensions_ids:   [1 2]\n",
-       "    DOMAIN_size_global:      [32 22]\n",
-       "    DOMAIN_halo_size_start:  [0 0]\n",
-       "    DOMAIN_halo_size_end:    [0 0]\n",
-       "    DOMAIN_type:             BOX\n",
-       "    CfgName:                 GYRE\n",
-       "    ...                      ...\n",
-       "    Iperio:                  0\n",
-       "    Jperio:                  0\n",
-       "    NFold:                   0\n",
-       "    NFtype:                  -\n",
-       "    VertCoord:               zco\n",
-       "    IsfCav:                  0
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/18)\n", - " glamt (y_c, x_c) float64 dask.array\n", - " glamu (y_c, x_f) float64 dask.array\n", - " glamv (y_f, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " ... ...\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n", - " * z_c (z_c) int64 0 1 2 3\n", - " * x_f (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n", - " * y_f (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - "Data variables: (12/28)\n", - " tmask (z_c, y_c, x_c) int8 dask.array\n", - " umask (z_c, y_c, x_f) int8 dask.array\n", - " vmask (z_c, y_f, x_c) int8 dask.array\n", - " fmask (z_c, y_f, x_f) int8 dask.array\n", - " tmaskutil (y_c, x_c) int8 dask.array\n", - " umaskutil (y_c, x_f) int8 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/13)\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " DOMAIN_size_global: [32 22]\n", - " DOMAIN_halo_size_start: [0 0]\n", - " DOMAIN_halo_size_end: [0 0]\n", - " DOMAIN_type: BOX\n", - " CfgName: GYRE\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "domcfg = open_domain_cfg(datadir=datadir)\n", - "# or\n", - "domcfg = open_domain_cfg(datadir=datadir, files=['mesh_mask.nc'])\n", - "# or\n", - "domcfg = open_domain_cfg(files=datadir.glob('*mesh_mask*.nc'))\n", - "domcfg" - ] - }, - { - "cell_type": "markdown", - "id": "58fde32f-9f84-47f0-90e5-2590d6664ac5", - "metadata": {}, - "source": [ - "## Nemo\n", - "\n", - "2 options here: 1) open netcdf files and make the preprocess automatically with `open_nemo` or 2) open by hand the files (or retrieve them from anywhere, e.g. zarr on a remote) and process using `process_nemo`.\n", - "\n", - "Note: `open_nemo` internally uses `process_nemo`.\n", - "\n", - "### open_nemo" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "6fa2e261-a188-4973-ad6e-6381017ab5bc", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:32.463898Z", - "iopub.status.busy": "2023-11-29T15:56:32.463543Z", - "iopub.status.idle": "2023-11-29T15:56:32.467466Z", - "shell.execute_reply": "2023-11-29T15:56:32.466992Z" - } - }, - "outputs": [], - "source": [ - "open_nemo?" - ] - }, - { - "cell_type": "markdown", - "id": "3bc66d2b-a497-4394-a28f-80ac98587e3a", - "metadata": {}, - "source": [ - "---\n", - "We can provide the files folder / name following the same convention as for the `open_domain_cfg` function. We also need to provide the `domcfg` dataset so xnemogcm knows how to set the variables on the proper grid position. We can also provide extra kwargs to the underlying call to `xarray.open_mfdataset` function." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "9e5a0b8c-7199-46d2-9231-273fc57355f5", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:32.469512Z", - "iopub.status.busy": "2023-11-29T15:56:32.469203Z", - "iopub.status.idle": "2023-11-29T15:56:32.909853Z", - "shell.execute_reply": "2023-11-29T15:56:32.909276Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:               (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n",
-       "                           x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/18)\n",
-       "  * z_c                   (z_c) int64 0 1 2 3\n",
-       "    time_centered         (t) object dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "  * t                     (t) object 0001-07-01 00:00:00\n",
-       "  * x_c                   (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n",
-       "  * y_c                   (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n",
-       "    gdept_1d              (z_c) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "  * y_f                   (y_f) float64 0.5 1.5 2.5 3.5 ... 18.5 19.5 20.5 21.5\n",
-       "    gphiv                 (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    glamv                 (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "  * z_f                   (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "    gdepw_1d              (z_f) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "    gdepw_0               (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "Dimensions without coordinates: axis_nbounds\n",
-       "Data variables: (12/15)\n",
-       "    deptht_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    time_centered_bounds  (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    t_bounds              (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    toce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    soce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3t                   (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "    depthv_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    voce                  (t, z_c, y_f, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3v                   (t, z_c, y_f, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    depthw_bounds         (z_f, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    woce                  (t, z_f, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3w                   (t, z_f, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "Attributes:\n",
-       "    Conventions:  CF-1.6\n",
-       "    timeStamp:    2023-Mar-28 10:42:16 GMT\n",
-       "    name:         NEMO dataset\n",
-       "    description:  Ocean grid variables, set on the proper positions\n",
-       "    title:        Ocean grid variables
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/18)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " * y_f (y_f) float64 0.5 1.5 2.5 3.5 ... 18.5 19.5 20.5 21.5\n", - " gphiv (y_f, x_c) float64 dask.array\n", - " glamv (y_f, x_c) float64 dask.array\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - " gdepw_1d (z_f) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/15)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " depthv_bounds (z_c, axis_nbounds) float32 dask.array\n", - " voce (t, z_c, y_f, x_c) float32 dask.array\n", - " e3v (t, z_c, y_f, x_c) float32 dask.array\n", - " depthw_bounds (z_f, axis_nbounds) float32 dask.array\n", - " woce (t, z_f, y_c, x_c) float32 dask.array\n", - " e3w (t, z_f, y_c, x_c) float32 dask.array\n", - "Attributes:\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nemo = open_nemo(domcfg=domcfg, datadir=datadir)\n", - "# or\n", - "nemo = open_nemo(domcfg=domcfg, files=datadir.glob('*grid*.nc'))\n", - "# or, using attributes from dataset and not name\n", - "datadir2 = Path('../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", - "nemo = open_nemo(\n", - " domcfg=domcfg, files=[\n", - " datadir2 / 'T.nc',\n", - " datadir2 / 'U.nc',\n", - " datadir2 / 'V.nc',\n", - " datadir2 / 'W.nc'\n", - " ]\n", - ")\n", - "nemo" - ] - }, - { - "cell_type": "markdown", - "id": "72017af7-df86-4f61-b2e4-e9ce2826fcd3", - "metadata": {}, - "source": [ - "### process_nemo" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "e64f0c2a-fe6a-465e-b8c2-8df7db3ea0bb", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:32.912201Z", - "iopub.status.busy": "2023-11-29T15:56:32.911875Z", - "iopub.status.idle": "2023-11-29T15:56:32.915693Z", - "shell.execute_reply": "2023-11-29T15:56:32.915224Z" - } - }, - "outputs": [], - "source": [ - "process_nemo?" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "19b9bd17-e1f4-4be3-8039-7d02311238b0", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:32.917653Z", - "iopub.status.busy": "2023-11-29T15:56:32.917336Z", - "iopub.status.idle": "2023-11-29T15:56:33.042529Z", - "shell.execute_reply": "2023-11-29T15:56:33.041961Z" - } - }, - "outputs": [], - "source": [ - "import xarray as xr\n", - "datadir2 = Path('../xnemogcm/test/data/4.2.0/nemo_no_grid_in_filename/')\n", - "nemo = process_nemo(\n", - " positions=[\n", - " (xr.open_dataset(datadir2 / 'T.nc'), 'T'),\n", - " (xr.open_dataset(datadir2 / 'U.nc'), 'U'),\n", - " (xr.open_dataset(datadir2 / 'V.nc'), 'V'),\n", - " (xr.open_dataset(datadir2 / 'W.nc'), 'W')\n", - " ],\n", - " domcfg=domcfg\n", - ")\n", - "# or, if the datasets contain the attribute 'description'\n", - "nemo = process_nemo(\n", - " positions=[\n", - " (xr.open_dataset(datadir2 / 'T.nc'), None),\n", - " (xr.open_dataset(datadir2 / 'U.nc'), None),\n", - " (xr.open_dataset(datadir2 / 'V.nc'), None),\n", - " (xr.open_dataset(datadir2 / 'W.nc'), None)\n", - " ],\n", - " domcfg=domcfg\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "90ab171c-d3d3-4c8e-897a-3b18a749390f", - "metadata": {}, - "source": [ - "# Open both at once\n", - "\n", - "It is possible to open the domain and nemo output at once in one unique dataset. What happens is that 2 datasets are created and then merged. Thus all option possible for the `open_nemo` and `open_domain_cfg` functions are still possible." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "c3130a23-e65a-4097-a12d-cf41110a0836", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:33.044846Z", - "iopub.status.busy": "2023-11-29T15:56:33.044690Z", - "iopub.status.idle": "2023-11-29T15:56:33.048335Z", - "shell.execute_reply": "2023-11-29T15:56:33.047863Z" - } - }, - "outputs": [], - "source": [ - "open_nemo_and_domain_cfg?" - ] - }, - { - "cell_type": "markdown", - "id": "94f9a258-8204-48dd-9c78-c2859461b113", - "metadata": {}, - "source": [ - "---\n", - "Again, mutiple equivalent arguments are possible to open the data" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "361b5317-a173-4442-a7ec-7f70466d2eb3", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:33.050393Z", - "iopub.status.busy": "2023-11-29T15:56:33.050087Z", - "iopub.status.idle": "2023-11-29T15:56:34.119523Z", - "shell.execute_reply": "2023-11-29T15:56:34.118980Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:               (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n",
-       "                           x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/20)\n",
-       "  * z_c                   (z_c) int64 0 1 2 3\n",
-       "    time_centered         (t) object dask.array<chunksize=(1,), meta=np.ndarray>\n",
-       "  * t                     (t) object 0001-07-01 00:00:00\n",
-       "  * x_c                   (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n",
-       "  * y_c                   (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n",
-       "    gdept_1d              (z_c) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "    glamv                 (y_f, x_c) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "  * z_f                   (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "    gdepw_1d              (z_f) float64 dask.array<chunksize=(4,), meta=np.ndarray>\n",
-       "    gdepw_0               (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    glamf                 (y_f, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "    gphif                 (y_f, x_f) float64 dask.array<chunksize=(22, 32), meta=np.ndarray>\n",
-       "Dimensions without coordinates: axis_nbounds\n",
-       "Data variables: (12/43)\n",
-       "    deptht_bounds         (z_c, axis_nbounds) float32 dask.array<chunksize=(4, 2), meta=np.ndarray>\n",
-       "    time_centered_bounds  (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    t_bounds              (t, axis_nbounds) object dask.array<chunksize=(1, 2), meta=np.ndarray>\n",
-       "    toce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    soce                  (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    e3t                   (t, z_c, y_c, x_c) float32 dask.array<chunksize=(1, 4, 22, 32), meta=np.ndarray>\n",
-       "    ...                    ...\n",
-       "    e3u_0                 (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3v_0                 (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3f_0                 (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3w_0                 (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3uw_0                (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "    e3vw_0                (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 22, 32), meta=np.ndarray>\n",
-       "Attributes: (12/18)\n",
-       "    Conventions:             CF-1.6\n",
-       "    timeStamp:               2023-Mar-28 10:42:16 GMT\n",
-       "    name:                    NEMO dataset\n",
-       "    description:             Ocean grid variables, set on the proper positions\n",
-       "    title:                   Ocean grid variables\n",
-       "    DOMAIN_dimensions_ids:   [1 2]\n",
-       "    ...                      ...\n",
-       "    Iperio:                  0\n",
-       "    Jperio:                  0\n",
-       "    NFold:                   0\n",
-       "    NFtype:                  -\n",
-       "    VertCoord:               zco\n",
-       "    IsfCav:                  0
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, axis_nbounds: 2, t: 1, y_c: 22, x_c: 32,\n", - " x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/20)\n", - " * z_c (z_c) int64 0 1 2 3\n", - " time_centered (t) object dask.array\n", - " * t (t) object 0001-07-01 00:00:00\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 ... 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 ... 15 16 17 18 19 20 21\n", - " gdept_1d (z_c) float64 dask.array\n", - " ... ...\n", - " glamv (y_f, x_c) float64 dask.array\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - " gdepw_1d (z_f) float64 dask.array\n", - " gdepw_0 (z_f, y_c, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphif (y_f, x_f) float64 dask.array\n", - "Dimensions without coordinates: axis_nbounds\n", - "Data variables: (12/43)\n", - " deptht_bounds (z_c, axis_nbounds) float32 dask.array\n", - " time_centered_bounds (t, axis_nbounds) object dask.array\n", - " t_bounds (t, axis_nbounds) object dask.array\n", - " toce (t, z_c, y_c, x_c) float32 dask.array\n", - " soce (t, z_c, y_c, x_c) float32 dask.array\n", - " e3t (t, z_c, y_c, x_c) float32 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/18)\n", - " Conventions: CF-1.6\n", - " timeStamp: 2023-Mar-28 10:42:16 GMT\n", - " name: NEMO dataset\n", - " description: Ocean grid variables, set on the proper positions\n", - " title: Ocean grid variables\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# the simplest for simple cases, provide the path\n", - "ds = open_nemo_and_domain_cfg(nemo_files=datadir, domcfg_files=datadir)\n", - "# or provide the files\n", - "ds = open_nemo_and_domain_cfg(nemo_files=datadir.glob('*grid*.nc'), domcfg_files=datadir.glob('*mesh*.nc'))\n", - "# or use the nemo_kwargs and domcfg_kwargs dictionnaries\n", - "ds = open_nemo_and_domain_cfg(nemo_kwargs=dict(datadir=datadir), domcfg_kwargs={'files':datadir.glob('*mesh*.nc')})\n", - "ds" - ] - }, - { - "cell_type": "markdown", - "id": "8bd99220-6f03-476d-9621-36499e9ffedc", - "metadata": {}, - "source": [ - "## Remark\n", - "\n", - "All opening are lazy using dask, which makes files quick to open, until you actually load the data you need" - ] - }, - { - "cell_type": "markdown", - "id": "ea964e50-68db-4394-baec-4b3c5fb90b3e", - "metadata": {}, - "source": [ - "# Namelist\n", - "\n", - "It can be convenient to open the namelist used for the run (e.g. to compare different runs with different parameters). This is possible using the `f90nml` package (it needs to be installed, this is an optional dependency)." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "8a6cb055-e2c2-4d37-be4e-3684b0f12a71", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:34.122194Z", - "iopub.status.busy": "2023-11-29T15:56:34.121851Z", - "iopub.status.idle": "2023-11-29T15:56:34.125443Z", - "shell.execute_reply": "2023-11-29T15:56:34.124989Z" - } - }, - "outputs": [], - "source": [ - "open_namelist?" - ] - }, - { - "cell_type": "markdown", - "id": "c81264ec-2a59-43b6-adfc-b2c19ba96b49", - "metadata": {}, - "source": [ - "---\n", - "Here you provide the folder path containing the reference and configuration namelists, or the filenames (as for nemo and domcfg). You can choose to load both, or only one of them. The configration namelist will overwrite the default one.\n", - "\n", - "For this we need to use another folder of the test data (with simplified namelists for the exemple):" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "1fc7b7ba-cedf-4ebe-8105-de09edcbb7bf", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:34.127392Z", - "iopub.status.busy": "2023-11-29T15:56:34.127076Z", - "iopub.status.idle": "2023-11-29T15:56:34.129545Z", - "shell.execute_reply": "2023-11-29T15:56:34.129104Z" - } - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/namelist/')" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "id": "f413ca78-2d0f-48fd-b9d5-427c4b8ca4b3", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:34.131311Z", - "iopub.status.busy": "2023-11-29T15:56:34.131150Z", - "iopub.status.idle": "2023-11-29T15:56:34.245462Z", - "shell.execute_reply": "2023-11-29T15:56:34.244889Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "namelist_cfg namelist_ref\r\n" - ] - } - ], - "source": [ - "!ls ../xnemogcm/test/data/namelist/" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "id": "feabb3f4-f9b7-4092-b423-22db9cae36a1", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:34.247878Z", - "iopub.status.busy": "2023-11-29T15:56:34.247699Z", - "iopub.status.idle": "2023-11-29T15:56:34.259175Z", - "shell.execute_reply": "2023-11-29T15:56:34.258704Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    ()\n",
-       "Data variables:\n",
-       "    nn_no      int64 0\n",
-       "    cn_exp     <U5 'BASIN'\n",
-       "    nn_it000   int64 1\n",
-       "    nn_itend   int64 5840\n",
-       "    rn_e1_deg  float64 1.0
" - ], - "text/plain": [ - "\n", - "Dimensions: ()\n", - "Data variables:\n", - " nn_no int64 0\n", - " cn_exp \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.DataArray 'nn_it000' ()>\n",
-       "array(1)\n",
-       "Attributes:\n",
-       "    namelist:  namrun
" - ], - "text/plain": [ - "\n", - "array(1)\n", - "Attributes:\n", - " namelist: namrun" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "nam.nn_it000" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/example/recombing_mesh_mask_domain_cfg.ipynb b/example/recombing_mesh_mask_domain_cfg.ipynb deleted file mode 100644 index 17b9c37..0000000 --- a/example/recombing_mesh_mask_domain_cfg.ipynb +++ /dev/null @@ -1,3283 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "41aec3c0-ece5-4ba1-b47f-d7a6d67b0860", - "metadata": {}, - "source": [ - "Start by importing the functions" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "id": "18606253-a4d5-4f6a-9da8-7dfd96b72bea", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:35.643370Z", - "iopub.status.busy": "2023-11-29T15:56:35.642957Z", - "iopub.status.idle": "2023-11-29T15:56:35.975669Z", - "shell.execute_reply": "2023-11-29T15:56:35.975067Z" - } - }, - "outputs": [], - "source": [ - "from pathlib import Path\n", - "\n", - "from xnemogcm import open_domain_cfg, open_nemo_and_domain_cfg\n", - "from xnemogcm import __version__ as xnemogcm_version" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "84a7b456-0689-4cc7-b497-c41ea62ad477", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:35.978367Z", - "iopub.status.busy": "2023-11-29T15:56:35.977838Z", - "iopub.status.idle": "2023-11-29T15:56:35.983375Z", - "shell.execute_reply": "2023-11-29T15:56:35.982915Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "'0.4.2'" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "xnemogcm_version" - ] - }, - { - "cell_type": "markdown", - "id": "96f57a3d-4035-4c7b-acb5-5ae843eb87fd", - "metadata": {}, - "source": [ - "By default nemo outputs a mesh_mask / domain_cfg file per computing processor, if the namelist parameter is set on .true.:\n", - "\n", - "* `ln_write_cfg = .true.` to output the domain_cfg if created analyticaly in the usrdef_zgr.F90 and usrdef_hgr.F90 files\n", - "* `ln_meshmask = .true.` to output the mesh_mask files (that also contain the masks)\n", - "\n", - "While it is possible to recombine the files using the nemo fortran toolbox, xnemogcm can also recombine them easily.\n", - "\n", - "To illustrate this, we use a data folder from the test data:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "7e7eb827-e9ff-4652-8e11-c3ad01b1a65e", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:35.985496Z", - "iopub.status.busy": "2023-11-29T15:56:35.985158Z", - "iopub.status.idle": "2023-11-29T15:56:35.987779Z", - "shell.execute_reply": "2023-11-29T15:56:35.987305Z" - } - }, - "outputs": [], - "source": [ - "datadir = Path('../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/')" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "9874f77d-9755-4881-afaf-0fe72f61950e", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:35.989765Z", - "iopub.status.busy": "2023-11-29T15:56:35.989372Z", - "iopub.status.idle": "2023-11-29T15:56:36.102972Z", - "shell.execute_reply": "2023-11-29T15:56:36.102417Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "mesh_mask_0000.nc mesh_mask_0001.nc mesh_mask_0002.nc mesh_mask_0003.nc\r\n" - ] - } - ], - "source": [ - "!ls ../xnemogcm/test/data/4.2.0/mesh_mask_multi_files/" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "193b27f6-8421-4cbd-be2e-228a8705a792", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:36.105524Z", - "iopub.status.busy": "2023-11-29T15:56:36.105157Z", - "iopub.status.idle": "2023-11-29T15:56:36.723417Z", - "shell.execute_reply": "2023-11-29T15:56:36.722850Z" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:    (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n",
-       "Coordinates: (12/18)\n",
-       "    glamt      (y_c, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    glamu      (y_c, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    glamv      (y_f, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    glamf      (y_f, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    gphit      (y_c, x_c) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    gphiu      (y_c, x_f) float64 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "  * x_c        (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n",
-       "  * y_c        (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n",
-       "  * z_c        (z_c) int64 0 1 2 3\n",
-       "  * x_f        (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n",
-       "  * y_f        (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n",
-       "  * z_f        (z_f) float64 -0.5 0.5 1.5 2.5\n",
-       "Data variables: (12/28)\n",
-       "    tmask      (z_c, y_c, x_c) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    umask      (z_c, y_c, x_f) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    vmask      (z_c, y_f, x_c) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    fmask      (z_c, y_f, x_f) int8 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    tmaskutil  (y_c, x_c) int8 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    umaskutil  (y_c, x_f) int8 dask.array<chunksize=(11, 16), meta=np.ndarray>\n",
-       "    ...         ...\n",
-       "    e3u_0      (z_c, y_c, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3v_0      (z_c, y_f, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3f_0      (z_c, y_f, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3w_0      (z_f, y_c, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3uw_0     (z_f, y_c, x_f) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "    e3vw_0     (z_f, y_f, x_c) float64 dask.array<chunksize=(4, 11, 16), meta=np.ndarray>\n",
-       "Attributes: (12/13)\n",
-       "    DOMAIN_dimensions_ids:   [1 2]\n",
-       "    DOMAIN_size_global:      [32 22]\n",
-       "    DOMAIN_halo_size_start:  [0 0]\n",
-       "    DOMAIN_halo_size_end:    [0 0]\n",
-       "    DOMAIN_type:             BOX\n",
-       "    CfgName:                 GYRE\n",
-       "    ...                      ...\n",
-       "    Iperio:                  0\n",
-       "    Jperio:                  0\n",
-       "    NFold:                   0\n",
-       "    NFtype:                  -\n",
-       "    VertCoord:               zco\n",
-       "    IsfCav:                  0
" - ], - "text/plain": [ - "\n", - "Dimensions: (z_c: 4, y_c: 22, x_c: 32, x_f: 32, y_f: 22, z_f: 4)\n", - "Coordinates: (12/18)\n", - " glamt (y_c, x_c) float64 dask.array\n", - " glamu (y_c, x_f) float64 dask.array\n", - " glamv (y_f, x_c) float64 dask.array\n", - " glamf (y_f, x_f) float64 dask.array\n", - " gphit (y_c, x_c) float64 dask.array\n", - " gphiu (y_c, x_f) float64 dask.array\n", - " ... ...\n", - " * x_c (x_c) int64 0 1 2 3 4 5 6 7 8 9 ... 22 23 24 25 26 27 28 29 30 31\n", - " * y_c (y_c) int64 0 1 2 3 4 5 6 7 8 9 ... 12 13 14 15 16 17 18 19 20 21\n", - " * z_c (z_c) int64 0 1 2 3\n", - " * x_f (x_f) float64 0.5 1.5 2.5 3.5 4.5 ... 27.5 28.5 29.5 30.5 31.5\n", - " * y_f (y_f) float64 0.5 1.5 2.5 3.5 4.5 ... 17.5 18.5 19.5 20.5 21.5\n", - " * z_f (z_f) float64 -0.5 0.5 1.5 2.5\n", - "Data variables: (12/28)\n", - " tmask (z_c, y_c, x_c) int8 dask.array\n", - " umask (z_c, y_c, x_f) int8 dask.array\n", - " vmask (z_c, y_f, x_c) int8 dask.array\n", - " fmask (z_c, y_f, x_f) int8 dask.array\n", - " tmaskutil (y_c, x_c) int8 dask.array\n", - " umaskutil (y_c, x_f) int8 dask.array\n", - " ... ...\n", - " e3u_0 (z_c, y_c, x_f) float64 dask.array\n", - " e3v_0 (z_c, y_f, x_c) float64 dask.array\n", - " e3f_0 (z_c, y_f, x_f) float64 dask.array\n", - " e3w_0 (z_f, y_c, x_c) float64 dask.array\n", - " e3uw_0 (z_f, y_c, x_f) float64 dask.array\n", - " e3vw_0 (z_f, y_f, x_c) float64 dask.array\n", - "Attributes: (12/13)\n", - " DOMAIN_dimensions_ids: [1 2]\n", - " DOMAIN_size_global: [32 22]\n", - " DOMAIN_halo_size_start: [0 0]\n", - " DOMAIN_halo_size_end: [0 0]\n", - " DOMAIN_type: BOX\n", - " CfgName: GYRE\n", - " ... ...\n", - " Iperio: 0\n", - " Jperio: 0\n", - " NFold: 0\n", - " NFtype: -\n", - " VertCoord: zco\n", - " IsfCav: 0" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "domcfg = open_domain_cfg(datadir=datadir)\n", - "domcfg" - ] - }, - { - "cell_type": "markdown", - "id": "475a6a89-9353-4c11-b49f-f0874b304546", - "metadata": {}, - "source": [ - "We verify that the variables are the same than when opening a unique full mesh_mask file." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "1143759e-b37e-4352-b05c-bad53db8a3b2", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:36.725753Z", - "iopub.status.busy": "2023-11-29T15:56:36.725426Z", - "iopub.status.idle": "2023-11-29T15:56:36.887454Z", - "shell.execute_reply": "2023-11-29T15:56:36.886917Z" - } - }, - "outputs": [], - "source": [ - "domcfg_1_file = open_domain_cfg(datadir=Path('../xnemogcm/test/data/4.2.0/mesh_mask_1_file/'), files=['mesh_mask.nc'])" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "771405fe-0fef-4bce-a760-bd3d2463b831", - "metadata": { - "execution": { - "iopub.execute_input": "2023-11-29T15:56:36.889795Z", - "iopub.status.busy": "2023-11-29T15:56:36.889458Z", - "iopub.status.idle": "2023-11-29T15:56:37.267573Z", - "shell.execute_reply": "2023-11-29T15:56:37.267093Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "domcfg_1_file.equals(domcfg)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/mkdocs.yml b/mkdocs.yml index 38e8ae8..aeaf801 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -4,13 +4,15 @@ nav: - Get started: - Get started: index.md - Examples: - - "open files / Datasets": src_example/open_process_files.ipynb - - "recombine files": src_example/recombing_mesh_mask_domain_cfg.ipynb - - "compute metrics": src_example/compute_metrics.ipynb + - "open files / Datasets": examples/open_process_files.ipynb + - "recombine files": examples/recombing_mesh_mask_domain_cfg.ipynb + - "compute metrics": examples/compute_metrics.ipynb - API: - API: api.md - - "What's new": + - "For contributors": - "What's new": new.md + - "Dev environment": dev.md + - "GitHub repository": https://github.com/rcaneill/xnemogcm theme: readthedocs plugins: - mkdocs-jupyter: From e486654b78a428832c2ad739f8b2901857d553ec Mon Sep 17 00:00:00 2001 From: Romain Date: Mon, 5 Feb 2024 11:55:20 +0100 Subject: [PATCH 18/18] update what s new --- docs/new.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/new.md b/docs/new.md index 6f28dea..0d28161 100644 --- a/docs/new.md +++ b/docs/new.md @@ -1,5 +1,9 @@ # What's new +### (unreleased) +* Rework doc: set up readthedocs +* Drop python 3.8 + ### v0.4.2 (2023-08-07) * Allow additional dimension names occurring when variables on inner grid are diagnosed, e.g. `x_grid_U_inner` or `x_grid_U`. * Add coordinates into the DataArrays