From 7be78f90a3c6c8e61dc4b1a6631a4255af08ce89 Mon Sep 17 00:00:00 2001 From: Tyler Hughes Date: Mon, 26 Feb 2024 09:57:44 -0500 Subject: [PATCH 01/26] adds new adjoint notebooks --- docs/notebooks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks b/docs/notebooks index a4cb0db03..42b0f00e2 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit a4cb0db03b0add6b64b9dff145fce06b41024acc +Subproject commit 42b0f00e2ecd2fb83f2b094b0035278b2e3e427a From 1fba4523e065fc6e4afd1489c20daad9a7d721cb Mon Sep 17 00:00:00 2001 From: Tyler Hughes Date: Wed, 28 Feb 2024 11:23:23 -0500 Subject: [PATCH 02/26] updates to adjoint --- docs/notebooks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks b/docs/notebooks index 42b0f00e2..e94ddf828 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit 42b0f00e2ecd2fb83f2b094b0035278b2e3e427a +Subproject commit e94ddf828555b04996c4d2654f94f188b04eb956 From 4c244e04981612be072f376b07fe0a561e5689be Mon Sep 17 00:00:00 2001 From: daquintero Date: Thu, 29 Feb 2024 14:27:27 +0100 Subject: [PATCH 03/26] UPDATE: Notebooks submodule? --- docs/notebooks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks b/docs/notebooks index e94ddf828..a32264b93 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit e94ddf828555b04996c4d2654f94f188b04eb956 +Subproject commit a32264b93609c39ec03333c947e40b70173c47e9 From 954e6d0c5b01dac8b4267848e5eab304f57b00e9 Mon Sep 17 00:00:00 2001 From: daquintero Date: Thu, 29 Feb 2024 19:04:32 +0100 Subject: [PATCH 04/26] FIX: Don't build _faq --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 064396d80..552ebff36 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -74,7 +74,7 @@ copybutton_prompt_is_regexp = True custom_sitemap_excludes = [r"/notebooks/"] # divparams_enable_postprocessing = True # TODO FIX -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "**.ipynb_checkpoints"] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "**.ipynb_checkpoints", "faq/_faqs/*"] extensions = [ "IPython.sphinxext.ipython_directive", "IPython.sphinxext.ipython_console_highlighting", From 948c17e2ca2bd5687022e8b69b39e2c9d35decc1 Mon Sep 17 00:00:00 2001 From: Tyler Hughes Date: Fri, 1 Mar 2024 08:57:26 -0500 Subject: [PATCH 05/26] docs update mar 1 --- docs/notebooks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks b/docs/notebooks index a32264b93..69528468c 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit a32264b93609c39ec03333c947e40b70173c47e9 +Subproject commit 69528468c4adb4fa46f08c829ee8304579d54cdb From 3525fc56906a3d5bfc8c048e0caac0690397bd93 Mon Sep 17 00:00:00 2001 From: daquintero Date: Tue, 5 Mar 2024 14:47:30 +0100 Subject: [PATCH 06/26] FEAT: Update notebooks to fix missing links :hammer: --- docs/notebooks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks b/docs/notebooks index 69528468c..66221f745 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit 69528468c4adb4fa46f08c829ee8304579d54cdb +Subproject commit 66221f745c7a44e3444c7bcc2916e534408ede02 From 16a6f2b7f161d5237238bf4db11f570315340cf2 Mon Sep 17 00:00:00 2001 From: daquintero Date: Tue, 5 Mar 2024 15:01:10 +0100 Subject: [PATCH 07/26] FEAT: Update submodule states --- docs/notebooks | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/notebooks b/docs/notebooks index 66221f745..8fc320014 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit 66221f745c7a44e3444c7bcc2916e534408ede02 +Subproject commit 8fc320014572333320397026d2d2b0fad1e924f7 From 453055e89dcff6d619597120b47817e996f1c198 Mon Sep 17 00:00:00 2001 From: daquintero Date: Fri, 8 Mar 2024 16:27:30 +0100 Subject: [PATCH 08/26] FEAT: Better version management :sunny: --- tidy3d/version.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tidy3d/version.py b/tidy3d/version.py index 7ba2a894c..53753c52a 100644 --- a/tidy3d/version.py +++ b/tidy3d/version.py @@ -1,2 +1,4 @@ """Defines the front end version of tidy3d""" -__version__ = "2.6.1" +import importlib.metadata + +__version__ = importlib.metadata.version(__package__) From 261e5bca073e7bcc2e32c87288ef61cae78b8d34 Mon Sep 17 00:00:00 2001 From: daquintero Date: Tue, 12 Mar 2024 10:26:40 +0100 Subject: [PATCH 09/26] FIX: Testing configuration :test_tube: --- docs/notebooks | 2 +- pytest.ini | 2 +- scripts/test_local.sh | 10 ++++++---- .../full_test_notebooks.py | 0 4 files changed, 8 insertions(+), 6 deletions(-) rename tests/{test_notebooks => _test_notebooks}/full_test_notebooks.py (100%) diff --git a/docs/notebooks b/docs/notebooks index 4a01deecd..ba9d7db6d 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit 4a01deecdcd137f26c5f2a1ea05052aeaa10eb50 +Subproject commit ba9d7db6d47177765abd87e2d0a638e9c546846d diff --git a/pytest.ini b/pytest.ini index 331065bad..6968bfd24 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,7 +1,7 @@ [pytest] addopts = --doctest-modules doctest_optionflags = NORMALIZE_WHITESPACE ELLIPSIS -norecursedirs = tests/_test_local tests/test_cli tests/_test_data tests/full_test_notebooks tidy3d/web +norecursedirs = tests/_test_local tests/test_cli tests/_test_data tests/_test_notebooks tidy3d/web docs/notebooks docs/faq filterwarnings = ignore::DeprecationWarning testpaths = tidy3d tests docs diff --git a/scripts/test_local.sh b/scripts/test_local.sh index abfab3b0d..b971d1266 100755 --- a/scripts/test_local.sh +++ b/scripts/test_local.sh @@ -1,11 +1,13 @@ #!/bin/bash set -e -black . +black tidy3d/ +black tests/ +black scripts/ + ruff check tidy3d pytest -rA tests/ # to test without vtk, one has to restart pytest -pytest -rA tests/test_data/_test_datasets_no_vtk.py - -pytest --doctest-modules tidy3d/components +pytest -rA tests/_test_data/_test_datasets_no_vtk.py +pytest --doctest-modules tidy3d/ docs/ diff --git a/tests/test_notebooks/full_test_notebooks.py b/tests/_test_notebooks/full_test_notebooks.py similarity index 100% rename from tests/test_notebooks/full_test_notebooks.py rename to tests/_test_notebooks/full_test_notebooks.py From 4602e190c0784ef9dc61f093126961f4886befe4 Mon Sep 17 00:00:00 2001 From: daquintero Date: Tue, 12 Mar 2024 15:59:34 +0100 Subject: [PATCH 10/26] FEAT: Urgent update ruff version fix :running: --- .pre-commit-config.yaml | 2 +- poetry.lock | 68 ++++++++++++++++++++--------------------- pyproject.toml | 2 +- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 694f91e47..497bb6292 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,7 +6,7 @@ repos: name: black <<< NOTE:, if you get a message stating that "All done! n file(s) reformatted", you must git add and commit the changes again to complete the commit. >>> - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.1.5" + rev: "v0.3.2" hooks: - id: ruff args: [ --fix ] \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 8bc59b5ae..fda1f68a7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1984,13 +1984,13 @@ qtconsole = "*" [[package]] name = "jupyter-client" -version = "8.6.0" +version = "8.6.1" description = "Jupyter protocol implementation and client libraries" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"}, - {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"}, + {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, + {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"}, ] [package.dependencies] @@ -2031,13 +2031,13 @@ test = ["flaky", "pexpect", "pytest"] [[package]] name = "jupyter-core" -version = "5.7.1" +version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.7.1-py3-none-any.whl", hash = "sha256:c65c82126453a723a2804aa52409930434598fd9d35091d63dfb919d2b765bb7"}, - {file = "jupyter_core-5.7.1.tar.gz", hash = "sha256:de61a9d7fc71240f688b2fb5ab659fbb56979458dc66a71decd098e03c79e218"}, + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, ] [package.dependencies] @@ -2047,17 +2047,17 @@ traitlets = ">=5.3" [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.9.0" +version = "0.9.1" description = "Jupyter Event System library" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.9.0-py3-none-any.whl", hash = "sha256:d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf"}, - {file = "jupyter_events-0.9.0.tar.gz", hash = "sha256:81ad2e4bc710881ec274d31c6c50669d71bbaa5dd9d01e600b56faa85700d399"}, + {file = "jupyter_events-0.9.1-py3-none-any.whl", hash = "sha256:e51f43d2c25c2ddf02d7f7a5045f71fc1d5cb5ad04ef6db20da961c077654b9b"}, + {file = "jupyter_events-0.9.1.tar.gz", hash = "sha256:a52e86f59eb317ee71ff2d7500c94b963b8a24f0b7a1517e2e653e24258e15c7"}, ] [package.dependencies] @@ -2144,13 +2144,13 @@ test = ["jupyter-server[test]", "pytest"] [[package]] name = "jupyter-server-terminals" -version = "0.5.2" +version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." optional = true python-versions = ">=3.8" files = [ - {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"}, + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, ] [package.dependencies] @@ -2207,13 +2207,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.25.3" +version = "2.25.4" description = "A set of server components for JupyterLab and JupyterLab like applications." optional = true python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.25.3-py3-none-any.whl", hash = "sha256:c48862519fded9b418c71645d85a49b2f0ec50d032ba8316738e9276046088c1"}, - {file = "jupyterlab_server-2.25.3.tar.gz", hash = "sha256:846f125a8a19656611df5b03e5912c8393cea6900859baa64fa515eb64a8dc40"}, + {file = "jupyterlab_server-2.25.4-py3-none-any.whl", hash = "sha256:eb645ecc8f9b24bac5decc7803b6d5363250e16ec5af814e516bc2c54dd88081"}, + {file = "jupyterlab_server-2.25.4.tar.gz", hash = "sha256:2098198e1e82e0db982440f9b5136175d73bea2cd42a6480aa6fd502cb23c4f9"}, ] [package.dependencies] @@ -2229,7 +2229,7 @@ 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.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"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "jupyterlab-widgets" @@ -2896,13 +2896,13 @@ test = ["jsonschema", "jupyter-server[test]", "mock", "notebook", "pytest (>=6.0 [[package]] name = "nbformat" -version = "5.9.2" +version = "5.10.2" description = "The Jupyter Notebook format" optional = true python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, - {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, + {file = "nbformat-5.10.2-py3-none-any.whl", hash = "sha256:7381189a0d537586b3f18bae5dbad347d7dd0a7cf0276b09cdcd5c24d38edd99"}, + {file = "nbformat-5.10.2.tar.gz", hash = "sha256:c535b20a0d4310167bf4d12ad31eccfb0dc61e6392d6f8c570ab5b45a06a49a3"}, ] [package.dependencies] @@ -3106,13 +3106,13 @@ test = ["dm-tree (>=0.1.7)", "flax (>=0.5.3)"] [[package]] name = "orbax-checkpoint" -version = "0.5.3" +version = "0.5.5" description = "Orbax Checkpoint" optional = true python-versions = ">=3.9" files = [ - {file = "orbax_checkpoint-0.5.3-py3-none-any.whl", hash = "sha256:82acdf18acb1e294396dd583634d3b1bd005bbb81f3de650740384c465d735c3"}, - {file = "orbax_checkpoint-0.5.3.tar.gz", hash = "sha256:1572904cbbfe8513927e0d80f80b730e0ef2f680332d3c2810d8443532938b45"}, + {file = "orbax_checkpoint-0.5.5-py3-none-any.whl", hash = "sha256:e01d51e60f94e3393a08e8c07292c811b93ac58672dde80fc23844c16f2eddb7"}, + {file = "orbax_checkpoint-0.5.5.tar.gz", hash = "sha256:cebcb96f22f11736a1f9ee76c78c888baae8537268c7ff6663ad9cba3076c655"}, ] [package.dependencies] @@ -3625,13 +3625,13 @@ files = [ [[package]] name = "pydantic" -version = "2.6.3" +version = "2.6.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.3-py3-none-any.whl", hash = "sha256:72c6034df47f46ccdf81869fddb81aade68056003900a8724a4f160700016a2a"}, - {file = "pydantic-2.6.3.tar.gz", hash = "sha256:e07805c4c7f5c6826e33a1d4c9d47950d7eaf34868e2690f8594d2e30241f11f"}, + {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"}, + {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"}, ] [package.dependencies] @@ -5063,13 +5063,13 @@ numpy = ">=1.16.0" [[package]] name = "terminado" -version = "0.18.0" +version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." optional = true python-versions = ">=3.8" files = [ - {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"}, - {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"}, + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, ] [package.dependencies] @@ -5223,18 +5223,18 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.14.1" +version = "5.14.2" description = "Traitlets Python configuration system" optional = true python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, - {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, + {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, + {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.1)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "trimesh" @@ -5505,4 +5505,4 @@ vtk = ["vtk"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "ecb96f2949783e2b9e947973050ae0dd715bbab1d1c41104b586b87b8e96aec2" +content-hash = "861d569a0e7647b0b197073294e3c2e137bcbe9d2919767b6a58fe0ffa95729e" diff --git a/pyproject.toml b/pyproject.toml index 82debe95a..b8c2d7d95 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,7 +53,7 @@ pre-commit = {version="*", optional = true} pylint = {version="*", optional = true} pytest = {version="*", optional = true} pytest-timeout = {version="*", optional = true} -ruff = {version="*", optional = true} +ruff = {version="0.3.2", optional = true} tox = {version="*", optional = true} From a2c67b2d52260a8a807be04e1d63774e01fe6e73 Mon Sep 17 00:00:00 2001 From: momchil Date: Wed, 13 Mar 2024 14:35:11 -0700 Subject: [PATCH 11/26] Excluding / and " from component names --- CHANGELOG.md | 8 ++++++++ tests/test_components/test_base.py | 9 +++++++++ tidy3d/components/base.py | 12 ++++++++++++ 3 files changed, 29 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ca1200e5..63a5f18e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +### Changed +- Characters `"` and `/` not allowed in component names. + +### Fixed + + ## [2.6.1] - 2024-03-07 ### Added diff --git a/tests/test_components/test_base.py b/tests/test_components/test_base.py index 3e1292c4f..c37de026a 100644 --- a/tests/test_components/test_base.py +++ b/tests/test_components/test_base.py @@ -123,3 +123,12 @@ def test_equality(): mnt2 = td.FluxMonitor(size=(1, 1, 0), freqs=np.array([1, 2, 3]) * 1e12, name="1") assert mnt1 == mnt2 + + +def test_special_characters_in_name(): + """Test error if special characters are in a component's name.""" + with pytest.raises(ValueError): + mnt = td.FluxMonitor(size=(1, 1, 0), freqs=np.array([1, 2, 3]) * 1e12, name="mnt/flux") + + with pytest.raises(ValueError): + med = td.Medium(permittivity=1, name='"my med"') diff --git a/tidy3d/components/base.py b/tidy3d/components/base.py index fbb261b61..734fa9ece 100644 --- a/tidy3d/components/base.py +++ b/tidy3d/components/base.py @@ -31,6 +31,7 @@ JSON_TAG = "JSON_STRING" # If json string is larger than ``MAX_STRING_LENGTH``, split the string when storing in hdf5 MAX_STRING_LENGTH = 1e9 +FORBID_SPECIAL_CHARACTERS = ["/", '"'] def cache(prop): @@ -180,6 +181,17 @@ class Config: _cached_properties = pydantic.PrivateAttr({}) + @pydantic.root_validator(skip_on_failure=True) + def _special_characters_not_in_name(cls, values): + name = values.get("name") + if name: + for character in FORBID_SPECIAL_CHARACTERS: + if character in name: + raise ValueError( + f"Special character '{character}' not allowed in component name {name}." + ) + return values + def copy(self, **kwargs) -> Tidy3dBaseModel: """Copy a Tidy3dBaseModel. With ``deep=True`` as default.""" if "deep" in kwargs and kwargs["deep"] is False: From d07dc0e4a5215033d56eba63302f08cb2c452822 Mon Sep 17 00:00:00 2001 From: momchil Date: Thu, 14 Mar 2024 13:55:23 -0700 Subject: [PATCH 12/26] Fix to the time stepping speed logged in tidy3d.log --- CHANGELOG.md | 2 +- docs/notebooks | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63a5f18e0..7e0d5b9bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Characters `"` and `/` not allowed in component names. ### Fixed - +- Compute time stepping speed shown `tidy3d.log` using only the number of time steps that was run in the case of early shutoff. Previously, it was using the total number of time steps. ## [2.6.1] - 2024-03-07 diff --git a/docs/notebooks b/docs/notebooks index ba9d7db6d..69916c507 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit ba9d7db6d47177765abd87e2d0a638e9c546846d +Subproject commit 69916c5079064cb2ebfc29ea2fa9097fc8e9e368 From d7af6e79d7777d4799daf81996bbe3d13708bbd0 Mon Sep 17 00:00:00 2001 From: Weiliang Jin Date: Thu, 14 Mar 2024 16:52:33 -0700 Subject: [PATCH 13/26] Fix PolySlab intersections when bounds contain inf --- CHANGELOG.md | 2 ++ tests/test_components/test_geometry.py | 17 +++++++++++++ tidy3d/components/geometry/polyslab.py | 34 ++++++++++++++------------ 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e0d5b9bf..1e9b6ee86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Compute time stepping speed shown `tidy3d.log` using only the number of time steps that was run in the case of early shutoff. Previously, it was using the total number of time steps. +- Bug in PolySlab intersection if slab bounds are `inf` on one side. +- Divergence in the simultaneous presence of PML, absorber, and symmetry. ## [2.6.1] - 2024-03-07 diff --git a/tests/test_components/test_geometry.py b/tests/test_components/test_geometry.py index c08a2b022..8ede268e9 100644 --- a/tests/test_components/test_geometry.py +++ b/tests/test_components/test_geometry.py @@ -11,6 +11,7 @@ import warnings import tidy3d as td +from tidy3d.constants import LARGE_NUMBER from tidy3d.exceptions import SetupError, Tidy3dKeyError, ValidationError from tidy3d.components.geometry.base import Planar from tidy3d.components.geometry.utils import flatten_groups, traverse_geometries @@ -710,6 +711,22 @@ def test_polyslab_axis(axis): assert not ps.intersects_plane(x=plane_coord[0], y=plane_coord[1], z=plane_coord[2]) +def test_polyslab_intersection_inf_bounds(): + """Test if intersection returns correct shapes when one of the slab_bounds is Inf.""" + # 1) [0, inf] + poly = td.PolySlab( + vertices=[[2, -1], [-2, -1], [-2, 1], [2, 1]], + slab_bounds=[0, td.inf], + ) + assert len(poly.intersections_plane(x=0)) == 1 + assert poly.intersections_plane(x=0)[0] == shapely.box(-1, 0.0, 1, LARGE_NUMBER) + + # 2) [-inf, 0] + poly = poly.updated_copy(slab_bounds=[-td.inf, 0]) + assert len(poly.intersections_plane(x=0)) == 1 + assert poly.intersections_plane(x=0)[0] == shapely.box(-1, -LARGE_NUMBER, 1, 0) + + def test_from_shapely(): ring = shapely.LinearRing([(-16, 9), (-8, 9), (-12, 2)]) poly = shapely.Polygon([(-2, 0), (-10, 0), (-6, 7)]) diff --git a/tidy3d/components/geometry/polyslab.py b/tidy3d/components/geometry/polyslab.py index bf3f141cf..ccd9e9ec5 100644 --- a/tidy3d/components/geometry/polyslab.py +++ b/tidy3d/components/geometry/polyslab.py @@ -16,7 +16,7 @@ from ..types import MatrixReal4x4, Shapely from ...log import log from ...exceptions import SetupError, ValidationError -from ...constants import MICROMETER, fp_eps +from ...constants import MICROMETER, fp_eps, LARGE_NUMBER from ...packaging import verify_packages_import from . import base @@ -353,6 +353,8 @@ def center_axis(self) -> float: zmin, zmax = self.slab_bounds if np.isneginf(zmin) and np.isposinf(zmax): return 0.0 + zmin = max(zmin, -LARGE_NUMBER) + zmax = min(zmax, LARGE_NUMBER) return (zmax + zmin) / 2.0 @property @@ -386,7 +388,7 @@ def middle_polygon(self) -> np.ndarray: The vertices of the polygon at the middle. """ - dist = self._extrusion_length_to_offset_distance(self.length_axis / 2) + dist = self._extrusion_length_to_offset_distance(self.finite_length_axis / 2) if self.reference_plane == "bottom": return self._shift_vertices(self.reference_polygon, dist)[0] if self.reference_plane == "top": @@ -405,7 +407,7 @@ def base_polygon(self) -> np.ndarray: """ if self.reference_plane == "bottom": return self.reference_polygon - dist = self._extrusion_length_to_offset_distance(-self.length_axis / 2) + dist = self._extrusion_length_to_offset_distance(-self.finite_length_axis / 2) return self._shift_vertices(self.middle_polygon, dist)[0] @cached_property @@ -419,7 +421,7 @@ def top_polygon(self) -> np.ndarray: """ if self.reference_plane == "top": return self.reference_polygon - dist = self._extrusion_length_to_offset_distance(self.length_axis / 2) + dist = self._extrusion_length_to_offset_distance(self.finite_length_axis / 2) return self._shift_vertices(self.middle_polygon, dist)[0] @cached_property @@ -461,7 +463,7 @@ def inside( z0 = self.center_axis dist_z = np.abs(z - z0) - inside_height = dist_z <= (self.length_axis / 2) + inside_height = dist_z <= (self.finite_length_axis / 2) # avoid going into face checking if no points are inside slab bounds if not np.any(inside_height): @@ -646,14 +648,14 @@ def _intersections_side(self, position, axis) -> list: # find out all z_i where the plane will intersect the vertex z0 = self.center_axis - z_base = z0 - self.length_axis / 2 + z_base = z0 - self.finite_length_axis / 2 axis_ordered = self._order_axis(axis) height_list = self._find_intersecting_height(position, axis_ordered) polys = [] # looping through z_i to assemble the polygons - height_list = np.append(height_list, self.length_axis) + height_list = np.append(height_list, self.finite_length_axis) h_base = 0.0 for h_top in height_list: # length within between top and bottom @@ -670,7 +672,7 @@ def _intersections_side(self, position, axis) -> list: ) else: # for slanted sidewall, move up by `fp_eps` in case vertices are degenerate at the base. - dist = -(h_base - self.length_axis / 2 + fp_eps) * self._tanq + dist = -(h_base - self.finite_length_axis / 2 + fp_eps) * self._tanq vertices = self._shift_vertices(self.middle_polygon, dist)[0] ints_y, ints_angle = self._find_intersecting_ys_angle_slant( vertices, position, axis_ordered @@ -744,14 +746,14 @@ def _find_intersecting_height(self, position: float, axis: int) -> np.ndarray: # distance to the plane in the direction of vertex shifting distance = self.middle_polygon[:, axis] - position - height = distance / self._tanq / shift_val + self.length_axis / 2 + height = distance / self._tanq / shift_val + self.finite_length_axis / 2 height = np.unique(height) # further filter very close ones is_not_too_close = np.insert((np.diff(height) > fp_eps), 0, True) height = height[is_not_too_close] height = height[height > fp_eps] - height = height[height < self.length_axis - fp_eps] + height = height[height < self.finite_length_axis - fp_eps] return height def _find_intersecting_ys_angle_vertical( @@ -955,11 +957,11 @@ def bounds(self) -> Bound: max_offset = self.dilation if not isclose(self.sidewall_angle, 0): if self.reference_plane == "bottom": - max_offset += max(0, -self._tanq * self.length_axis) + max_offset += max(0, -self._tanq * self.finite_length_axis) elif self.reference_plane == "top": - max_offset += max(0, self._tanq * self.length_axis) + max_offset += max(0, self._tanq * self.finite_length_axis) elif self.reference_plane == "middle": - max_offset += max(0, abs(self._tanq) * self.length_axis / 2) + max_offset += max(0, abs(self._tanq) * self.finite_length_axis / 2) # special care when dilated if max_offset > 0: @@ -1513,7 +1515,7 @@ def _dilation_length(self) -> List[float]: """dilation length from reference plane to the top/bottom of the polyslab.""" # for "bottom", only needs to compute the offset length to the top - dist = [self._extrusion_length_to_offset_distance(self.length_axis)] + dist = [self._extrusion_length_to_offset_distance(self.finite_length_axis)] # reverse the dilation value if the reference plane is on the top if self.reference_plane == "top": dist = [-dist[0]] @@ -1527,9 +1529,9 @@ def _dilation_value_at_reference_to_coord(self, dilation: float) -> float: z_coord = -dilation / self._tanq + self.slab_bounds[0] if self.reference_plane == "middle": - return z_coord + self.length_axis / 2 + return z_coord + self.finite_length_axis / 2 if self.reference_plane == "top": - return z_coord + self.length_axis + return z_coord + self.finite_length_axis # bottom case return z_coord From f1a6a25fd664a8f9ea861b22934a06c571562f92 Mon Sep 17 00:00:00 2001 From: momchil Date: Fri, 15 Mar 2024 10:42:05 -0700 Subject: [PATCH 14/26] Fixing validator for zero-size mode bend radius --- CHANGELOG.md | 1 + docs/faq | 2 +- docs/notebooks | 2 +- tests/test_components/test_mode.py | 5 +++++ tidy3d/components/mode.py | 2 +- 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e9b6ee86..44a29fcfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Compute time stepping speed shown `tidy3d.log` using only the number of time steps that was run in the case of early shutoff. Previously, it was using the total number of time steps. - Bug in PolySlab intersection if slab bounds are `inf` on one side. - Divergence in the simultaneous presence of PML, absorber, and symmetry. +- Fixed validator for `ModeSpec.bend_radius == 0`, which was not raising an error. ## [2.6.1] - 2024-03-07 diff --git a/docs/faq b/docs/faq index 474aa67c9..70479ec84 160000 --- a/docs/faq +++ b/docs/faq @@ -1 +1 @@ -Subproject commit 474aa67c9f5e083e037b6ed20a3fe5df5ee3909b +Subproject commit 70479ec84e181a4fa3d0476d9472c330c2605be6 diff --git a/docs/notebooks b/docs/notebooks index 69916c507..480109f82 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit 69916c5079064cb2ebfc29ea2fa9097fc8e9e368 +Subproject commit 480109f82f9fb9a539a468946c2cba28f94cd1a4 diff --git a/tests/test_components/test_mode.py b/tests/test_components/test_mode.py index 871952514..8363fde22 100644 --- a/tests/test_components/test_mode.py +++ b/tests/test_components/test_mode.py @@ -24,6 +24,11 @@ def test_bend_axis_not_given(): _ = td.ModeSpec(bend_radius=1.0, bend_axis=None) +def test_zero_radius(): + with pytest.raises(pydantic.ValidationError): + _ = td.ModeSpec(bend_radius=0.0, bend_axis=1) + + def test_glancing_incidence(): with pytest.raises(pydantic.ValidationError): _ = td.ModeSpec(angle_theta=np.pi / 2) diff --git a/tidy3d/components/mode.py b/tidy3d/components/mode.py index e37861c07..8461509e6 100644 --- a/tidy3d/components/mode.py +++ b/tidy3d/components/mode.py @@ -157,7 +157,7 @@ def bend_axis_given(cls, val, values): @pd.validator("bend_radius", always=True) def bend_radius_not_zero(cls, val, values): """Check that ``bend_raidus`` magnitude is not close to zero.`""" - if val and isclose(val, 0): + if val is not None and isclose(val, 0): raise SetupError("The magnitude of 'bend_radius' must be larger than 0.") return val From 53f3f9245ff0e2024f257021ffdf84e5e1651c6e Mon Sep 17 00:00:00 2001 From: Tyler Hughes Date: Fri, 15 Mar 2024 11:25:29 -0400 Subject: [PATCH 15/26] add tracking of simulation_type for smatrix and design plugins --- docs/faq | 2 +- tidy3d/plugins/design/method.py | 2 +- tidy3d/plugins/smatrix/smatrix.py | 1 + tidy3d/web/api/webapi.py | 6 +++++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/faq b/docs/faq index 70479ec84..421b6ffd0 160000 --- a/docs/faq +++ b/docs/faq @@ -1 +1 @@ -Subproject commit 70479ec84e181a4fa3d0476d9472c330c2605be6 +Subproject commit 421b6ffd0601a3622bef5036a92cda919e7eb954 diff --git a/tidy3d/plugins/design/method.py b/tidy3d/plugins/design/method.py index 4954f1558..1ec937635 100644 --- a/tidy3d/plugins/design/method.py +++ b/tidy3d/plugins/design/method.py @@ -87,7 +87,7 @@ def _run_batch( self, simulations: Dict[str, Simulation], path_dir: str = None, **kwargs ) -> BatchData: """Create a batch of simulations and run it. Mainly separated out for ease of testing.""" - batch = web.Batch(simulations=simulations, **kwargs) + batch = web.Batch(simulations=simulations, simulation_type="tidy3d_design", **kwargs) if path_dir: kwargs["path_dir"] = path_dir return batch.run(**kwargs) diff --git a/tidy3d/plugins/smatrix/smatrix.py b/tidy3d/plugins/smatrix/smatrix.py index b1945f2dc..14401a4e8 100644 --- a/tidy3d/plugins/smatrix/smatrix.py +++ b/tidy3d/plugins/smatrix/smatrix.py @@ -350,6 +350,7 @@ def batch(self) -> Batch: folder_name=self.folder_name, callback_url=self.callback_url, verbose=self.verbose, + simulation_type="tidy3d_smatrix", ) @cached_property diff --git a/tidy3d/web/api/webapi.py b/tidy3d/web/api/webapi.py index 19601a27b..43d3a383b 100644 --- a/tidy3d/web/api/webapi.py +++ b/tidy3d/web/api/webapi.py @@ -47,6 +47,7 @@ def run( progress_callback_download: Callable[[float], None] = None, solver_version: str = None, worker_group: str = None, + simulation_type: str = "tidy3d", ) -> SimulationDataType: """ Submits a :class:`.Simulation` to server, starts running, monitors progress, downloads, @@ -67,6 +68,8 @@ def run( fields ``{'id', 'status', 'name', 'workUnit', 'solverVersion'}``. verbose : bool = True If ``True``, will print progressbars and status, otherwise, will run silently. + simulation_type : str = "tidy3d" + Type of simulation being uploaded. progress_callback_upload : Callable[[float], None] = None Optional callback function called when uploading file with ``bytes_in_chunk`` as argument. progress_callback_download : Callable[[float], None] = None @@ -127,6 +130,7 @@ def run( callback_url=callback_url, verbose=verbose, progress_callback=progress_callback_upload, + simulation_type=simulation_type, ) start( task_id, @@ -169,7 +173,7 @@ def upload( If ``True``, will print progressbars and status, otherwise, will run silently. progress_callback : Callable[[float], None] = None Optional callback function called when uploading file with ``bytes_in_chunk`` as argument. - simulation_type : str + simulation_type : str = "tidy3d" Type of simulation being uploaded. parent_tasks : List[str] List of related task ids. From b36f508874ef558d01929f732da269234c178a9e Mon Sep 17 00:00:00 2001 From: daquintero Date: Tue, 19 Mar 2024 10:45:32 +0100 Subject: [PATCH 16/26] BUILD: Improve versioning management :arrow_up: --- docs/development/release/index.rst | 2 + docs/development/release/version.rst | 39 +++ docs/notebooks | 2 +- poetry.lock | 459 ++++++++++++++++----------- poetry.toml | 2 + pyproject.toml | 48 ++- tidy3d/version.py | 6 +- 7 files changed, 367 insertions(+), 191 deletions(-) create mode 100644 docs/development/release/version.rst create mode 100644 poetry.toml diff --git a/docs/development/release/index.rst b/docs/development/release/index.rst index 0740e4d14..9abe36d03 100644 --- a/docs/development/release/index.rst +++ b/docs/development/release/index.rst @@ -10,9 +10,11 @@ Currently most of our release development flow is made under the latest ``pre/*` :hidden: flow + version requirements notebooks .. include:: /development/release/flow.rst +.. include:: /development/release/version.rst .. include:: /development/release/requirements.rst .. include:: /development/release/notebooks.rst \ No newline at end of file diff --git a/docs/development/release/version.rst b/docs/development/release/version.rst new file mode 100644 index 000000000..e482e6409 --- /dev/null +++ b/docs/development/release/version.rst @@ -0,0 +1,39 @@ +Version Release +---------------- + +There's a really nice tool to manage the releases which is called ``bump-my-version``, which has already been configured. +It's really easy to use. + +Docs of the tool available here https://callowayproject.github.io/bump-my-version/#create-a-default-configuration + +You need to have installed the development installation of ``tidy3d``: + +.. code-block:: bash + + poetry install -E dev + +Now, make sure the git index is clean, and you're ready to release. Test that the release would update the correct files: + +.. code-block:: bash + + poetry run bump-my-version show-bump + +When you want to bump the version, you only have to do: + +.. code-block:: bash + + poetry run bump-my-version bump + +An example of the ``.bump-my-version.toml`` is as below, and just configures the files to be updated: + +.. code-block:: bash + + 2024-03-20 16:58:02 ⌚ dxps in ~/flexcompute/tidy3d + ± |dario/2.6.2/fix_versioning S:1 U:3 ?:2 ✗| → poetry run bump-my-version show-bump + Specified version (2.6.1) does not match last tagged version (2.6.0) + 2.6.1 ── bump ─┬─ major ─ 3.0.0 + ├─ minor ─ 2.7.0 + ├─ patch ─ 2.6.2 + ├─ pre_l ─ 2.6.1-rc0 + ╰─ pre_n ─ 2.6.1-dev1 + diff --git a/docs/notebooks b/docs/notebooks index 480109f82..d85fe22d4 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit 480109f82f9fb9a539a468946c2cba28f94cd1a4 +Subproject commit d85fe22d49a8b6557955f3f50e561da0bfa8ceac diff --git a/poetry.lock b/poetry.lock index fda1f68a7..c4ba4e673 100644 --- a/poetry.lock +++ b/poetry.lock @@ -373,6 +373,31 @@ urllib3 = ">=1.25.4,<1.27" [package.extras] crt = ["awscrt (==0.13.8)"] +[[package]] +name = "bump-my-version" +version = "0.19.0" +description = "Version bump your Python project" +optional = true +python-versions = ">=3.8" +files = [ + {file = "bump-my-version-0.19.0.tar.gz", hash = "sha256:dec735735bac7861042cc6b892c6cbccbb0982a398742608805925f55bdeb9a4"}, + {file = "bump_my_version-0.19.0-py3-none-any.whl", hash = "sha256:4dcd5e159b82ad2d30230a5bad9771534354a9756b45a8114b04e239eaf6f9c9"}, +] + +[package.dependencies] +click = "*" +pydantic = ">=2.0.0" +pydantic-settings = "*" +questionary = "*" +rich = "*" +rich-click = "*" +tomlkit = "*" + +[package.extras] +dev = ["generate-changelog (>=0.7.6)", "git-fame (>=1.12.2)", "pip-tools", "pre-commit"] +docs = ["black", "markdown-customblocks", "mdx-truly-sane-lists", "mkdocs", "mkdocs-click", "mkdocs-drawio", "mkdocs-gen-files", "mkdocs-git-authors-plugin", "mkdocs-git-committers-plugin", "mkdocs-git-revision-date-localized-plugin", "mkdocs-include-markdown-plugin", "mkdocs-literate-nav", "mkdocs-material", "mkdocstrings[python]", "python-frontmatter"] +test = ["coverage", "pre-commit", "pytest", "pytest-cov", "pytest-mock"] + [[package]] name = "cachetools" version = "5.3.3" @@ -601,13 +626,13 @@ typing-extensions = ">=4.2.0" [[package]] name = "chex" -version = "0.1.85" +version = "0.1.86" description = "Chex: Testing made fun, in JAX!" optional = true python-versions = ">=3.9" files = [ - {file = "chex-0.1.85-py3-none-any.whl", hash = "sha256:32c96719aa94045339174138a6aec14aed2630a8a17fb2633ad3eb868890551d"}, - {file = "chex-0.1.85.tar.gz", hash = "sha256:a27cfe87119d6e1fe24ccc1438a59195e6dc1d6e0e10099fcf618c3f64771faf"}, + {file = "chex-0.1.86-py3-none-any.whl", hash = "sha256:251c20821092323a3d9c28e1cf80e4a58180978bec368f531949bd9847eee568"}, + {file = "chex-0.1.86.tar.gz", hash = "sha256:e8b0f96330eba4144659e1617c0f7a57b161e8cbb021e55c6d5056c7378091d1"}, ] [package.dependencies] @@ -674,13 +699,13 @@ files = [ [[package]] name = "comm" -version = "0.2.1" +version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = true python-versions = ">=3.8" files = [ - {file = "comm-0.2.1-py3-none-any.whl", hash = "sha256:87928485c0dfc0e7976fd89fc1e187023cf587e7c353e4a9b417555b44adf021"}, - {file = "comm-0.2.1.tar.gz", hash = "sha256:0bc91edae1344d39d3661dcbc36937181fdaddb304790458f8b044dbc064b89a"}, + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, ] [package.dependencies] @@ -768,63 +793,63 @@ test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] [[package]] name = "coverage" -version = "7.4.3" +version = "7.4.4" description = "Code coverage measurement for Python" optional = true python-versions = ">=3.8" files = [ - {file = "coverage-7.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8580b827d4746d47294c0e0b92854c85a92c2227927433998f0d3320ae8a71b6"}, - {file = "coverage-7.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:718187eeb9849fc6cc23e0d9b092bc2348821c5e1a901c9f8975df0bc785bfd4"}, - {file = "coverage-7.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:767b35c3a246bcb55b8044fd3a43b8cd553dd1f9f2c1eeb87a302b1f8daa0524"}, - {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae7f19afe0cce50039e2c782bff379c7e347cba335429678450b8fe81c4ef96d"}, - {file = "coverage-7.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba3a8aaed13770e970b3df46980cb068d1c24af1a1968b7818b69af8c4347efb"}, - {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ee866acc0861caebb4f2ab79f0b94dbfbdbfadc19f82e6e9c93930f74e11d7a0"}, - {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:506edb1dd49e13a2d4cac6a5173317b82a23c9d6e8df63efb4f0380de0fbccbc"}, - {file = "coverage-7.4.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd6545d97c98a192c5ac995d21c894b581f1fd14cf389be90724d21808b657e2"}, - {file = "coverage-7.4.3-cp310-cp310-win32.whl", hash = "sha256:f6a09b360d67e589236a44f0c39218a8efba2593b6abdccc300a8862cffc2f94"}, - {file = "coverage-7.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:18d90523ce7553dd0b7e23cbb28865db23cddfd683a38fb224115f7826de78d0"}, - {file = "coverage-7.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cbbe5e739d45a52f3200a771c6d2c7acf89eb2524890a4a3aa1a7fa0695d2a47"}, - {file = "coverage-7.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:489763b2d037b164846ebac0cbd368b8a4ca56385c4090807ff9fad817de4113"}, - {file = "coverage-7.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:451f433ad901b3bb00184d83fd83d135fb682d780b38af7944c9faeecb1e0bfe"}, - {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcc66e222cf4c719fe7722a403888b1f5e1682d1679bd780e2b26c18bb648cdc"}, - {file = "coverage-7.4.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ec74cfef2d985e145baae90d9b1b32f85e1741b04cd967aaf9cfa84c1334f3"}, - {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:abbbd8093c5229c72d4c2926afaee0e6e3140de69d5dcd918b2921f2f0c8baba"}, - {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:35eb581efdacf7b7422af677b92170da4ef34500467381e805944a3201df2079"}, - {file = "coverage-7.4.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8249b1c7334be8f8c3abcaaa996e1e4927b0e5a23b65f5bf6cfe3180d8ca7840"}, - {file = "coverage-7.4.3-cp311-cp311-win32.whl", hash = "sha256:cf30900aa1ba595312ae41978b95e256e419d8a823af79ce670835409fc02ad3"}, - {file = "coverage-7.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:18c7320695c949de11a351742ee001849912fd57e62a706d83dfc1581897fa2e"}, - {file = "coverage-7.4.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b51bfc348925e92a9bd9b2e48dad13431b57011fd1038f08316e6bf1df107d10"}, - {file = "coverage-7.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d6cdecaedea1ea9e033d8adf6a0ab11107b49571bbb9737175444cea6eb72328"}, - {file = "coverage-7.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b2eccb883368f9e972e216c7b4c7c06cabda925b5f06dde0650281cb7666a30"}, - {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c00cdc8fa4e50e1cc1f941a7f2e3e0f26cb2a1233c9696f26963ff58445bac7"}, - {file = "coverage-7.4.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b9a4a8dd3dcf4cbd3165737358e4d7dfbd9d59902ad11e3b15eebb6393b0446e"}, - {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:062b0a75d9261e2f9c6d071753f7eef0fc9caf3a2c82d36d76667ba7b6470003"}, - {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ebe7c9e67a2d15fa97b77ea6571ce5e1e1f6b0db71d1d5e96f8d2bf134303c1d"}, - {file = "coverage-7.4.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c0a120238dd71c68484f02562f6d446d736adcc6ca0993712289b102705a9a3a"}, - {file = "coverage-7.4.3-cp312-cp312-win32.whl", hash = "sha256:37389611ba54fd6d278fde86eb2c013c8e50232e38f5c68235d09d0a3f8aa352"}, - {file = "coverage-7.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:d25b937a5d9ffa857d41be042b4238dd61db888533b53bc76dc082cb5a15e914"}, - {file = "coverage-7.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:28ca2098939eabab044ad68850aac8f8db6bf0b29bc7f2887d05889b17346454"}, - {file = "coverage-7.4.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:280459f0a03cecbe8800786cdc23067a8fc64c0bd51dc614008d9c36e1659d7e"}, - {file = "coverage-7.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c0cdedd3500e0511eac1517bf560149764b7d8e65cb800d8bf1c63ebf39edd2"}, - {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a9babb9466fe1da12417a4aed923e90124a534736de6201794a3aea9d98484e"}, - {file = "coverage-7.4.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dec9de46a33cf2dd87a5254af095a409ea3bf952d85ad339751e7de6d962cde6"}, - {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:16bae383a9cc5abab9bb05c10a3e5a52e0a788325dc9ba8499e821885928968c"}, - {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2c854ce44e1ee31bda4e318af1dbcfc929026d12c5ed030095ad98197eeeaed0"}, - {file = "coverage-7.4.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ce8c50520f57ec57aa21a63ea4f325c7b657386b3f02ccaedeccf9ebe27686e1"}, - {file = "coverage-7.4.3-cp38-cp38-win32.whl", hash = "sha256:708a3369dcf055c00ddeeaa2b20f0dd1ce664eeabde6623e516c5228b753654f"}, - {file = "coverage-7.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:1bf25fbca0c8d121a3e92a2a0555c7e5bc981aee5c3fdaf4bb7809f410f696b9"}, - {file = "coverage-7.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b253094dbe1b431d3a4ac2f053b6d7ede2664ac559705a704f621742e034f1f"}, - {file = "coverage-7.4.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77fbfc5720cceac9c200054b9fab50cb2a7d79660609200ab83f5db96162d20c"}, - {file = "coverage-7.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6679060424faa9c11808598504c3ab472de4531c571ab2befa32f4971835788e"}, - {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4af154d617c875b52651dd8dd17a31270c495082f3d55f6128e7629658d63765"}, - {file = "coverage-7.4.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8640f1fde5e1b8e3439fe482cdc2b0bb6c329f4bb161927c28d2e8879c6029ee"}, - {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:69b9f6f66c0af29642e73a520b6fed25ff9fd69a25975ebe6acb297234eda501"}, - {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0842571634f39016a6c03e9d4aba502be652a6e4455fadb73cd3a3a49173e38f"}, - {file = "coverage-7.4.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a78ed23b08e8ab524551f52953a8a05d61c3a760781762aac49f8de6eede8c45"}, - {file = "coverage-7.4.3-cp39-cp39-win32.whl", hash = "sha256:c0524de3ff096e15fcbfe8f056fdb4ea0bf497d584454f344d59fce069d3e6e9"}, - {file = "coverage-7.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:0209a6369ccce576b43bb227dc8322d8ef9e323d089c6f3f26a597b09cb4d2aa"}, - {file = "coverage-7.4.3-pp38.pp39.pp310-none-any.whl", hash = "sha256:7cbde573904625509a3f37b6fecea974e363460b556a627c60dc2f47e2fffa51"}, - {file = "coverage-7.4.3.tar.gz", hash = "sha256:276f6077a5c61447a48d133ed13e759c09e62aff0dc84274a68dc18660104d52"}, + {file = "coverage-7.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0be5efd5127542ef31f165de269f77560d6cdef525fffa446de6f7e9186cfb2"}, + {file = "coverage-7.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ccd341521be3d1b3daeb41960ae94a5e87abe2f46f17224ba5d6f2b8398016cf"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fa497a8ab37784fbb20ab699c246053ac294d13fc7eb40ec007a5043ec91f8"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b1a93009cb80730c9bca5d6d4665494b725b6e8e157c1cb7f2db5b4b122ea562"}, + {file = "coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:690db6517f09336559dc0b5f55342df62370a48f5469fabf502db2c6d1cffcd2"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:09c3255458533cb76ef55da8cc49ffab9e33f083739c8bd4f58e79fecfe288f7"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8ce1415194b4a6bd0cdcc3a1dfbf58b63f910dcb7330fe15bdff542c56949f87"}, + {file = "coverage-7.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b91cbc4b195444e7e258ba27ac33769c41b94967919f10037e6355e998af255c"}, + {file = "coverage-7.4.4-cp310-cp310-win32.whl", hash = "sha256:598825b51b81c808cb6f078dcb972f96af96b078faa47af7dfcdf282835baa8d"}, + {file = "coverage-7.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:09ef9199ed6653989ebbcaacc9b62b514bb63ea2f90256e71fea3ed74bd8ff6f"}, + {file = "coverage-7.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0f9f50e7ef2a71e2fae92774c99170eb8304e3fdf9c8c3c7ae9bab3e7229c5cf"}, + {file = "coverage-7.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:623512f8ba53c422fcfb2ce68362c97945095b864cda94a92edbaf5994201083"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0513b9508b93da4e1716744ef6ebc507aff016ba115ffe8ecff744d1322a7b63"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40209e141059b9370a2657c9b15607815359ab3ef9918f0196b6fccce8d3230f"}, + {file = "coverage-7.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a2b2b78c78293782fd3767d53e6474582f62443d0504b1554370bde86cc8227"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:73bfb9c09951125d06ee473bed216e2c3742f530fc5acc1383883125de76d9cd"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:1f384c3cc76aeedce208643697fb3e8437604b512255de6d18dae3f27655a384"}, + {file = "coverage-7.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:54eb8d1bf7cacfbf2a3186019bcf01d11c666bd495ed18717162f7eb1e9dd00b"}, + {file = "coverage-7.4.4-cp311-cp311-win32.whl", hash = "sha256:cac99918c7bba15302a2d81f0312c08054a3359eaa1929c7e4b26ebe41e9b286"}, + {file = "coverage-7.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:b14706df8b2de49869ae03a5ccbc211f4041750cd4a66f698df89d44f4bd30ec"}, + {file = "coverage-7.4.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:201bef2eea65e0e9c56343115ba3814e896afe6d36ffd37bab783261db430f76"}, + {file = "coverage-7.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:41c9c5f3de16b903b610d09650e5e27adbfa7f500302718c9ffd1c12cf9d6818"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d898fe162d26929b5960e4e138651f7427048e72c853607f2b200909794ed978"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ea79bb50e805cd6ac058dfa3b5c8f6c040cb87fe83de10845857f5535d1db70"}, + {file = "coverage-7.4.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce4b94265ca988c3f8e479e741693d143026632672e3ff924f25fab50518dd51"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:00838a35b882694afda09f85e469c96367daa3f3f2b097d846a7216993d37f4c"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:fdfafb32984684eb03c2d83e1e51f64f0906b11e64482df3c5db936ce3839d48"}, + {file = "coverage-7.4.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:69eb372f7e2ece89f14751fbcbe470295d73ed41ecd37ca36ed2eb47512a6ab9"}, + {file = "coverage-7.4.4-cp312-cp312-win32.whl", hash = "sha256:137eb07173141545e07403cca94ab625cc1cc6bc4c1e97b6e3846270e7e1fea0"}, + {file = "coverage-7.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d71eec7d83298f1af3326ce0ff1d0ea83c7cb98f72b577097f9083b20bdaf05e"}, + {file = "coverage-7.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ae728ff3b5401cc320d792866987e7e7e880e6ebd24433b70a33b643bb0384"}, + {file = "coverage-7.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cc4f1358cb0c78edef3ed237ef2c86056206bb8d9140e73b6b89fbcfcbdd40e1"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8130a2aa2acb8788e0b56938786c33c7c98562697bf9f4c7d6e8e5e3a0501e4a"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf271892d13e43bc2b51e6908ec9a6a5094a4df1d8af0bfc360088ee6c684409"}, + {file = "coverage-7.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4cdc86d54b5da0df6d3d3a2f0b710949286094c3a6700c21e9015932b81447e"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae71e7ddb7a413dd60052e90528f2f65270aad4b509563af6d03d53e979feafd"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:38dd60d7bf242c4ed5b38e094baf6401faa114fc09e9e6632374388a404f98e7"}, + {file = "coverage-7.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aa5b1c1bfc28384f1f53b69a023d789f72b2e0ab1b3787aae16992a7ca21056c"}, + {file = "coverage-7.4.4-cp38-cp38-win32.whl", hash = "sha256:dfa8fe35a0bb90382837b238fff375de15f0dcdb9ae68ff85f7a63649c98527e"}, + {file = "coverage-7.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:b2991665420a803495e0b90a79233c1433d6ed77ef282e8e152a324bbbc5e0c8"}, + {file = "coverage-7.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3b799445b9f7ee8bf299cfaed6f5b226c0037b74886a4e11515e569b36fe310d"}, + {file = "coverage-7.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b4d33f418f46362995f1e9d4f3a35a1b6322cb959c31d88ae56b0298e1c22357"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aadacf9a2f407a4688d700e4ebab33a7e2e408f2ca04dbf4aef17585389eff3e"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c95949560050d04d46b919301826525597f07b33beba6187d04fa64d47ac82e"}, + {file = "coverage-7.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff7687ca3d7028d8a5f0ebae95a6e4827c5616b31a4ee1192bdfde697db110d4"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fc1de20b2d4a061b3df27ab9b7c7111e9a710f10dc2b84d33a4ab25065994ec"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c74880fc64d4958159fbd537a091d2a585448a8f8508bf248d72112723974cbd"}, + {file = "coverage-7.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:742a76a12aa45b44d236815d282b03cfb1de3b4323f3e4ec933acfae08e54ade"}, + {file = "coverage-7.4.4-cp39-cp39-win32.whl", hash = "sha256:d89d7b2974cae412400e88f35d86af72208e1ede1a541954af5d944a8ba46c57"}, + {file = "coverage-7.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:9ca28a302acb19b6af89e90f33ee3e1906961f94b54ea37de6737b7ca9d8827c"}, + {file = "coverage-7.4.4-pp38.pp39.pp310-none-any.whl", hash = "sha256:b2c5edc4ac10a7ef6605a966c58929ec6c1bd0917fb8c15cb3363f65aa40e677"}, + {file = "coverage-7.4.4.tar.gz", hash = "sha256:c901df83d097649e257e803be22592aedfd5182f07b3cc87d640bbb9afd50f49"}, ] [package.extras] @@ -1118,13 +1143,13 @@ testing = ["black[jupyter] (==23.7.0)", "clu", "einops", "gymnasium[accept-rom-l [[package]] name = "flax" -version = "0.8.1" +version = "0.8.2" description = "Flax: A neural network library for JAX designed for flexibility" optional = true python-versions = ">=3.9" files = [ - {file = "flax-0.8.1-py3-none-any.whl", hash = "sha256:8cf9ef11859eef252470377556a8cc48db287fc6647407ab34f1fc01461925dd"}, - {file = "flax-0.8.1.tar.gz", hash = "sha256:ce3d99e9b4c0d2e4d9fc28bc56cced8ba953adfd695aabd24f096b4c8a7e2f92"}, + {file = "flax-0.8.2-py3-none-any.whl", hash = "sha256:911d83e01380fdb3135c309e70981aabd15e7ca038014d7989ddc3cfaf4d0d45"}, + {file = "flax-0.8.2.tar.gz", hash = "sha256:1c4e43ac3cb32e8e15c733cfa3df8d827b61d9ce29b50a7035920bfe9fdaa5b0"}, ] [package.dependencies] @@ -1147,53 +1172,53 @@ testing = ["black[jupyter] (==23.7.0)", "clu", "clu (<=0.0.9)", "einops", "gymna [[package]] name = "fonttools" -version = "4.49.0" +version = "4.50.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, - {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, - {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, - {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, - {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, - {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, - {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, - {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, - {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, - {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, - {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, - {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, - {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, + {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:effd303fb422f8ce06543a36ca69148471144c534cc25f30e5be752bc4f46736"}, + {file = "fonttools-4.50.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7913992ab836f621d06aabac118fc258b9947a775a607e1a737eb3a91c360335"}, + {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e0a1c5bd2f63da4043b63888534b52c5a1fd7ae187c8ffc64cbb7ae475b9dab"}, + {file = "fonttools-4.50.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d40fc98540fa5360e7ecf2c56ddf3c6e7dd04929543618fd7b5cc76e66390562"}, + {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fff65fbb7afe137bac3113827855e0204482727bddd00a806034ab0d3951d0d"}, + {file = "fonttools-4.50.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1aeae3dd2ee719074a9372c89ad94f7c581903306d76befdaca2a559f802472"}, + {file = "fonttools-4.50.0-cp310-cp310-win32.whl", hash = "sha256:e9623afa319405da33b43c85cceb0585a6f5d3a1d7c604daf4f7e1dd55c03d1f"}, + {file = "fonttools-4.50.0-cp310-cp310-win_amd64.whl", hash = "sha256:778c5f43e7e654ef7fe0605e80894930bc3a7772e2f496238e57218610140f54"}, + {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3dfb102e7f63b78c832e4539969167ffcc0375b013080e6472350965a5fe8048"}, + {file = "fonttools-4.50.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9e58fe34cb379ba3d01d5d319d67dd3ce7ca9a47ad044ea2b22635cd2d1247fc"}, + {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c673ab40d15a442a4e6eb09bf007c1dda47c84ac1e2eecbdf359adacb799c24"}, + {file = "fonttools-4.50.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b3ac35cdcd1a4c90c23a5200212c1bb74fa05833cc7c14291d7043a52ca2aaa"}, + {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8844e7a2c5f7ecf977e82eb6b3014f025c8b454e046d941ece05b768be5847ae"}, + {file = "fonttools-4.50.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f849bd3c5c2249b49c98eca5aaebb920d2bfd92b3c69e84ca9bddf133e9f83f0"}, + {file = "fonttools-4.50.0-cp311-cp311-win32.whl", hash = "sha256:39293ff231b36b035575e81c14626dfc14407a20de5262f9596c2cbb199c3625"}, + {file = "fonttools-4.50.0-cp311-cp311-win_amd64.whl", hash = "sha256:c33d5023523b44d3481624f840c8646656a1def7630ca562f222eb3ead16c438"}, + {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b4a886a6dbe60100ba1cd24de962f8cd18139bd32808da80de1fa9f9f27bf1dc"}, + {file = "fonttools-4.50.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b2ca1837bfbe5eafa11313dbc7edada79052709a1fffa10cea691210af4aa1fa"}, + {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0493dd97ac8977e48ffc1476b932b37c847cbb87fd68673dee5182004906828"}, + {file = "fonttools-4.50.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77844e2f1b0889120b6c222fc49b2b75c3d88b930615e98893b899b9352a27ea"}, + {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3566bfb8c55ed9100afe1ba6f0f12265cd63a1387b9661eb6031a1578a28bad1"}, + {file = "fonttools-4.50.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:35e10ddbc129cf61775d58a14f2d44121178d89874d32cae1eac722e687d9019"}, + {file = "fonttools-4.50.0-cp312-cp312-win32.whl", hash = "sha256:cc8140baf9fa8f9b903f2b393a6c413a220fa990264b215bf48484f3d0bf8710"}, + {file = "fonttools-4.50.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ccc85fd96373ab73c59833b824d7a73846670a0cb1f3afbaee2b2c426a8f931"}, + {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e270a406219af37581d96c810172001ec536e29e5593aa40d4c01cca3e145aa6"}, + {file = "fonttools-4.50.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac2463de667233372e9e1c7e9de3d914b708437ef52a3199fdbf5a60184f190c"}, + {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47abd6669195abe87c22750dbcd366dc3a0648f1b7c93c2baa97429c4dc1506e"}, + {file = "fonttools-4.50.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:074841375e2e3d559aecc86e1224caf78e8b8417bb391e7d2506412538f21adc"}, + {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0743fd2191ad7ab43d78cd747215b12033ddee24fa1e088605a3efe80d6984de"}, + {file = "fonttools-4.50.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3d7080cce7be5ed65bee3496f09f79a82865a514863197ff4d4d177389e981b0"}, + {file = "fonttools-4.50.0-cp38-cp38-win32.whl", hash = "sha256:a467ba4e2eadc1d5cc1a11d355abb945f680473fbe30d15617e104c81f483045"}, + {file = "fonttools-4.50.0-cp38-cp38-win_amd64.whl", hash = "sha256:f77e048f805e00870659d6318fd89ef28ca4ee16a22b4c5e1905b735495fc422"}, + {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b6245eafd553c4e9a0708e93be51392bd2288c773523892fbd616d33fd2fda59"}, + {file = "fonttools-4.50.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a4062cc7e8de26f1603323ef3ae2171c9d29c8a9f5e067d555a2813cd5c7a7e0"}, + {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34692850dfd64ba06af61e5791a441f664cb7d21e7b544e8f385718430e8f8e4"}, + {file = "fonttools-4.50.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678dd95f26a67e02c50dcb5bf250f95231d455642afbc65a3b0bcdacd4e4dd38"}, + {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4f2ce7b0b295fe64ac0a85aef46a0f2614995774bd7bc643b85679c0283287f9"}, + {file = "fonttools-4.50.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d346f4dc2221bfb7ab652d1e37d327578434ce559baf7113b0f55768437fe6a0"}, + {file = "fonttools-4.50.0-cp39-cp39-win32.whl", hash = "sha256:a51eeaf52ba3afd70bf489be20e52fdfafe6c03d652b02477c6ce23c995222f4"}, + {file = "fonttools-4.50.0-cp39-cp39-win_amd64.whl", hash = "sha256:8639be40d583e5d9da67795aa3eeeda0488fb577a1d42ae11a5036f18fb16d93"}, + {file = "fonttools-4.50.0-py3-none-any.whl", hash = "sha256:48fa36da06247aa8282766cfd63efff1bb24e55f020f29a335939ed3844d20d3"}, + {file = "fonttools-4.50.0.tar.gz", hash = "sha256:fa5cf61058c7dbb104c2ac4e782bf1b2016a8cf2f69de6e4dd6a865d2c969bb5"}, ] [package.extras] @@ -1223,13 +1248,13 @@ files = [ [[package]] name = "fsspec" -version = "2024.2.0" +version = "2024.3.1" description = "File-system specification" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2024.2.0-py3-none-any.whl", hash = "sha256:817f969556fa5916bc682e02ca2045f96ff7f586d45110fcb76022063ad2c7d8"}, - {file = "fsspec-2024.2.0.tar.gz", hash = "sha256:b6ad1a679f760dda52b1168c859d01b7b80648ea6f7f7c7f5a8a91dc3f3ecb84"}, + {file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"}, + {file = "fsspec-2024.3.1.tar.gz", hash = "sha256:f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9"}, ] [package.extras] @@ -1542,13 +1567,13 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.1.3" +version = "6.3.2" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.1.3-py3-none-any.whl", hash = "sha256:4c0269e3580fe2634d364b39b38b961540a7738c02cb984e98add8b4221d793d"}, - {file = "importlib_resources-6.1.3.tar.gz", hash = "sha256:56fb4525197b78544a3354ea27793952ab93f935bb4bf746b846bb1015020f2b"}, + {file = "importlib_resources-6.3.2-py3-none-any.whl", hash = "sha256:f41f4098b16cd140a97d256137cfd943d958219007990b2afb00439fc623f580"}, + {file = "importlib_resources-6.3.2.tar.gz", hash = "sha256:963eb79649252b0160c1afcfe5a1d3fe3ad66edd0a8b114beacffb70c0674223"}, ] [package.dependencies] @@ -1896,18 +1921,15 @@ files = [ [[package]] name = "json5" -version = "0.9.22" +version = "0.9.24" description = "A Python implementation of the JSON5 data format." optional = true python-versions = ">=3.8" files = [ - {file = "json5-0.9.22-py3-none-any.whl", hash = "sha256:6621007c70897652f8b5d03885f732771c48d1925591ad989aa80c7e0e5ad32f"}, - {file = "json5-0.9.22.tar.gz", hash = "sha256:b729bde7650b2196a35903a597d2b704b8fdf8648bfb67368cfb79f1174a17bd"}, + {file = "json5-0.9.24-py3-none-any.whl", hash = "sha256:4ca101fd5c7cb47960c055ef8f4d0e31e15a7c6c48c3b6f1473fc83b6c462a13"}, + {file = "json5-0.9.24.tar.gz", hash = "sha256:0c638399421da959a20952782800e5c1a78c14e08e1dc9738fa10d8ec14d58c8"}, ] -[package.extras] -dev = ["hypothesis"] - [[package]] name = "jsonpointer" version = "2.4" @@ -2051,13 +2073,13 @@ test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout" [[package]] name = "jupyter-events" -version = "0.9.1" +version = "0.10.0" description = "Jupyter Event System library" optional = true python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.9.1-py3-none-any.whl", hash = "sha256:e51f43d2c25c2ddf02d7f7a5045f71fc1d5cb5ad04ef6db20da961c077654b9b"}, - {file = "jupyter_events-0.9.1.tar.gz", hash = "sha256:a52e86f59eb317ee71ff2d7500c94b963b8a24f0b7a1517e2e653e24258e15c7"}, + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, ] [package.dependencies] @@ -2163,13 +2185,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.1.4" +version = "4.1.5" description = "JupyterLab computational environment" optional = true python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.1.4-py3-none-any.whl", hash = "sha256:f92c3f2b12b88efcf767205f49be9b2f86b85544f9c4f342bb5e9904a16cf931"}, - {file = "jupyterlab-4.1.4.tar.gz", hash = "sha256:e03c82c124ad8a0892e498b9dde79c50868b2c267819aca3f55ce47c57ebeb1d"}, + {file = "jupyterlab-4.1.5-py3-none-any.whl", hash = "sha256:3bc843382a25e1ab7bc31d9e39295a9f0463626692b7995597709c0ab236ab2c"}, + {file = "jupyterlab-4.1.5.tar.gz", hash = "sha256:c9ad75290cb10bfaff3624bf3fbb852319b4cce4c456613f8ebbaa98d03524db"}, ] [package.dependencies] @@ -2752,7 +2774,6 @@ files = [ {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273"}, {file = "msgpack-1.0.8-cp39-cp39-win32.whl", hash = "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d"}, {file = "msgpack-1.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ed59dd52075f8fc91da6053b12e8c89e37aa043f8986efd89e61fae69dc1b011"}, - {file = "msgpack-1.0.8-py3-none-any.whl", hash = "sha256:24f727df1e20b9876fa6e95f840a2a2651e34c0ad147676356f4bf5fbb0206ca"}, {file = "msgpack-1.0.8.tar.gz", hash = "sha256:95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3"}, ] @@ -2810,13 +2831,13 @@ icu = ["PyICU (>=1.0.0)"] [[package]] name = "nbclient" -version = "0.9.0" +version = "0.10.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = true python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"}, - {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"}, + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, ] [package.dependencies] @@ -2828,7 +2849,7 @@ traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" @@ -2896,13 +2917,13 @@ test = ["jsonschema", "jupyter-server[test]", "mock", "notebook", "pytest (>=6.0 [[package]] name = "nbformat" -version = "5.10.2" +version = "5.10.3" description = "The Jupyter Notebook format" optional = true python-versions = ">=3.8" files = [ - {file = "nbformat-5.10.2-py3-none-any.whl", hash = "sha256:7381189a0d537586b3f18bae5dbad347d7dd0a7cf0276b09cdcd5c24d38edd99"}, - {file = "nbformat-5.10.2.tar.gz", hash = "sha256:c535b20a0d4310167bf4d12ad31eccfb0dc61e6392d6f8c570ab5b45a06a49a3"}, + {file = "nbformat-5.10.3-py3-none-any.whl", hash = "sha256:d9476ca28676799af85385f409b49d95e199951477a159a576ef2a675151e5e8"}, + {file = "nbformat-5.10.3.tar.gz", hash = "sha256:60ed5e910ef7c6264b87d644f276b1b49e24011930deef54605188ddeb211685"}, ] [package.dependencies] @@ -2979,13 +3000,13 @@ setuptools = "*" [[package]] name = "notebook" -version = "7.1.1" +version = "7.1.2" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = true python-versions = ">=3.8" files = [ - {file = "notebook-7.1.1-py3-none-any.whl", hash = "sha256:197d8e0595acabf4005851c8716e952a81b405f7aefb648067a761fbde267ce7"}, - {file = "notebook-7.1.1.tar.gz", hash = "sha256:818e7420fa21f402e726afb9f02df7f3c10f294c02e383ed19852866c316108b"}, + {file = "notebook-7.1.2-py3-none-any.whl", hash = "sha256:fc6c24b9aef18d0cd57157c9c47e95833b9b0bdc599652639acf0bdb61dc7d5f"}, + {file = "notebook-7.1.2.tar.gz", hash = "sha256:efc2c80043909e0faa17fce9e9b37c059c03af0ec99a4d4db84cb21d9d2e936a"}, ] [package.dependencies] @@ -3106,13 +3127,13 @@ test = ["dm-tree (>=0.1.7)", "flax (>=0.5.3)"] [[package]] name = "orbax-checkpoint" -version = "0.5.5" +version = "0.5.6" description = "Orbax Checkpoint" optional = true python-versions = ">=3.9" files = [ - {file = "orbax_checkpoint-0.5.5-py3-none-any.whl", hash = "sha256:e01d51e60f94e3393a08e8c07292c811b93ac58672dde80fc23844c16f2eddb7"}, - {file = "orbax_checkpoint-0.5.5.tar.gz", hash = "sha256:cebcb96f22f11736a1f9ee76c78c888baae8537268c7ff6663ad9cba3076c655"}, + {file = "orbax_checkpoint-0.5.6-py3-none-any.whl", hash = "sha256:b4b15f2724cf2b756d01713e26bd360be40fb6ff259fb42e557f0691198a44ab"}, + {file = "orbax_checkpoint-0.5.6.tar.gz", hash = "sha256:0796fffc9daf23aa4936864062a14e1cf1e8e194273b2920c1a25fff45885017"}, ] [package.dependencies] @@ -3527,22 +3548,22 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "4.25.3" +version = "5.26.0" description = "" optional = true python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, - {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, - {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, - {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, - {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, - {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, - {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, - {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, - {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, + {file = "protobuf-5.26.0-cp310-abi3-win32.whl", hash = "sha256:f9ecc8eb6f18037e0cbf43256db0325d4723f429bca7ef5cd358b7c29d65f628"}, + {file = "protobuf-5.26.0-cp310-abi3-win_amd64.whl", hash = "sha256:dfd29f6eb34107dccf289a93d44fb6b131e68888d090b784b691775ac84e8213"}, + {file = "protobuf-5.26.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:7e47c57303466c867374a17b2b5e99c5a7c8b72a94118e2f28efb599f19b4069"}, + {file = "protobuf-5.26.0-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e184175276edc222e2d5e314a72521e10049938a9a4961fe4bea9b25d073c03f"}, + {file = "protobuf-5.26.0-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:6ee9d1aa02f951c5ce10bf8c6cfb7604133773038e33f913183c8b5201350600"}, + {file = "protobuf-5.26.0-cp38-cp38-win32.whl", hash = "sha256:2c334550e1cb4efac5c8a3987384bf13a4334abaf5ab59e40479e7b70ecd6b19"}, + {file = "protobuf-5.26.0-cp38-cp38-win_amd64.whl", hash = "sha256:8eef61a90631c21b06b4f492a27e199a269827f046de3bb68b61aa84fcf50905"}, + {file = "protobuf-5.26.0-cp39-cp39-win32.whl", hash = "sha256:ca825f4eecb8c342d2ec581e6a5ad1ad1a47bededaecd768e0d3451ae4aaac2b"}, + {file = "protobuf-5.26.0-cp39-cp39-win_amd64.whl", hash = "sha256:efd4f5894c50bd76cbcfdd668cd941021333861ed0f441c78a83d8254a01cc9f"}, + {file = "protobuf-5.26.0-py3-none-any.whl", hash = "sha256:a49b6c5359bf34fb7bf965bf21abfab4476e4527d822ab5289ee3bf73f291159"}, + {file = "protobuf-5.26.0.tar.gz", hash = "sha256:82f5870d74c99addfe4152777bdf8168244b9cf0ac65f8eccf045ddfa9d80d9b"}, ] [[package]] @@ -3733,6 +3754,25 @@ files = [ [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +[[package]] +name = "pydantic-settings" +version = "2.2.1" +description = "Settings management using Pydantic" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pydantic_settings-2.2.1-py3-none-any.whl", hash = "sha256:0235391d26db4d2190cb9b31051c4b46882d28a51533f97440867f012d4da091"}, + {file = "pydantic_settings-2.2.1.tar.gz", hash = "sha256:00b9f6a5e95553590434c0fa01ead0b216c3e10bc54ae02e37f359948643c5ed"}, +] + +[package.dependencies] +pydantic = ">=2.3.0" +python-dotenv = ">=0.21.0" + +[package.extras] +toml = ["tomli (>=2.0.1)"] +yaml = ["pyyaml (>=6.0.1)"] + [[package]] name = "pydata-sphinx-theme" version = "0.15.2" @@ -3938,6 +3978,20 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-dotenv" +version = "1.0.1" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = true +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, + {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + [[package]] name = "python-json-logger" version = "2.0.7" @@ -4023,6 +4077,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -4204,15 +4259,32 @@ packaging = "*" [package.extras] test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] +[[package]] +name = "questionary" +version = "1.10.0" +description = "Python library to build pretty command line user prompts ⭐️" +optional = true +python-versions = ">=3.6,<4.0" +files = [ + {file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"}, + {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, +] + +[package.dependencies] +prompt_toolkit = ">=2.0,<4.0" + +[package.extras] +docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)"] + [[package]] name = "referencing" -version = "0.33.0" +version = "0.34.0" description = "JSON Referencing + Python" optional = true python-versions = ">=3.8" files = [ - {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, - {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, + {file = "referencing-0.34.0-py3-none-any.whl", hash = "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4"}, + {file = "referencing-0.34.0.tar.gz", hash = "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"}, ] [package.dependencies] @@ -4302,6 +4374,25 @@ pygments = ">=2.6.0,<3.0.0" [package.extras] jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] +[[package]] +name = "rich-click" +version = "1.7.4" +description = "Format click help output nicely with rich" +optional = true +python-versions = ">=3.7" +files = [ + {file = "rich-click-1.7.4.tar.gz", hash = "sha256:7ce5de8e4dc0333aec946113529b3eeb349f2e5d2fafee96b9edf8ee36a01395"}, + {file = "rich_click-1.7.4-py3-none-any.whl", hash = "sha256:e363655475c60fec5a3e16a1eb618118ed79e666c365a36006b107c17c93ac4e"}, +] + +[package.dependencies] +click = ">=7" +rich = ">=10.7.0" +typing-extensions = "*" + +[package.extras] +dev = ["flake8", "flake8-docstrings", "mypy", "packaging", "pre-commit", "pytest", "pytest-cov", "types-setuptools"] + [[package]] name = "rpds-py" version = "0.18.0" @@ -4598,18 +4689,18 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "69.1.1" +version = "69.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = true python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, - {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, + {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, + {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -5033,28 +5124,28 @@ zarr = ["zarr"] [[package]] name = "tensorstore" -version = "0.1.54" +version = "0.1.56" description = "Read and write large, multi-dimensional arrays" optional = true python-versions = ">=3.9" files = [ - {file = "tensorstore-0.1.54-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:54dbc2d5de635ff55c4dd1e85eb8d326ed7c0c90489ab8e9dbbc93ad70f4ebf6"}, - {file = "tensorstore-0.1.54-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3d62cec4f3257e7e1d60220d6b1a604cf1e6d2f4684407669a3baa4c53b81f47"}, - {file = "tensorstore-0.1.54-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f5e0e9a81b41cba6c7462b57531855e3c0be320ae05b071b220206f04ab3b99"}, - {file = "tensorstore-0.1.54-cp310-cp310-win_amd64.whl", hash = "sha256:2ccfc236cab7d5d7c0fdd6a1e13fbe9e5aa69a8dd0c472f479dd2b8c4c66f563"}, - {file = "tensorstore-0.1.54-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:d2c032e5eb31ab0835fc21c74f5134274fe6d1f147917e1571876e4aa011d206"}, - {file = "tensorstore-0.1.54-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bcf6925cc1b1793d888d6c81f3f2bafe8b78352c792a5e77cc519b4fc8fd9482"}, - {file = "tensorstore-0.1.54-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dab3fb3fca3ec23f43d502641fc7ce3f40bdb864eca63b2b10a5a6592014f00b"}, - {file = "tensorstore-0.1.54-cp311-cp311-win_amd64.whl", hash = "sha256:ba5d560d321ad353af866910bcdfb396ccd822b89d50e3275a22193dcbd6e35b"}, - {file = "tensorstore-0.1.54-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:608212a855808f0f55a3cb66a562514632023df9df26e11c8497803102e17303"}, - {file = "tensorstore-0.1.54-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:02077de82f9a388badc831b8bef0242f82ce47830076130e0f947bc2db88ecc1"}, - {file = "tensorstore-0.1.54-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e19ef2c20e7139a5ba3f33b3170ff1418d2cffec01b46f16b0428b66984894e"}, - {file = "tensorstore-0.1.54-cp312-cp312-win_amd64.whl", hash = "sha256:68dc970e7f69f46d4b7bcbbcb924e0c5ad71e9a2f16481679430edb1deb65fb0"}, - {file = "tensorstore-0.1.54-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:70de04ad2177fb771f17db1a61cc1ed3295147676021cb3d63649b8a9faf2f45"}, - {file = "tensorstore-0.1.54-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:954f321049ae0fd97904b76f2b8fc49257a04fa5813c8ca4b5aafa92567e743e"}, - {file = "tensorstore-0.1.54-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30ddc9c99b34afe3d64e4c2585238ace9d8a9e1818a9ffcdce356e4e20e98648"}, - {file = "tensorstore-0.1.54-cp39-cp39-win_amd64.whl", hash = "sha256:9b0501b40107c0bec29c48ce926353eee92b2b6d3b5d5bce0983c35de007eaaf"}, - {file = "tensorstore-0.1.54.tar.gz", hash = "sha256:e1a9dcb0be7c828f752375409537d4b39c658dd6c6a0873fe21a24a556ec0e2a"}, + {file = "tensorstore-0.1.56-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:3293a33be31cafcc2feaf50b7551ea82d9d69a298b82e101f63f85569b642692"}, + {file = "tensorstore-0.1.56-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4d0007989093e2bde4fc5def98726e4aff2d6513f1edb4232bf5af8993c9fff5"}, + {file = "tensorstore-0.1.56-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b320e36fcbf59337a270ab15e3791ca3a2720783a53491f27ff9e9477d04cbc"}, + {file = "tensorstore-0.1.56-cp310-cp310-win_amd64.whl", hash = "sha256:3b6f1a318f94f87e0808e9c34b5399e0819e202788287ba364896b225465f32f"}, + {file = "tensorstore-0.1.56-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:561daafc8a4c9939fa4899d53a6b6b7472c0c25b3614b51e7b44cbd9c4f2d375"}, + {file = "tensorstore-0.1.56-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5cb6dd6a6528a498b537b55c70bc4a65a302ed3a223f1b76199f840edd1b34e1"}, + {file = "tensorstore-0.1.56-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ff3a6bbc2ce2a48295bcc7227e2fcd466bb2d3237852f40ccd9f48555159c23"}, + {file = "tensorstore-0.1.56-cp311-cp311-win_amd64.whl", hash = "sha256:47a04620b674cb9661a4fa4c6b147b4b29c44da16c00007e5051a01717e4b1bc"}, + {file = "tensorstore-0.1.56-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:e663eb20d5156a09a1075430e878cf0b85dbf12cf3e5072f527ebf56412c3abd"}, + {file = "tensorstore-0.1.56-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:417f0b09605c5e3f1e1a79d575cf81e2d191bff0caa590b4f2e6e7dcba981f70"}, + {file = "tensorstore-0.1.56-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:403b24aef3a9d760b3a387315e8815d1fa57a814085928a201fe39e5080716f6"}, + {file = "tensorstore-0.1.56-cp312-cp312-win_amd64.whl", hash = "sha256:bd455a3299a8764ecddb00717f3231b396e41b7f1262a4d01443016361eaeb04"}, + {file = "tensorstore-0.1.56-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:4c3dbf8c239c48ff18d0ff62d364e78138eb49e16c41f40bcad8a1446412448d"}, + {file = "tensorstore-0.1.56-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:80725708276d321f59b7d4a4d4fd3d9e6ba111d89b232269d8f3e6ece3d3e340"}, + {file = "tensorstore-0.1.56-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e1dc7b9b82975b2d41fe43258ff5a58eecc9d73a596b19a08ecb43b278cf6ba"}, + {file = "tensorstore-0.1.56-cp39-cp39-win_amd64.whl", hash = "sha256:abb853ee019ac41e11123ae92f0c76bcb27135ba7910fc8b62b120c6668ef11a"}, + {file = "tensorstore-0.1.56.tar.gz", hash = "sha256:5f8f7bc056cb15bc0d45fedfe1ec38029d6f361aa2fb155a218a577a6d953013"}, ] [package.dependencies] @@ -5272,13 +5363,13 @@ test = ["mypy", "pytest", "typing-extensions"] [[package]] name = "types-python-dateutil" -version = "2.8.19.20240311" +version = "2.9.0.20240316" description = "Typing stubs for python-dateutil" optional = true python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.8.19.20240311.tar.gz", hash = "sha256:51178227bbd4cbec35dc9adffbf59d832f20e09842d7dcb8c73b169b8780b7cb"}, - {file = "types_python_dateutil-2.8.19.20240311-py3-none-any.whl", hash = "sha256:ef813da0809aca76472ca88807addbeea98b19339aebe56159ae2f4b4f70857a"}, + {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, + {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, ] [[package]] @@ -5480,21 +5571,21 @@ viz = ["matplotlib", "nc-time-axis", "seaborn"] [[package]] name = "zipp" -version = "3.17.0" +version = "3.18.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ] [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 = ["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"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -dev = ["black", "cma", "coverage", "devsim", "dill", "gdspy", "gdstk", "gdstk", "grcwa", "ipython", "ipython", "jax", "jax", "jax", "jaxlib", "jaxlib", "jaxlib", "jinja2", "jupyter", "memory_profiler", "myst-parser", "nbconvert", "nbdime", "nbsphinx", "networkx", "optax", "pre-commit", "pydata-sphinx-theme", "pylint", "pyswarms", "pytest", "pytest-timeout", "rtree", "ruff", "sax", "signac", "sphinx", "sphinx-book-theme", "sphinx-copybutton", "sphinx-favicon", "sphinx-notfound-page", "sphinx-sitemap", "sphinx-tabs", "sphinxemoji", "tmm", "tox", "trimesh", "vtk"] +dev = ["black", "bump-my-version", "cma", "coverage", "devsim", "dill", "gdspy", "gdstk", "gdstk", "grcwa", "ipython", "ipython", "jax", "jax", "jax", "jaxlib", "jaxlib", "jaxlib", "jinja2", "jupyter", "memory_profiler", "myst-parser", "nbconvert", "nbdime", "nbsphinx", "networkx", "optax", "pre-commit", "pydata-sphinx-theme", "pylint", "pyswarms", "pytest", "pytest-timeout", "rtree", "ruff", "sax", "signac", "sphinx", "sphinx-book-theme", "sphinx-copybutton", "sphinx-favicon", "sphinx-notfound-page", "sphinx-sitemap", "sphinx-tabs", "sphinxemoji", "tmm", "tox", "trimesh", "vtk"] docs = ["cma", "devsim", "gdstk", "grcwa", "ipython", "jinja2", "jupyter", "myst-parser", "nbconvert", "nbdime", "nbsphinx", "optax", "pydata-sphinx-theme", "pylint", "sax", "signac", "sphinx", "sphinx-book-theme", "sphinx-copybutton", "sphinx-favicon", "sphinx-notfound-page", "sphinx-sitemap", "sphinx-tabs", "sphinxemoji", "tmm"] gdspy = ["gdspy"] gdstk = ["gdstk"] @@ -5505,4 +5596,4 @@ vtk = ["vtk"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "861d569a0e7647b0b197073294e3c2e137bcbe9d2919767b6a58fe0ffa95729e" +content-hash = "a958914bd0929c508aec6eaf6933d05dca481640803a0aadeebf4b6fd164a96f" diff --git a/poetry.toml b/poetry.toml new file mode 100644 index 000000000..3b549d6c8 --- /dev/null +++ b/poetry.toml @@ -0,0 +1,2 @@ +[virtualenvs] +create = true diff --git a/pyproject.toml b/pyproject.toml index b8c2d7d95..419fd6b9e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "tidy3d" -version = "2.6.1" # Thinking about bump2version +version = "2.6.1" description = "A fast FDTD solver" authors = ["Tyler Hughes "] license = "LGPLv2+" @@ -44,6 +44,7 @@ responses = "*" ### Optional dependencies ### # development core +bump-my-version = {version="*", optional = true} black = {version="23.12.1", optional = true} coverage = {version="*", optional = true} dill = {version="*", optional = true} @@ -108,7 +109,7 @@ devsim = {version="*", optional = true} cma = {version="*", optional = true} [tool.poetry.extras] -dev = ['black', "coverage", 'dill', 'divparams', 'gdspy', 'gdstk', 'gdstk', 'grcwa', 'ipython', 'ipython', 'jax', 'jaxlib', 'jinja2', +dev = ['bump-my-version', 'black', "coverage", 'dill', 'divparams', 'gdspy', 'gdstk', 'gdstk', 'grcwa', 'ipython', 'ipython', 'jax', 'jaxlib', 'jinja2', 'jupyter', 'jupyterblack', 'myst-parser', 'memory_profiler', 'nbconvert', 'nbdime', 'nbsphinx', 'networkx', 'optax', 'pre-commit', 'pydata-sphinx-theme', 'pylint', 'pyswarms', 'pytest', 'pytest-timeout', 'rtree', 'ruff', 'sax', 'signac', 'sphinx', 'sphinx-book-theme', 'sphinx-copybutton', 'sphinx-favicon', 'sphinx-notfound-page', 'sphinx-sitemap', 'sphinx-tabs', 'sphinxemoji', 'tmm', 'tox', 'trimesh', @@ -182,4 +183,47 @@ select = [ "UP" ] +[tool.bumpversion] +current_version = "2.6.1" +parse = """(?x) + (?P0|[1-9]\\d*)\\. + (?P0|[1-9]\\d*)\\. + (?P0|[1-9]\\d*) + (?: + - # dash seperator for pre-release section + (?P[a-zA-Z-]+) # pre-release label + (?P0|[1-9]\\d*) # pre-release version number + )? # pre-release section is optional +""" +serialize = [ + "{major}.{minor}.{patch}-{pre_l}{pre_n}", + "{major}.{minor}.{patch}", +] +search = "{current_version}" +replace = "{new_version}" +regex = false +ignore_missing_version = false +ignore_missing_files = false +tag = false +sign_tags = false +tag_name = "v{new_version}" +tag_message = "Bump version: {current_version} → {new_version}" +allow_dirty = false +commit = false +message = "Bump version: {current_version} → {new_version}" +commit_args = "" + +[tool.bumpversion.parts.pre_l] +values = ["dev", "rc"] + +[[tool.bumpversion.files]] +filename = "pyproject.toml" +search = "{current_version}" +replace = "{new_version}" + +[[tool.bumpversion.files]] +filename = "tidy3d/version.py" +search = "{current_version}" +replace = "{new_version}" + target-version = "py310" diff --git a/tidy3d/version.py b/tidy3d/version.py index 53753c52a..f6e0d5aaa 100644 --- a/tidy3d/version.py +++ b/tidy3d/version.py @@ -1,4 +1,2 @@ -"""Defines the front end version of tidy3d""" -import importlib.metadata - -__version__ = importlib.metadata.version(__package__) +"""DO NOT EDIT: Modified automatically with .bump2version.cfg""" +__version__ = "2.6.1" From d29ca99239ddc3733499c34ea17038ee3a7bed67 Mon Sep 17 00:00:00 2001 From: momchil Date: Thu, 21 Mar 2024 10:33:35 -0700 Subject: [PATCH 17/26] version, changelog, schema, sample for 2.6.2 --- CHANGELOG.md | 9 ++++++++- pyproject.toml | 4 ++-- tests/sims/simulation_sample.h5 | Bin 343216 -> 343216 bytes tests/sims/simulation_sample.json | 2 +- tidy3d/schema.json | 4 ++-- tidy3d/version.py | 2 +- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 44a29fcfb..1d0c4c920 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added +### Changed + +### Fixed + +## [2.6.2] - 2024-03-21 + ### Changed - Characters `"` and `/` not allowed in component names. @@ -1134,7 +1140,8 @@ which fields are to be projected is now determined automatically based on the me - Job and Batch classes for better simulation handling (eventually to fully replace webapi functions). - A large number of small improvements and bug fixes. -[Unreleased]: https://github.com/flexcompute/tidy3d/compare/v2.6.1...develop +[Unreleased]: https://github.com/flexcompute/tidy3d/compare/v2.6.2...develop +[2.6.2]: https://github.com/flexcompute/tidy3d/compare/v2.6.1...v2.6.2 [2.6.1]: https://github.com/flexcompute/tidy3d/compare/v2.6.0...v2.6.1 [2.6.0]: https://github.com/flexcompute/tidy3d/compare/v2.5.2...v2.6.0 [2.5.2]: https://github.com/flexcompute/tidy3d/compare/v2.5.1...v2.5.2 diff --git a/pyproject.toml b/pyproject.toml index 419fd6b9e..bc18ad6de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "tidy3d" -version = "2.6.1" +version = "2.6.2" description = "A fast FDTD solver" authors = ["Tyler Hughes "] license = "LGPLv2+" @@ -184,7 +184,7 @@ select = [ ] [tool.bumpversion] -current_version = "2.6.1" +current_version = "2.6.2" parse = """(?x) (?P0|[1-9]\\d*)\\. (?P0|[1-9]\\d*)\\. diff --git a/tests/sims/simulation_sample.h5 b/tests/sims/simulation_sample.h5 index 81cafd51c5522a131d121982491a141c31de23a9..0e60fa166123adde397132cc72d3dcac8bb52220 100644 GIT binary patch delta 32 icmdn+Q)B}O6*3w%|0-<%Rmcd$OhC-M{Z}E&wo?EhSP?h? delta 32 icmdn+Q)B}O6*3w&|0-<%Rmcd$OhC-M{Z}E&wo?EhLJ>Cr diff --git a/tests/sims/simulation_sample.json b/tests/sims/simulation_sample.json index faf061344..7e358a48d 100644 --- a/tests/sims/simulation_sample.json +++ b/tests/sims/simulation_sample.json @@ -2222,7 +2222,7 @@ ], "type": "GridSpec" }, - "version": "2.6.1", + "version": "2.6.2", "courant": 0.8, "normalize_index": 0, "shutoff": 0.0001, diff --git a/tidy3d/schema.json b/tidy3d/schema.json index 343ad2533..4a675998b 100644 --- a/tidy3d/schema.json +++ b/tidy3d/schema.json @@ -1,6 +1,6 @@ { "title": "Simulation", - "description": "Custom implementation of Maxwell\u2019s equations which represents the physical model to be solved using the FDTD\nmethod.\n\nParameters\n----------\ncenter : Tuple[float, float, float] = (0.0, 0.0, 0.0)\n [units = um]. Center of object in x, y, and z.\nsize : Tuple[NonNegativeFloat, NonNegativeFloat, NonNegativeFloat]\n [units = um]. Size in x, y, and z directions.\nmedium : Union[Medium, AnisotropicMedium, PECMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, FullyAnisotropicMedium, CustomMedium, CustomPoleResidue, CustomSellmeier, CustomLorentz, CustomDebye, CustomDrude, CustomAnisotropicMedium, PerturbationMedium, PerturbationPoleResidue] = Medium(name=None, frequency_range=None, allow_gain=False, nonlinear_spec=None, modulation_spec=None, heat_spec=None, type='Medium', permittivity=1.0, conductivity=0.0)\n Background medium of simulation, defaults to vacuum if not specified.\nstructures : Tuple[Structure, ...] = ()\n Tuple of structures present in simulation. Note: Structures defined later in this list override the simulation material properties in regions of spatial overlap.\nsymmetry : Tuple[Literal[0, -1, 1], Literal[0, -1, 1], Literal[0, -1, 1]] = (0, 0, 0)\n Tuple of integers defining reflection symmetry across a plane bisecting the simulation domain normal to the x-, y-, and z-axis at the simulation center of each axis, respectively. Each element can be ``0`` (no symmetry), ``1`` (even, i.e. 'PMC' symmetry) or ``-1`` (odd, i.e. 'PEC' symmetry). Note that the vectorial nature of the fields must be taken into account to correctly determine the symmetry value.\nsources : Tuple[Annotated[Union[tidy3d.components.source.UniformCurrentSource, tidy3d.components.source.PointDipole, tidy3d.components.source.GaussianBeam, tidy3d.components.source.AstigmaticGaussianBeam, tidy3d.components.source.ModeSource, tidy3d.components.source.PlaneWave, tidy3d.components.source.CustomFieldSource, tidy3d.components.source.CustomCurrentSource, tidy3d.components.source.TFSF], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of electric current sources injecting fields into the simulation.\nboundary_spec : BoundarySpec = BoundarySpec(x=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), y=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), z=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), type='BoundarySpec')\n Specification of boundary conditions along each dimension. If ``None``, PML boundary conditions are applied on all sides.\nmonitors : Tuple[Annotated[Union[tidy3d.components.monitor.FieldMonitor, tidy3d.components.monitor.FieldTimeMonitor, tidy3d.components.monitor.PermittivityMonitor, tidy3d.components.monitor.FluxMonitor, tidy3d.components.monitor.FluxTimeMonitor, tidy3d.components.monitor.ModeMonitor, tidy3d.components.monitor.ModeSolverMonitor, tidy3d.components.monitor.FieldProjectionAngleMonitor, tidy3d.components.monitor.FieldProjectionCartesianMonitor, tidy3d.components.monitor.FieldProjectionKSpaceMonitor, tidy3d.components.monitor.DiffractionMonitor], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of monitors in the simulation. Note: monitor names are used to access data after simulation is run.\ngrid_spec : GridSpec = GridSpec(grid_x=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), grid_y=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), grid_z=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), wavelength=None, override_structures=(), type='GridSpec')\n Specifications for the simulation grid along each of the three directions.\nversion : str = 2.6.1\n String specifying the front end version number.\ncourant : ConstrainedFloatValue = 0.99\n Courant stability factor, controls time step to spatial step ratio. Lower values lead to more stable simulations for dispersive materials, but result in longer simulation times. This factor is normalized to no larger than 1 when CFL stability condition is met in 3D.\nnormalize_index : Optional[NonNegativeInt] = 0\n Index of the source in the tuple of sources whose spectrum will be used to normalize the frequency-dependent data. If ``None``, the raw field data is returned unnormalized.\nshutoff : NonNegativeFloat = 1e-05\n Ratio of the instantaneous integrated E-field intensity to the maximum value at which the simulation will automatically terminate time stepping. Used to prevent extraneous run time of simulations with fully decayed fields. Set to ``0`` to disable this feature.\nsubpixel : bool = True\n If ``True``, uses subpixel averaging of the permittivity based on structure definition, resulting in much higher accuracy for a given grid size.\nrun_time : PositiveFloat\n [units = sec]. Total electromagnetic evolution time in seconds. Note: If simulation 'shutoff' is specified, simulation will terminate early when shutoff condition met. \n\nNotes\n-----\n\n A ``Simulation`` defines a custom implementation of Maxwell's equations which represents the physical model\n to be solved using `the Finite-Difference Time-Domain (FDTD) method\n `_. ``tidy3d`` simulations\n run very quickly in the cloud through GPU parallelization.\n\n .. image:: ../../_static/img/field_update_fdtd.png\n :width: 50%\n :align: left\n\n FDTD is a method for simulating the interaction of electromagnetic waves with structures and materials. It is\n the most widely used method in photonics design. The Maxwell's\n equations implemented in the ``Simulation`` are solved per time-step in the order shown in this image.\n\n The simplified input to FDTD solver consists of the permittivity distribution defined by :attr:`structures`\n which describe the device and :attr:`sources` of electromagnetic excitation. This information is used to\n computate the time dynamics of the electric and magnetic fields in this system. From these time-domain\n results, frequency-domain information of the simulation can also be extracted, and used for device design and\n optimization.\n\n If you are new to the FDTD method, we recommend you get started with the `FDTD 101 Lecture Series\n `_\n\n **Dimensions Selection**\n\n By default, simulations are defined as 3D. To make the simulation 2D, we can just set the simulation\n :attr:`size` in one of the dimensions to be 0. However, note that we still have to define a grid size (eg.\n ``tidy3d.Simulation(size=[size_x, size_y, 0])``) and specify a periodic boundary condition in that direction.\n\n .. TODO sort out inheritance problem https://aware-moon.cloudvent.net/tidy3d/examples/notebooks/RingResonator/\n\n See further parameter explanations below.\n\nExample\n-------\n>>> from tidy3d import Sphere, Cylinder, PolySlab\n>>> from tidy3d import UniformCurrentSource, GaussianPulse\n>>> from tidy3d import FieldMonitor, FluxMonitor\n>>> from tidy3d import GridSpec, AutoGrid\n>>> from tidy3d import BoundarySpec, Boundary\n>>> from tidy3d import Medium\n>>> sim = Simulation(\n... size=(3.0, 3.0, 3.0),\n... grid_spec=GridSpec(\n... grid_x = AutoGrid(min_steps_per_wvl = 20),\n... grid_y = AutoGrid(min_steps_per_wvl = 20),\n... grid_z = AutoGrid(min_steps_per_wvl = 20)\n... ),\n... run_time=40e-11,\n... structures=[\n... Structure(\n... geometry=Box(size=(1, 1, 1), center=(0, 0, 0)),\n... medium=Medium(permittivity=2.0),\n... ),\n... ],\n... sources=[\n... UniformCurrentSource(\n... size=(0, 0, 0),\n... center=(0, 0.5, 0),\n... polarization=\"Hx\",\n... source_time=GaussianPulse(\n... freq0=2e14,\n... fwidth=4e13,\n... ),\n... )\n... ],\n... monitors=[\n... FluxMonitor(size=(1, 1, 0), center=(0, 0, 0), freqs=[2e14, 2.5e14], name='flux'),\n... ],\n... symmetry=(0, 0, 0),\n... boundary_spec=BoundarySpec(\n... x = Boundary.pml(num_layers=20),\n... y = Boundary.pml(num_layers=30),\n... z = Boundary.periodic(),\n... ),\n... shutoff=1e-6,\n... courant=0.8,\n... subpixel=False,\n... )\n\nSee Also\n--------\n\n**Notebooks:**\n * `Quickstart <../../notebooks/StartHere.html>`_: Usage in a basic simulation flow.\n * `Using automatic nonuniform meshing <../../notebooks/AutoGrid.html>`_\n * See nearly all notebooks for :class:`Simulation` applications.\n\n**Lectures:**\n * `Introduction to FDTD Simulation `_: Usage in a basic simulation flow.\n * `Prelude to Integrated Photonics Simulation: Mode Injection `_\n\n**GUI:**\n * `FDTD Walkthrough `_", + "description": "Custom implementation of Maxwell\u2019s equations which represents the physical model to be solved using the FDTD\nmethod.\n\nParameters\n----------\ncenter : Tuple[float, float, float] = (0.0, 0.0, 0.0)\n [units = um]. Center of object in x, y, and z.\nsize : Tuple[NonNegativeFloat, NonNegativeFloat, NonNegativeFloat]\n [units = um]. Size in x, y, and z directions.\nmedium : Union[Medium, AnisotropicMedium, PECMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, FullyAnisotropicMedium, CustomMedium, CustomPoleResidue, CustomSellmeier, CustomLorentz, CustomDebye, CustomDrude, CustomAnisotropicMedium, PerturbationMedium, PerturbationPoleResidue] = Medium(name=None, frequency_range=None, allow_gain=False, nonlinear_spec=None, modulation_spec=None, heat_spec=None, type='Medium', permittivity=1.0, conductivity=0.0)\n Background medium of simulation, defaults to vacuum if not specified.\nstructures : Tuple[Structure, ...] = ()\n Tuple of structures present in simulation. Note: Structures defined later in this list override the simulation material properties in regions of spatial overlap.\nsymmetry : Tuple[Literal[0, -1, 1], Literal[0, -1, 1], Literal[0, -1, 1]] = (0, 0, 0)\n Tuple of integers defining reflection symmetry across a plane bisecting the simulation domain normal to the x-, y-, and z-axis at the simulation center of each axis, respectively. Each element can be ``0`` (no symmetry), ``1`` (even, i.e. 'PMC' symmetry) or ``-1`` (odd, i.e. 'PEC' symmetry). Note that the vectorial nature of the fields must be taken into account to correctly determine the symmetry value.\nsources : Tuple[Annotated[Union[tidy3d.components.source.UniformCurrentSource, tidy3d.components.source.PointDipole, tidy3d.components.source.GaussianBeam, tidy3d.components.source.AstigmaticGaussianBeam, tidy3d.components.source.ModeSource, tidy3d.components.source.PlaneWave, tidy3d.components.source.CustomFieldSource, tidy3d.components.source.CustomCurrentSource, tidy3d.components.source.TFSF], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of electric current sources injecting fields into the simulation.\nboundary_spec : BoundarySpec = BoundarySpec(x=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), y=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), z=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), type='BoundarySpec')\n Specification of boundary conditions along each dimension. If ``None``, PML boundary conditions are applied on all sides.\nmonitors : Tuple[Annotated[Union[tidy3d.components.monitor.FieldMonitor, tidy3d.components.monitor.FieldTimeMonitor, tidy3d.components.monitor.PermittivityMonitor, tidy3d.components.monitor.FluxMonitor, tidy3d.components.monitor.FluxTimeMonitor, tidy3d.components.monitor.ModeMonitor, tidy3d.components.monitor.ModeSolverMonitor, tidy3d.components.monitor.FieldProjectionAngleMonitor, tidy3d.components.monitor.FieldProjectionCartesianMonitor, tidy3d.components.monitor.FieldProjectionKSpaceMonitor, tidy3d.components.monitor.DiffractionMonitor], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of monitors in the simulation. Note: monitor names are used to access data after simulation is run.\ngrid_spec : GridSpec = GridSpec(grid_x=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), grid_y=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), grid_z=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), wavelength=None, override_structures=(), type='GridSpec')\n Specifications for the simulation grid along each of the three directions.\nversion : str = 2.6.2\n String specifying the front end version number.\ncourant : ConstrainedFloatValue = 0.99\n Courant stability factor, controls time step to spatial step ratio. Lower values lead to more stable simulations for dispersive materials, but result in longer simulation times. This factor is normalized to no larger than 1 when CFL stability condition is met in 3D.\nnormalize_index : Optional[NonNegativeInt] = 0\n Index of the source in the tuple of sources whose spectrum will be used to normalize the frequency-dependent data. If ``None``, the raw field data is returned unnormalized.\nshutoff : NonNegativeFloat = 1e-05\n Ratio of the instantaneous integrated E-field intensity to the maximum value at which the simulation will automatically terminate time stepping. Used to prevent extraneous run time of simulations with fully decayed fields. Set to ``0`` to disable this feature.\nsubpixel : bool = True\n If ``True``, uses subpixel averaging of the permittivity based on structure definition, resulting in much higher accuracy for a given grid size.\nrun_time : PositiveFloat\n [units = sec]. Total electromagnetic evolution time in seconds. Note: If simulation 'shutoff' is specified, simulation will terminate early when shutoff condition met. \n\nNotes\n-----\n\n A ``Simulation`` defines a custom implementation of Maxwell's equations which represents the physical model\n to be solved using `the Finite-Difference Time-Domain (FDTD) method\n `_. ``tidy3d`` simulations\n run very quickly in the cloud through GPU parallelization.\n\n .. image:: ../../_static/img/field_update_fdtd.png\n :width: 50%\n :align: left\n\n FDTD is a method for simulating the interaction of electromagnetic waves with structures and materials. It is\n the most widely used method in photonics design. The Maxwell's\n equations implemented in the ``Simulation`` are solved per time-step in the order shown in this image.\n\n The simplified input to FDTD solver consists of the permittivity distribution defined by :attr:`structures`\n which describe the device and :attr:`sources` of electromagnetic excitation. This information is used to\n computate the time dynamics of the electric and magnetic fields in this system. From these time-domain\n results, frequency-domain information of the simulation can also be extracted, and used for device design and\n optimization.\n\n If you are new to the FDTD method, we recommend you get started with the `FDTD 101 Lecture Series\n `_\n\n **Dimensions Selection**\n\n By default, simulations are defined as 3D. To make the simulation 2D, we can just set the simulation\n :attr:`size` in one of the dimensions to be 0. However, note that we still have to define a grid size (eg.\n ``tidy3d.Simulation(size=[size_x, size_y, 0])``) and specify a periodic boundary condition in that direction.\n\n .. TODO sort out inheritance problem https://aware-moon.cloudvent.net/tidy3d/examples/notebooks/RingResonator/\n\n See further parameter explanations below.\n\nExample\n-------\n>>> from tidy3d import Sphere, Cylinder, PolySlab\n>>> from tidy3d import UniformCurrentSource, GaussianPulse\n>>> from tidy3d import FieldMonitor, FluxMonitor\n>>> from tidy3d import GridSpec, AutoGrid\n>>> from tidy3d import BoundarySpec, Boundary\n>>> from tidy3d import Medium\n>>> sim = Simulation(\n... size=(3.0, 3.0, 3.0),\n... grid_spec=GridSpec(\n... grid_x = AutoGrid(min_steps_per_wvl = 20),\n... grid_y = AutoGrid(min_steps_per_wvl = 20),\n... grid_z = AutoGrid(min_steps_per_wvl = 20)\n... ),\n... run_time=40e-11,\n... structures=[\n... Structure(\n... geometry=Box(size=(1, 1, 1), center=(0, 0, 0)),\n... medium=Medium(permittivity=2.0),\n... ),\n... ],\n... sources=[\n... UniformCurrentSource(\n... size=(0, 0, 0),\n... center=(0, 0.5, 0),\n... polarization=\"Hx\",\n... source_time=GaussianPulse(\n... freq0=2e14,\n... fwidth=4e13,\n... ),\n... )\n... ],\n... monitors=[\n... FluxMonitor(size=(1, 1, 0), center=(0, 0, 0), freqs=[2e14, 2.5e14], name='flux'),\n... ],\n... symmetry=(0, 0, 0),\n... boundary_spec=BoundarySpec(\n... x = Boundary.pml(num_layers=20),\n... y = Boundary.pml(num_layers=30),\n... z = Boundary.periodic(),\n... ),\n... shutoff=1e-6,\n... courant=0.8,\n... subpixel=False,\n... )\n\nSee Also\n--------\n\n**Notebooks:**\n * `Quickstart <../../notebooks/StartHere.html>`_: Usage in a basic simulation flow.\n * `Using automatic nonuniform meshing <../../notebooks/AutoGrid.html>`_\n * See nearly all notebooks for :class:`Simulation` applications.\n\n**Lectures:**\n * `Introduction to FDTD Simulation `_: Usage in a basic simulation flow.\n * `Prelude to Integrated Photonics Simulation: Mode Injection `_\n\n**GUI:**\n * `FDTD Walkthrough `_", "type": "object", "properties": { "type": { @@ -475,7 +475,7 @@ "version": { "title": "Version", "description": "String specifying the front end version number.", - "default": "2.6.1", + "default": "2.6.2", "type": "string" }, "courant": { diff --git a/tidy3d/version.py b/tidy3d/version.py index f6e0d5aaa..6abde6985 100644 --- a/tidy3d/version.py +++ b/tidy3d/version.py @@ -1,2 +1,2 @@ """DO NOT EDIT: Modified automatically with .bump2version.cfg""" -__version__ = "2.6.1" +__version__ = "2.6.2" From b2a583bcc05225230e6b5d664fefa237b5fe6637 Mon Sep 17 00:00:00 2001 From: daquintero Date: Thu, 21 Mar 2024 23:38:23 +0100 Subject: [PATCH 18/26] FIX: Versioning and fix numpy version :arrow_up_small: --- poetry.lock | 24 ++++++++++++------------ pyproject.toml | 3 ++- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/poetry.lock b/poetry.lock index c4ba4e673..961875c9d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1567,13 +1567,13 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.3.2" +version = "6.4.0" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.3.2-py3-none-any.whl", hash = "sha256:f41f4098b16cd140a97d256137cfd943d958219007990b2afb00439fc623f580"}, - {file = "importlib_resources-6.3.2.tar.gz", hash = "sha256:963eb79649252b0160c1afcfe5a1d3fe3ad66edd0a8b114beacffb70c0674223"}, + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, ] [package.dependencies] @@ -1581,7 +1581,7 @@ 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 = ["jaraco.collections", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] [[package]] name = "iniconfig" @@ -2853,13 +2853,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.16.2" +version = "7.16.3" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = true python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.2-py3-none-any.whl", hash = "sha256:0c01c23981a8de0220255706822c40b751438e32467d6a686e26be08ba784382"}, - {file = "nbconvert-7.16.2.tar.gz", hash = "sha256:8310edd41e1c43947e4ecf16614c61469ebc024898eb808cce0999860fc9fb16"}, + {file = "nbconvert-7.16.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"}, + {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"}, ] [package.dependencies] @@ -2886,7 +2886,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.5)", "pytest"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] webpdf = ["playwright"] [[package]] @@ -3127,13 +3127,13 @@ test = ["dm-tree (>=0.1.7)", "flax (>=0.5.3)"] [[package]] name = "orbax-checkpoint" -version = "0.5.6" +version = "0.5.7" description = "Orbax Checkpoint" optional = true python-versions = ">=3.9" files = [ - {file = "orbax_checkpoint-0.5.6-py3-none-any.whl", hash = "sha256:b4b15f2724cf2b756d01713e26bd360be40fb6ff259fb42e557f0691198a44ab"}, - {file = "orbax_checkpoint-0.5.6.tar.gz", hash = "sha256:0796fffc9daf23aa4936864062a14e1cf1e8e194273b2920c1a25fff45885017"}, + {file = "orbax_checkpoint-0.5.7-py3-none-any.whl", hash = "sha256:34aa0b206a4cff9ea29acc96f2a913d0616cb5bcd15272a9806bb0238dd7a38c"}, + {file = "orbax_checkpoint-0.5.7.tar.gz", hash = "sha256:de14549b899220a4f445453967c1ac2d7165b815253342587746005f03a9813b"}, ] [package.dependencies] @@ -5596,4 +5596,4 @@ vtk = ["vtk"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<3.12" -content-hash = "a958914bd0929c508aec6eaf6933d05dca481640803a0aadeebf4b6fd164a96f" +content-hash = "68a3d5f0eead4f5edd63e755dc666527f6d0fedaefc444d1f6247df4b2ecc868" diff --git a/pyproject.toml b/pyproject.toml index bc18ad6de..f2b90b3e8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,6 +27,7 @@ importlib-metadata = "^6.0.0" h5netcdf = "1.0.2" h5py = "^3.0.0" rich = "<12.6.0" +numpy = "<2" matplotlib = "*" shapely = "^2.0" pydantic = "^2.0" @@ -196,7 +197,7 @@ parse = """(?x) )? # pre-release section is optional """ serialize = [ - "{major}.{minor}.{patch}-{pre_l}{pre_n}", + "{major}.{minor}.{patch}{pre_l}{pre_n}", "{major}.{minor}.{patch}", ] search = "{current_version}" From f7508b88ec087ae7fca506cfcffc0acff3e1a2fb Mon Sep 17 00:00:00 2001 From: Tyler Hughes Date: Fri, 22 Mar 2024 07:07:02 +0900 Subject: [PATCH 19/26] fix tool.ruff.lint warnings and add numpy2 check --- docs/notebooks | 2 +- pyproject.toml | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/notebooks b/docs/notebooks index d85fe22d4..f43ed15d7 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit d85fe22d49a8b6557955f3f50e561da0bfa8ceac +Subproject commit f43ed15d7f13db8aecc5f4020254e0876c37b338 diff --git a/pyproject.toml b/pyproject.toml index f2b90b3e8..afcdc4af2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -157,11 +157,11 @@ exclude = ''' [tool.ruff] -ignore-init-module-imports = true -typing-modules = ["tidy3d.components.types"] # without this Literal["something fails"] +lint.ignore-init-module-imports = true +lint.typing-modules = ["tidy3d.components.types"] # without this Literal["something fails"] line-length = 100 fix = true -ignore = [ +lint.ignore = [ "E501", # line too long, handled by black "B008", # do not perform function calls in argument defaults "C901", # too complex @@ -175,13 +175,14 @@ ignore = [ "UP035", # TODO decide what to do here ] -select = [ +lint.select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "C", # flake8-comprehensions "B", # flake8-bugbear - "UP" + "UP", + "NPY201", # numpy 2.* compatibility check ] [tool.bumpversion] From 4255c8bd3182337704d8faa3023cf339b5056223 Mon Sep 17 00:00:00 2001 From: Tyler Hughes Date: Fri, 22 Mar 2024 06:59:30 +0900 Subject: [PATCH 20/26] relax sidwall_angle validator -> warning in adjoint --- CHANGELOG.md | 1 + tests/test_plugins/test_adjoint.py | 10 ++++++++++ tidy3d/plugins/adjoint/components/geometry.py | 13 +++++++++++-- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d0c4c920..30abe45ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Characters `"` and `/` not allowed in component names. +- Change error when `JaxPolySlab.sidewall_angle != 0.0` to a warning, enabling optimization with slanted sidewalls if a lower accuracy gradient is acceptable. ### Fixed - Compute time stepping speed shown `tidy3d.log` using only the number of time steps that was run in the case of early shutoff. Previously, it was using the total number of time steps. diff --git a/tests/test_plugins/test_adjoint.py b/tests/test_plugins/test_adjoint.py index 6a5cfbdfa..9ffb331ef 100644 --- a/tests/test_plugins/test_adjoint.py +++ b/tests/test_plugins/test_adjoint.py @@ -1759,3 +1759,13 @@ def test_inf_IO(tmp_path): box.to_file(fname) box2 = JaxBox.from_file(fname) assert box == box2 + + +@pytest.mark.parametrize("sidewall_angle, log_expected", ([0.0, None], [0.1, "WARNING"])) +def test_sidewall_angle_validator(log_capture, sidewall_angle, log_expected): + """Test that the sidewall angle warning works as expected.""" + + jax_polyslab1 = JaxPolySlab(axis=POLYSLAB_AXIS, vertices=VERTICES, slab_bounds=(-1, 1)) + + with AssertLogLevel(log_capture, log_expected, contains_str="sidewall"): + jax_polyslab1.updated_copy(sidewall_angle=sidewall_angle) diff --git a/tidy3d/plugins/adjoint/components/geometry.py b/tidy3d/plugins/adjoint/components/geometry.py index 4069afd8b..591641379 100644 --- a/tidy3d/plugins/adjoint/components/geometry.py +++ b/tidy3d/plugins/adjoint/components/geometry.py @@ -20,6 +20,7 @@ from ....components.monitor import FieldMonitor, PermittivityMonitor from ....constants import fp_eps, MICROMETER from ....exceptions import AdjointError +from ....log import log from .base import JaxObject from .types import JaxFloat @@ -280,9 +281,17 @@ class JaxPolySlab(JaxGeometry, PolySlab, JaxObject): @pd.validator("sidewall_angle", always=True) def no_sidewall(cls, val): - """Don't allow sidewall.""" + """Warn if sidewall angle present.""" if not np.isclose(val, 0.0): - raise AdjointError("'JaxPolySlab' does not support slanted sidewall.") + log.warning( + "'JaxPolySlab' does not yet perform the full adjoint gradient treatment " + "for slanted sidewalls. " + "A straight sidewall angle is assumed when computing the gradient with respect " + "to shifting boundaries of the geometry. Therefore, as 'sidewall_angle' becomes " + "further from '0.0', the gradient error can be significant. " + "If high gradient accuracy is needed, please either reduce your 'sidewall_angle' " + "or wait until this feature is supported fully in a later version." + ) return val @pd.validator("dilation", always=True) From c06ee8302cf565408ebb3b8de8d4a7cbad2c8a2d Mon Sep 17 00:00:00 2001 From: Tyler Hughes Date: Sat, 23 Mar 2024 07:02:29 +0900 Subject: [PATCH 21/26] fix typo in Batch task data filename docstring --- docs/notebooks | 2 +- tidy3d/web/api/container.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/notebooks b/docs/notebooks index f43ed15d7..fa7cd8b8c 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit f43ed15d7f13db8aecc5f4020254e0876c37b338 +Subproject commit fa7cd8b8cbb0d1e88e85f9ba206d61850fea5f2f diff --git a/tidy3d/web/api/container.py b/tidy3d/web/api/container.py index 5d0efdadf..fd4e5db39 100644 --- a/tidy3d/web/api/container.py +++ b/tidy3d/web/api/container.py @@ -707,7 +707,7 @@ def download(self, path_dir: str = DEFAULT_DATA_DIR) -> None: ---- To load and iterate through the data, use :meth:`Batch.items()`. - The data for each task will be named as ``{path_dir}/{task_name}.hdf5``. + The data for each task will be named as ``{path_dir}/{task_id}.hdf5``. The :class:`Batch` hdf5 file will be automatically saved as ``{path_dir}/batch.hdf5``, allowing one to load this :class:`Batch` later using ``batch = Batch.from_file()``. """ From 54e2c93a034ebea2d733be2cd5f4cede1e852b86 Mon Sep 17 00:00:00 2001 From: momchil Date: Fri, 29 Mar 2024 10:06:07 -0700 Subject: [PATCH 22/26] Revert forbidden " in component names --- CHANGELOG.md | 1 + docs/notebooks | 2 +- tests/test_components/test_base.py | 3 --- tidy3d/components/base.py | 2 +- 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30abe45ca..ad4d735a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Changed +- Revert forbidden `"` in component names. ### Fixed diff --git a/docs/notebooks b/docs/notebooks index fa7cd8b8c..0aa01ae48 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit fa7cd8b8cbb0d1e88e85f9ba206d61850fea5f2f +Subproject commit 0aa01ae4844ba6db496577601c369de143cbdd82 diff --git a/tests/test_components/test_base.py b/tests/test_components/test_base.py index c37de026a..80aa6a2cb 100644 --- a/tests/test_components/test_base.py +++ b/tests/test_components/test_base.py @@ -129,6 +129,3 @@ def test_special_characters_in_name(): """Test error if special characters are in a component's name.""" with pytest.raises(ValueError): mnt = td.FluxMonitor(size=(1, 1, 0), freqs=np.array([1, 2, 3]) * 1e12, name="mnt/flux") - - with pytest.raises(ValueError): - med = td.Medium(permittivity=1, name='"my med"') diff --git a/tidy3d/components/base.py b/tidy3d/components/base.py index 734fa9ece..1d8b104cf 100644 --- a/tidy3d/components/base.py +++ b/tidy3d/components/base.py @@ -31,7 +31,7 @@ JSON_TAG = "JSON_STRING" # If json string is larger than ``MAX_STRING_LENGTH``, split the string when storing in hdf5 MAX_STRING_LENGTH = 1e9 -FORBID_SPECIAL_CHARACTERS = ["/", '"'] +FORBID_SPECIAL_CHARACTERS = ["/"] def cache(prop): From a8caa86e9aafde65e1a93f2bcfbccf5e276d337e Mon Sep 17 00:00:00 2001 From: daquintero Date: Tue, 2 Apr 2024 13:31:16 +0200 Subject: [PATCH 23/26] :book: DOCS: Release documentation improvement flow --- .github/workflows/release.yml | 24 ++++++++-- docs/development/installation.rst | 19 +++++--- docs/development/project_structure.rst | 33 +++++++++++++ docs/development/recommendations.rst | 55 ++++++++++++++++++++-- docs/development/release/documentation.rst | 26 ++++++++++ docs/development/release/flow.rst | 15 +++--- docs/development/release/index.rst | 7 +-- docs/development/release/requirements.rst | 15 ------ docs/development/release/version.rst | 41 +++------------- docs/development/usage.rst | 2 +- docs/notebooks | 2 +- 11 files changed, 165 insertions(+), 74 deletions(-) create mode 100644 docs/development/release/documentation.rst delete mode 100644 docs/development/release/requirements.rst diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ccc7852d7..faa796b46 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,7 +12,9 @@ jobs: github-release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@master + - uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} - name: Exit if any RC release if: contains(${{ github.ref }}, 'rc') == false uses: everlytic/branch-merge@1.1.2 @@ -20,7 +22,7 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} source_ref: ${{ github.ref }} target_branch: "latest" - commit_message_template: 'RELEASE: :shipit: :boom: :tada: Merged {source_ref} into target {target_branch}' + commit_message_template: ':tada: RELEASE: Merged {source_ref} into target {target_branch}' - name: Release uses: softprops/action-gh-release@v1 with: @@ -30,7 +32,9 @@ jobs: pypi-release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + with: + ref: ${{ github.ref }} - uses: actions/setup-python@v2 - name: Install dependencies run: | @@ -43,3 +47,17 @@ jobs: run: | python -m build python -m twine upload --repository pypi dist/* + sync_to_develop: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: "latest" + - name: Exit if any RC release + if: contains(${{ github.ref }}, 'rc') == false + uses: everlytic/branch-merge@1.1.2 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + source_ref: "latest" + target_branch: "develop" + commit_message_template: ':tada: RELEASE: Synced latest into develop' diff --git a/docs/development/installation.rst b/docs/development/installation.rst index 0458c9e1b..d485b788e 100644 --- a/docs/development/installation.rst +++ b/docs/development/installation.rst @@ -1,17 +1,22 @@ Installation ============== +Beginners Guide +^^^^^^^^^^^^^^^ + + + The Fast Lane ^^^^^^^^^^^^^ Maybe you already have ``tidy3d`` installed in some form. After installing version ``tidy3d>=2.6``, you can use a few terminal commands to set you up on the correct environment and perform common development tasks. Just run in your terminal, :code:`tidy3d develop` to get the latest list of commands. -It does not matter how you have installed ``tidy3d`` before as long as you have any form of `tidy3d>=2.6`` in your environment. This can help you transition from a standard user installation to a development environment installation. +It does not matter how you have installed ``tidy3d`` before as long as you have any form of ``tidy3d>=2.6`` in your environment. This can help you transition from a standard user installation to a development environment installation. Quick Start '''''''''''' -Instructions for anyone who wants to test the new development flow before it gets included as part of the pre-release: +Instructions for anyone who wants to migrate to the development flow from a version before 2.6: For ubuntu: @@ -30,8 +35,8 @@ For ubuntu: Now you can run the following ``tidy3d`` cli commands to test them. -Automatic Environment Installation (Beta) -''''''''''''''''''''''''''''''''''''''''''''' +Automatic Environment Installation *Beta* +'''''''''''''''''''''''''''''''''''''''''' If you are transitioning from the old development flow, to this new one, there are a list of commands you can run to make your life easier and set you up well: @@ -40,7 +45,7 @@ If you are transitioning from the old development flow, to this new one, there a # Automatically check and install requirements like pipx, poetry, pandoc tidy3d develop install-dev-environment -Note that this is just a automatic script implementation of the `The Detailed Lane`_ instructions. It is intended to help you and raise warnings with suggestions of how to fix an environment setup issue. You do not have to use this helper function and can just follow the instructions in `The Detailed Lane`_. All commands are echo-ed in the terminal so you will be able to observe and reproduce what is failing if you desire. +Note that this is just a automatic script implementation of the :ref:`The Detailed Lane` instructions. It is intended to help you and raise warnings with suggestions of how to fix an environment setup issue. You do not have to use this helper function and can just follow the instructions in :ref:`The Detailed Lane`. All commands are echo-ed in the terminal so you will be able to observe and reproduce what is failing if you desire. The way this command works is dependent on the operating system you are running. There are some prerequisites for each platform, but the command line tool will help you identify and install the tools it requires. You should rerun the command after you have installed any prerequisite as it will just progress with the rest of the tools installation. If you already have the tool installed, it will verify that it conforms to the supported versions. @@ -49,14 +54,14 @@ This command will first check if you already have installed the development requ Environment Verification '''''''''''''''''''''''' -If you rather install ``poetry``, ``pipx`` and ``pandoc`` yourself, you can run the following command to verify that your environment conforms to the reproducible development environment which would be equivalent to the one installed automatically above and described in `The Detailed Lane`_. +If you rather install ``poetry``, ``pipx`` and ``pandoc`` yourself, you can run the following command to verify that your environment conforms to the reproducible development environment which would be equivalent to the one installed automatically above and described in :ref:`The Detailed Lane`. .. code:: tidy3d develop verify-dev-environment -.. _detailed_lane: +.. _The Detailed Lane:: The Detailed Lane ^^^^^^^^^^^^^^^^^ diff --git a/docs/development/project_structure.rst b/docs/development/project_structure.rst index 9abbbde51..736ef5512 100644 --- a/docs/development/project_structure.rst +++ b/docs/development/project_structure.rst @@ -11,6 +11,9 @@ As of ``tidy3d>=2.6``, the frontend has been restructured to improve the develop notebooks/ # Git submodule repository # Checks out github.com/flexcompute/tidy3d-notebooks + faq/ + # Git submodule repository + # Checks out github.com/flexcompute/tidy3d-faq tests/ # pytest source and docs # pytest notebooks @@ -27,6 +30,36 @@ It is important to note the new tools we are using to manage our development env - ``poetry`` - ``pipx`` +Important Branches +------------------ + +We currently have *three* main branches that have to be kept track of when creating a release, each with different functionality. + +.. list-table:: Project Branches + :header-rows: 1 + :widths: 10 45 45 + + * - Name + - Description + - Caveats + * - ``latest`` + - Contains the latest version of the docs. Version release tags are created from this branch. + - Feature PRs should not be made to this branch as will cause divergence. Only in important documentation patches. + * - ``develop`` + - Contains the "staging" version of the project. Patch versions and development occurs from these branches. + - Docs PRs that are non-crucial for the current version should be made to this branch. + * - ``pre/^*`` + - Contains the next version of the project. + - Documentation and source code that will only go live in the next version should be updated here. + +Sometimes, hopefully infrequently, the `latest` and `develop` branches might diverge. +It is important to bring them back together. However, what happens if we rebase develop into latest? + +It could be argued that all the commits in the `latest` branch should have constructed within the `develop` branch. +Then, there is the question if we want to maintain the commit history accordingly. If we just want to maintain the content, +then rebasing and fixing up all the branches works fine. The problem with a merge commit is that it inserts the commits at the historical period in which they were made, rather than the commit period in which we desire to add them. +Hence, it makes sense to merge the `develop` and `latest` branches in order to maintain the same history, assuming the commits should in theory have been in both branches. + diff --git a/docs/development/recommendations.rst b/docs/development/recommendations.rst index b4d47b273..e2964df19 100644 --- a/docs/development/recommendations.rst +++ b/docs/development/recommendations.rst @@ -1,8 +1,56 @@ Recommendations ================= +Standardised Commit Messages +---------------------------- + +Now, realistically, this is a `matter of preference `_. +However, it could be argued there is something nice in having standard commit messages that can be easily searched through +to understand the role of each change, and also render nicely in the git history. Also, having a commit standard maybe makes people +looking through our code feel that we take pride in our work and also like to make it nice. It is debatable whether this is a way to do this, however, we can update these recommendations depending on how we consider best. + +However, if we do decide to commit with emojis, I believe it would be worth having a standard, so that it does not get polluted with different emojis (as I have been guilty of before) and also as can be seen in other open-source projects. + +.. list-table:: Commit Standard + :header-rows: 1 + :widths: 25 15 15 45 + + * - Purpose + - Emoji + - Types + - Example + * - |:sparkles:| New Feature + - ``:sparkles:`` + - ``FEAT:`` + - ``:sparkles: FEAT: `` + * - |:wrench:| Fix Broken Code + - ``:wrench:`` + - ``FIX:`` + - ``:wrench: FIX: `` + * - |:package:| Packaging-related + - ``:package:`` + - ``BUILD:`` + - ``:package: BUILD: `` + * - |:book:| Documentation-related + - ``:book:`` + - ``DOCS:`` + - ``:book: DOCS: `` + * - |:rocket:| Refactor code + - ``:rocket:`` + - ``REFC:`` + - ``:rocket: REFC: `` + * - |:test_tube:| Testing related + - ``:test_tube:`` + - ``TEST:`` + - ``:test_tube: TEST: `` + * - |:tada:| Release commit + - ``:tada:`` + - ``RELEASE:`` + - ``:tada: RELEASE: `` + + Package Speedup Best Practices -'''''''''''''''''''''''''''''' +---------------------------- ``tidy3d`` is a pretty big project already, and will get bigger. We want to optimise the performance of the codebase throughout the multiple operations that we perform. @@ -29,7 +77,8 @@ This is because the latter will import the entire package, which is not necessar Managing Optional Dependencies On-The-Fly -'''''''''''''''''''''''''''''''''''''''''' +---------------------------- + If you look within ``pyproject.toml``, it is possible to see that we have different packages relating to different functionalities that are optional. @@ -37,7 +86,7 @@ Some examples from these are ``[vtk, jax, trimesh, gdstk, gdspy]`` etc. What we Benchmarking Package Import -'''''''''''''''''''''''''''' +---------------------------- We want to make the tidy3d package be as light as possible for a given set of operations. As such, it is important to understand exactly where a given set of operations is expending computational power. diff --git a/docs/development/release/documentation.rst b/docs/development/release/documentation.rst new file mode 100644 index 000000000..8b8050ce4 --- /dev/null +++ b/docs/development/release/documentation.rst @@ -0,0 +1,26 @@ +Documentation Release +--------------------- + +The `tidy3d-docs` repository automatically mirrors the `tidy3d` repository. Specifically, these branches are automatically synced. + +- main +- latest +- develop +- 'pre/*' +- 'v*' + +These branches are synced to the tidy3d-docs repo through the sync-readthedocs-repo Github action. +You can read the latest versions synced in the action file. +However, you need to configure how they appear in the documentation build in the readthedocs admin page. +Only latest is the public version, others are private. + +The `latest` branch holds the state of the docs that we want to host in `latest` version on the website. These are the latest docs (including new notebooks, typo fixes, etc.) related to the last official release (not pre-release). + +The `stable` version of the docs on our website is built based on the last version tag which is not a pre-release tag (no `rc` ending). + +Hot Fix & Submodule Updates +''''''''''''''''''''''''''' + +To make a “hot fix” (eg fix a typo, add a notebook, update the release FAQ), just update the ``latest`` branch in ``tidy3d`` repo. This should automatically sync to `tidy3d-docs`, and trigger a docs rebuild. **However, we should avoid this as this will cause the ``develop`` and ``latest branches`` to diverge.** Ideally, these hot fixes could wait until the next pre/post-release to be propagated through. + +NOTE: To avoid conflicts, ideally we should only update ``latest`` by merging ``develop`` in it, or at the very least we should make sure changes are propagated to both branches. \ No newline at end of file diff --git a/docs/development/release/flow.rst b/docs/development/release/flow.rst index c1b3a0bf2..accac7adf 100644 --- a/docs/development/release/flow.rst +++ b/docs/development/release/flow.rst @@ -1,12 +1,16 @@ Feature Development Workflow ------------------------------ +Currently most of our release development flow is made under the latest ``pre/*`` branch under the main frontend +tidy3d repository. You want to fork from this latest branch to develop your feature in order for it to be included +under that release. + We are using a variation of the `gitflow workflow `__ - so this is the first thing to familiarize yourselves with. The splitting of branches into ``main``, ``develop`` and separate feature branches is as explained there. Most importantly, **all contributions -should happen through a PR from a feature branch into the ``develop`` +should happen through a PR from a feature branch into the develop branch.** The extra step that we have in our workflow is to @@ -16,11 +20,8 @@ history clean, but it does require a little more work. As an extra advantage, once you get the hang of rebasing it also becomes a very useful tool to prune your commits and write more meaningful commit messages when you’re done with the work. The main purpose of this page -is to give an example of the workflow. - - for more information on the difference between rebasing vs merging, - see this - `article `__. +is to give an example of the workflow. For more information on the difference between rebasing vs merging, +see this `article `__. The first thing to do when starting a new batch of work is to start from a clean branch on your machine. @@ -39,7 +40,7 @@ Create your feature rebase Before rebasing, you should make sure you have the latest version of ``develop``, in case other work has been merged meanwhile. -:: +.. code-block:: bash git checkout develop git pull origin develop diff --git a/docs/development/release/index.rst b/docs/development/release/index.rst index 9abe36d03..d2958eaa7 100644 --- a/docs/development/release/index.rst +++ b/docs/development/release/index.rst @@ -1,7 +1,7 @@ Release Flow ============== -Currently most of our release development flow is made under the latest ``pre/*`` branch under the main frontend tidy3d repository. You want to fork from this latest branch to develop your feature in order for it to be included under that release. +This page contains all the relevant information relating to each version release process for ``tidy3d``. .. You just need to make sure that the ```` branches of both ``tidy3d/`` and ``tidy3d-notebooks/`` repositories within the ``./`` and ``./docs/notebooks/`` directories are updated. The ``readthedocs`` documentation will be automatically updated through the ``sync-readthedocs-repo`` Github action. @@ -11,10 +11,11 @@ Currently most of our release development flow is made under the latest ``pre/*` flow version - requirements + documentation notebooks + .. include:: /development/release/flow.rst .. include:: /development/release/version.rst -.. include:: /development/release/requirements.rst +.. include:: /development/release/documentation.rst .. include:: /development/release/notebooks.rst \ No newline at end of file diff --git a/docs/development/release/requirements.rst b/docs/development/release/requirements.rst deleted file mode 100644 index a41c20257..000000000 --- a/docs/development/release/requirements.rst +++ /dev/null @@ -1,15 +0,0 @@ -Deployment Requirements ------------------------ - -**Documentation** - -When a new release is created, it is necessary to create a "mirror" branch under the `tidy3d-docs` repository in order for it to build. If this is not there an error such as the following might appear under the `sync-readthedocs-repo` Github action. You will also need to do this for full releases. - -.. code-block:: - - /usr/bin/git worktree remove github-pages-deploy-action-temp-deployment-folder --force - Error: The deploy step encountered an error: There was an error creating the worktree: The process '/usr/bin/git' failed with exit code 128 ❌ ❌ - Notice: Deployment failed! ❌ - -**Coverage** - diff --git a/docs/development/release/version.rst b/docs/development/release/version.rst index e482e6409..d13ffa44f 100644 --- a/docs/development/release/version.rst +++ b/docs/development/release/version.rst @@ -1,39 +1,12 @@ -Version Release ----------------- +Releasing a new ``tidy3d`` version +---------------------------------- -There's a really nice tool to manage the releases which is called ``bump-my-version``, which has already been configured. -It's really easy to use. +This document contains the relevant information to create and publish a new tidy3d version. -Docs of the tool available here https://callowayproject.github.io/bump-my-version/#create-a-default-configuration +Version Information Management +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -You need to have installed the development installation of ``tidy3d``: +The ``pyproject.toml`` is declarative (ie static) and provides information to the packaging tools like PyPi on what version is ``tidy3d``. However, we also have a ``version.py`` file so that we can dynamically query ``tidy3d.__version__`` within our python version. These two files need to be kept with the same version. This is achieved by using the ``bump-my-version`` utility as described in the following section. **These files should not be manually updated.** -.. code-block:: bash - - poetry install -E dev - -Now, make sure the git index is clean, and you're ready to release. Test that the release would update the correct files: - -.. code-block:: bash - - poetry run bump-my-version show-bump - -When you want to bump the version, you only have to do: - -.. code-block:: bash - - poetry run bump-my-version bump - -An example of the ``.bump-my-version.toml`` is as below, and just configures the files to be updated: - -.. code-block:: bash - - 2024-03-20 16:58:02 ⌚ dxps in ~/flexcompute/tidy3d - ± |dario/2.6.2/fix_versioning S:1 U:3 ?:2 ✗| → poetry run bump-my-version show-bump - Specified version (2.6.1) does not match last tagged version (2.6.0) - 2.6.1 ── bump ─┬─ major ─ 3.0.0 - ├─ minor ─ 2.7.0 - ├─ patch ─ 2.6.2 - ├─ pre_l ─ 2.6.1-rc0 - ╰─ pre_n ─ 2.6.1-dev1 +The configuration of the way the version bumping occurs is described in the ``pyproject.toml``. diff --git a/docs/development/usage.rst b/docs/development/usage.rst index 33db05944..1bacada72 100644 --- a/docs/development/usage.rst +++ b/docs/development/usage.rst @@ -4,7 +4,7 @@ Using the Development Flow Developing ``tidy3d`` with ``poetry`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -``poetry`` is an incredibly powerful tool for reproducible package development environments and dependency management. TODO add link. +`poetry `_ is an incredibly powerful tool for reproducible package development environments and dependency management. If you are developing ``tidy3d``, we recommend you work within the configured ``poetry`` environment defined by ``poetry.lock``. The way to install this environment is simple: diff --git a/docs/notebooks b/docs/notebooks index f43ed15d7..0aa01ae48 160000 --- a/docs/notebooks +++ b/docs/notebooks @@ -1 +1 @@ -Subproject commit f43ed15d7f13db8aecc5f4020254e0876c37b338 +Subproject commit 0aa01ae4844ba6db496577601c369de143cbdd82 From cd211caec1156ee74ce1e0201f8a4731316d448b Mon Sep 17 00:00:00 2001 From: dbochkov-flexcompute Date: Mon, 1 Apr 2024 13:18:31 -0500 Subject: [PATCH 24/26] add new validators for heat simulation --- tests/test_components/test_heat.py | 35 +++++++++++++++++++++++- tidy3d/components/heat/simulation.py | 40 +++++++++++++++++++++++++++- tidy3d/components/heat/source.py | 9 +++++++ 3 files changed, 82 insertions(+), 2 deletions(-) diff --git a/tests/test_components/test_heat.py b/tests/test_components/test_heat.py index 91dd5f003..f01a2cf8f 100644 --- a/tests/test_components/test_heat.py +++ b/tests/test_components/test_heat.py @@ -226,7 +226,9 @@ def make_heat_source(): def test_heat_source(): - _ = make_heat_source() + source = make_heat_source() + with pytest.raises(pd.ValidationError): + _ = source.updated_copy(structures=[]) def make_heat_sim(): @@ -327,9 +329,28 @@ def test_heat_sim(): _ = heat_sim.plot_heat_conductivity(z=0, colorbar="source") plt.close() + # no negative symmetry with pytest.raises(pd.ValidationError): _ = heat_sim.updated_copy(symmetry=(-1, 0, 1)) + # no SolidSpec in the entire simulation + bc_spec = td.HeatBoundarySpec( + placement=td.SimulationBoundary(), condition=td.TemperatureBC(temperature=300) + ) + solid_med = heat_sim.structures[1].medium + + _ = heat_sim.updated_copy(structures=[], medium=solid_med, sources=[], boundary_spec=[bc_spec]) + with pytest.raises(pd.ValidationError): + _ = heat_sim.updated_copy(structures=[], sources=[], boundary_spec=[bc_spec]) + + _ = heat_sim.updated_copy( + structures=[heat_sim.structures[0]], medium=solid_med, boundary_spec=[bc_spec], sources=[] + ) + with pytest.raises(pd.ValidationError): + _ = heat_sim.updated_copy( + structures=[heat_sim.structures[0]], boundary_spec=[bc_spec], sources=[] + ) + @pytest.mark.parametrize("shift_amount, log_level", ((1, None), (2, "WARNING"))) def test_heat_sim_bounds(shift_amount, log_level, log_capture): @@ -344,11 +365,17 @@ def place_box(center_offset): _ = td.HeatSimulation( size=(1.5, 1.5, 1.5), center=CENTER_SHIFT, + medium=td.Medium(heat_spec=td.SolidSpec(conductivity=1, capacity=1)), structures=[ td.Structure( geometry=td.Box(size=(1, 1, 1), center=shifted_center), medium=td.Medium() ) ], + boundary_spec=[ + td.HeatBoundarySpec( + placement=td.SimulationBoundary(), condition=td.TemperatureBC(temperature=300) + ) + ], grid_spec=td.UniformUnstructuredGrid(dl=0.1), ) @@ -382,7 +409,13 @@ def test_sim_structure_extent(log_capture, box_size, log_level): box = td.Structure(geometry=td.Box(size=box_size), medium=td.Medium(permittivity=2)) _ = td.HeatSimulation( size=(1, 1, 1), + medium=td.Medium(heat_spec=td.SolidSpec(conductivity=1, capacity=1)), structures=[box], + boundary_spec=[ + td.HeatBoundarySpec( + placement=td.SimulationBoundary(), condition=td.TemperatureBC(temperature=300) + ) + ], grid_spec=td.UniformUnstructuredGrid(dl=0.1), ) diff --git a/tidy3d/components/heat/simulation.py b/tidy3d/components/heat/simulation.py index 0f9e6bc9b..6da4a96b8 100644 --- a/tidy3d/components/heat/simulation.py +++ b/tidy3d/components/heat/simulation.py @@ -24,6 +24,7 @@ from ..geometry.polyslab import PolySlab from ..geometry.mesh import TriangleMesh from ..scene import Scene +from ..heat_spec import SolidSpec from ..bc_placement import StructureBoundary, StructureStructureInterface from ..bc_placement import StructureSimulationBoundary, SimulationBoundary @@ -176,6 +177,17 @@ def names_exist_bcs(cls, val, values): ) return val + @pd.validator("boundary_spec", always=True) + def not_all_neumann(cls, val): + """Error if all boundary conditions are Neumann bc.""" + + if len(val) == 0 or all(isinstance(bc_spec.condition, HeatFluxBC) for bc_spec in val): + raise SetupError( + "Heat simulation contains only 'HeatFluxBC' (Neumann) boundary conditions. Steady-state solution is undefined in this case." + ) + + return val + @pd.validator("grid_spec", always=True) @skip_if_fields_missing(["structures"]) def names_exist_grid_spec(cls, val, values): @@ -209,6 +221,21 @@ def names_exist_sources(cls, val, values): ) return val + @pd.root_validator(skip_on_failure=True) + def check_medium_heat_spec(cls, values): + """Error if no structures with SolidSpec.""" + medium = values["medium"] + structures = values["structures"] + if not ( + isinstance(medium.heat_spec, SolidSpec) + or any(isinstance(struct.medium.heat_spec, SolidSpec) for struct in structures) + ): + raise SetupError( + "No solid materials ('SolidSpec') are detected in heat simulation. Solution domain is empty." + ) + + return values + @equal_aspect @add_ax_if_none def plot_heat_conductivity( @@ -814,13 +841,24 @@ def from_scene(cls, scene: Scene, **kwargs) -> HeatSimulation: ... ) >>> scene = Scene( ... structures=[box], - ... medium=Medium(permittivity=3), + ... medium=Medium( + ... permittivity=3, + ... heat_spec=SolidSpec( + ... conductivity=1, capacity=1, + ... ), + ... ), ... ) >>> sim = HeatSimulation.from_scene( ... scene=scene, ... center=(0, 0, 0), ... size=(5, 6, 7), ... grid_spec=UniformUnstructuredGrid(dl=0.4), + ... boundary_spec=[ + ... HeatBoundarySpec( + ... placement=SimulationBoundary(), + ... condition=TemperatureBC(temperature=300) + ... ) + ... ], ... ) """ diff --git a/tidy3d/components/heat/source.py b/tidy3d/components/heat/source.py index c47735303..db993cdce 100644 --- a/tidy3d/components/heat/source.py +++ b/tidy3d/components/heat/source.py @@ -14,6 +14,7 @@ from ..viz import PlotParams from ...constants import VOLUMETRIC_HEAT_RATE +from ...exceptions import SetupError class HeatSource(AbstractSource, ABC): @@ -29,6 +30,14 @@ def plot_params(self) -> PlotParams: """Default parameters for plotting a Source object.""" return plot_params_heat_source + @pd.validator("structures", always=True) + def check_non_empty_structures(cls, val): + """Error if source doesn't point at any structures.""" + if len(val) == 0: + raise SetupError("List of structures for heat source is empty.") + + return val + class UniformHeatSource(HeatSource): """Volumetric heat source. From 6c3e475f75d5a9af901978108f795fccf5df945b Mon Sep 17 00:00:00 2001 From: dbochkov-flexcompute Date: Tue, 2 Apr 2024 11:51:30 -0500 Subject: [PATCH 25/26] validate no thin structures in heat simulation --- tests/test_components/test_heat.py | 15 +++++++++++++++ tidy3d/components/heat/simulation.py | 12 +++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/tests/test_components/test_heat.py b/tests/test_components/test_heat.py index f01a2cf8f..d175e1d90 100644 --- a/tests/test_components/test_heat.py +++ b/tests/test_components/test_heat.py @@ -351,6 +351,21 @@ def test_heat_sim(): structures=[heat_sim.structures[0]], boundary_spec=[bc_spec], sources=[] ) + # 1D and 2D structures + struct_1d = td.Structure( + geometry=td.Box(size=(1, 0, 0)), + medium=solid_med, + ) + struct_2d = td.Structure( + geometry=td.Box(size=(1, 0, 1)), + medium=heat_sim.medium, + ) + with pytest.raises(pd.ValidationError): + _ = heat_sim.updated_copy(structures=list(heat_sim.structures) + [struct_1d]) + + with pytest.raises(pd.ValidationError): + _ = heat_sim.updated_copy(structures=list(heat_sim.structures) + [struct_2d]) + @pytest.mark.parametrize("shift_amount, log_level", ((1, None), (2, "WARNING"))) def test_heat_sim_bounds(shift_amount, log_level, log_capture): diff --git a/tidy3d/components/heat/simulation.py b/tidy3d/components/heat/simulation.py index 6da4a96b8..ad07c815c 100644 --- a/tidy3d/components/heat/simulation.py +++ b/tidy3d/components/heat/simulation.py @@ -109,7 +109,13 @@ class HeatSimulation(AbstractSimulation): @pd.validator("structures", always=True) def check_unsupported_geometries(cls, val): """Error if structures contain unsupported yet geometries.""" - for structure in val: + for ind, structure in enumerate(val): + bbox = structure.geometry.bounding_box + if any(s == 0 for s in bbox.size): + raise SetupError( + f"'HeatSimulation' does not currently support structures with dimensions of zero size ('structures[{ind}]')." + ) + if isinstance(structure.geometry, GeometryGroup): geometries = structure.geometry.geometries else: @@ -117,13 +123,13 @@ def check_unsupported_geometries(cls, val): for geom in geometries: if isinstance(geom, (GeometryGroup)): raise SetupError( - "'HeatSimulation' does not currently support recursive 'GeometryGroup's." + "'HeatSimulation' does not currently support recursive 'GeometryGroup's ('structures[{ind}]')." ) if not isinstance(geom, HeatSingleGeometryType): geom_names = [f"'{cl.__name__}'" for cl in HeatSingleGeometryType] raise SetupError( "'HeatSimulation' does not currently support geometries of type " - f"'{geom.type}'. Allowed geometries are " + f"'{geom.type}' ('structures[{ind}]'). Allowed geometries are " f"{', '.join(geom_names)}, " "and non-recursive 'GeometryGroup'." ) From 9a2276a7f645b98957c953ad43dd3bda5886dbce Mon Sep 17 00:00:00 2001 From: momchil Date: Tue, 2 Apr 2024 10:27:08 -0700 Subject: [PATCH 26/26] Version, changelog, schema for 2.6.3 --- CHANGELOG.md | 12 ++++++++++-- pyproject.toml | 4 ++-- tests/sims/simulation_sample.h5 | Bin 343216 -> 343216 bytes tests/sims/simulation_sample.json | 2 +- tidy3d/schema.json | 4 ++-- tidy3d/version.py | 2 +- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad4d735a4..6ce7db331 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Changed -- Revert forbidden `"` in component names. ### Fixed +## [2.6.3] - 2024-04-02 + +### Added +- Added new validators in `HeatSimulation`: no structures with dimensions of zero size, no all-Neumann boundary conditions, non-empty simulation domain. + +### Changed +- Revert forbidden `"` in component names. + ## [2.6.2] - 2024-03-21 ### Changed @@ -1142,7 +1149,8 @@ which fields are to be projected is now determined automatically based on the me - Job and Batch classes for better simulation handling (eventually to fully replace webapi functions). - A large number of small improvements and bug fixes. -[Unreleased]: https://github.com/flexcompute/tidy3d/compare/v2.6.2...develop +[Unreleased]: https://github.com/flexcompute/tidy3d/compare/v2.6.3...develop +[2.6.3]: https://github.com/flexcompute/tidy3d/compare/v2.6.2...v2.6.3 [2.6.2]: https://github.com/flexcompute/tidy3d/compare/v2.6.1...v2.6.2 [2.6.1]: https://github.com/flexcompute/tidy3d/compare/v2.6.0...v2.6.1 [2.6.0]: https://github.com/flexcompute/tidy3d/compare/v2.5.2...v2.6.0 diff --git a/pyproject.toml b/pyproject.toml index afcdc4af2..137703d6c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "tidy3d" -version = "2.6.2" +version = "2.6.3" description = "A fast FDTD solver" authors = ["Tyler Hughes "] license = "LGPLv2+" @@ -186,7 +186,7 @@ lint.select = [ ] [tool.bumpversion] -current_version = "2.6.2" +current_version = "2.6.3" parse = """(?x) (?P0|[1-9]\\d*)\\. (?P0|[1-9]\\d*)\\. diff --git a/tests/sims/simulation_sample.h5 b/tests/sims/simulation_sample.h5 index 0e60fa166123adde397132cc72d3dcac8bb52220..8f2cf45123bef5765aa852e2dfd13383581521d5 100644 GIT binary patch delta 32 icmdn+Q)B}O6*3w(|0-<%Rmcd$OhC-M{Z}E&wo?EhZV@>E delta 32 icmdn+Q)B}O6*3w%|0-<%Rmcd$OhC-M{Z}E&wo?EhSP?h? diff --git a/tests/sims/simulation_sample.json b/tests/sims/simulation_sample.json index 7e358a48d..19f124bf5 100644 --- a/tests/sims/simulation_sample.json +++ b/tests/sims/simulation_sample.json @@ -2222,7 +2222,7 @@ ], "type": "GridSpec" }, - "version": "2.6.2", + "version": "2.6.3", "courant": 0.8, "normalize_index": 0, "shutoff": 0.0001, diff --git a/tidy3d/schema.json b/tidy3d/schema.json index 4a675998b..127a0210a 100644 --- a/tidy3d/schema.json +++ b/tidy3d/schema.json @@ -1,6 +1,6 @@ { "title": "Simulation", - "description": "Custom implementation of Maxwell\u2019s equations which represents the physical model to be solved using the FDTD\nmethod.\n\nParameters\n----------\ncenter : Tuple[float, float, float] = (0.0, 0.0, 0.0)\n [units = um]. Center of object in x, y, and z.\nsize : Tuple[NonNegativeFloat, NonNegativeFloat, NonNegativeFloat]\n [units = um]. Size in x, y, and z directions.\nmedium : Union[Medium, AnisotropicMedium, PECMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, FullyAnisotropicMedium, CustomMedium, CustomPoleResidue, CustomSellmeier, CustomLorentz, CustomDebye, CustomDrude, CustomAnisotropicMedium, PerturbationMedium, PerturbationPoleResidue] = Medium(name=None, frequency_range=None, allow_gain=False, nonlinear_spec=None, modulation_spec=None, heat_spec=None, type='Medium', permittivity=1.0, conductivity=0.0)\n Background medium of simulation, defaults to vacuum if not specified.\nstructures : Tuple[Structure, ...] = ()\n Tuple of structures present in simulation. Note: Structures defined later in this list override the simulation material properties in regions of spatial overlap.\nsymmetry : Tuple[Literal[0, -1, 1], Literal[0, -1, 1], Literal[0, -1, 1]] = (0, 0, 0)\n Tuple of integers defining reflection symmetry across a plane bisecting the simulation domain normal to the x-, y-, and z-axis at the simulation center of each axis, respectively. Each element can be ``0`` (no symmetry), ``1`` (even, i.e. 'PMC' symmetry) or ``-1`` (odd, i.e. 'PEC' symmetry). Note that the vectorial nature of the fields must be taken into account to correctly determine the symmetry value.\nsources : Tuple[Annotated[Union[tidy3d.components.source.UniformCurrentSource, tidy3d.components.source.PointDipole, tidy3d.components.source.GaussianBeam, tidy3d.components.source.AstigmaticGaussianBeam, tidy3d.components.source.ModeSource, tidy3d.components.source.PlaneWave, tidy3d.components.source.CustomFieldSource, tidy3d.components.source.CustomCurrentSource, tidy3d.components.source.TFSF], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of electric current sources injecting fields into the simulation.\nboundary_spec : BoundarySpec = BoundarySpec(x=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), y=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), z=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), type='BoundarySpec')\n Specification of boundary conditions along each dimension. If ``None``, PML boundary conditions are applied on all sides.\nmonitors : Tuple[Annotated[Union[tidy3d.components.monitor.FieldMonitor, tidy3d.components.monitor.FieldTimeMonitor, tidy3d.components.monitor.PermittivityMonitor, tidy3d.components.monitor.FluxMonitor, tidy3d.components.monitor.FluxTimeMonitor, tidy3d.components.monitor.ModeMonitor, tidy3d.components.monitor.ModeSolverMonitor, tidy3d.components.monitor.FieldProjectionAngleMonitor, tidy3d.components.monitor.FieldProjectionCartesianMonitor, tidy3d.components.monitor.FieldProjectionKSpaceMonitor, tidy3d.components.monitor.DiffractionMonitor], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of monitors in the simulation. Note: monitor names are used to access data after simulation is run.\ngrid_spec : GridSpec = GridSpec(grid_x=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), grid_y=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), grid_z=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), wavelength=None, override_structures=(), type='GridSpec')\n Specifications for the simulation grid along each of the three directions.\nversion : str = 2.6.2\n String specifying the front end version number.\ncourant : ConstrainedFloatValue = 0.99\n Courant stability factor, controls time step to spatial step ratio. Lower values lead to more stable simulations for dispersive materials, but result in longer simulation times. This factor is normalized to no larger than 1 when CFL stability condition is met in 3D.\nnormalize_index : Optional[NonNegativeInt] = 0\n Index of the source in the tuple of sources whose spectrum will be used to normalize the frequency-dependent data. If ``None``, the raw field data is returned unnormalized.\nshutoff : NonNegativeFloat = 1e-05\n Ratio of the instantaneous integrated E-field intensity to the maximum value at which the simulation will automatically terminate time stepping. Used to prevent extraneous run time of simulations with fully decayed fields. Set to ``0`` to disable this feature.\nsubpixel : bool = True\n If ``True``, uses subpixel averaging of the permittivity based on structure definition, resulting in much higher accuracy for a given grid size.\nrun_time : PositiveFloat\n [units = sec]. Total electromagnetic evolution time in seconds. Note: If simulation 'shutoff' is specified, simulation will terminate early when shutoff condition met. \n\nNotes\n-----\n\n A ``Simulation`` defines a custom implementation of Maxwell's equations which represents the physical model\n to be solved using `the Finite-Difference Time-Domain (FDTD) method\n `_. ``tidy3d`` simulations\n run very quickly in the cloud through GPU parallelization.\n\n .. image:: ../../_static/img/field_update_fdtd.png\n :width: 50%\n :align: left\n\n FDTD is a method for simulating the interaction of electromagnetic waves with structures and materials. It is\n the most widely used method in photonics design. The Maxwell's\n equations implemented in the ``Simulation`` are solved per time-step in the order shown in this image.\n\n The simplified input to FDTD solver consists of the permittivity distribution defined by :attr:`structures`\n which describe the device and :attr:`sources` of electromagnetic excitation. This information is used to\n computate the time dynamics of the electric and magnetic fields in this system. From these time-domain\n results, frequency-domain information of the simulation can also be extracted, and used for device design and\n optimization.\n\n If you are new to the FDTD method, we recommend you get started with the `FDTD 101 Lecture Series\n `_\n\n **Dimensions Selection**\n\n By default, simulations are defined as 3D. To make the simulation 2D, we can just set the simulation\n :attr:`size` in one of the dimensions to be 0. However, note that we still have to define a grid size (eg.\n ``tidy3d.Simulation(size=[size_x, size_y, 0])``) and specify a periodic boundary condition in that direction.\n\n .. TODO sort out inheritance problem https://aware-moon.cloudvent.net/tidy3d/examples/notebooks/RingResonator/\n\n See further parameter explanations below.\n\nExample\n-------\n>>> from tidy3d import Sphere, Cylinder, PolySlab\n>>> from tidy3d import UniformCurrentSource, GaussianPulse\n>>> from tidy3d import FieldMonitor, FluxMonitor\n>>> from tidy3d import GridSpec, AutoGrid\n>>> from tidy3d import BoundarySpec, Boundary\n>>> from tidy3d import Medium\n>>> sim = Simulation(\n... size=(3.0, 3.0, 3.0),\n... grid_spec=GridSpec(\n... grid_x = AutoGrid(min_steps_per_wvl = 20),\n... grid_y = AutoGrid(min_steps_per_wvl = 20),\n... grid_z = AutoGrid(min_steps_per_wvl = 20)\n... ),\n... run_time=40e-11,\n... structures=[\n... Structure(\n... geometry=Box(size=(1, 1, 1), center=(0, 0, 0)),\n... medium=Medium(permittivity=2.0),\n... ),\n... ],\n... sources=[\n... UniformCurrentSource(\n... size=(0, 0, 0),\n... center=(0, 0.5, 0),\n... polarization=\"Hx\",\n... source_time=GaussianPulse(\n... freq0=2e14,\n... fwidth=4e13,\n... ),\n... )\n... ],\n... monitors=[\n... FluxMonitor(size=(1, 1, 0), center=(0, 0, 0), freqs=[2e14, 2.5e14], name='flux'),\n... ],\n... symmetry=(0, 0, 0),\n... boundary_spec=BoundarySpec(\n... x = Boundary.pml(num_layers=20),\n... y = Boundary.pml(num_layers=30),\n... z = Boundary.periodic(),\n... ),\n... shutoff=1e-6,\n... courant=0.8,\n... subpixel=False,\n... )\n\nSee Also\n--------\n\n**Notebooks:**\n * `Quickstart <../../notebooks/StartHere.html>`_: Usage in a basic simulation flow.\n * `Using automatic nonuniform meshing <../../notebooks/AutoGrid.html>`_\n * See nearly all notebooks for :class:`Simulation` applications.\n\n**Lectures:**\n * `Introduction to FDTD Simulation `_: Usage in a basic simulation flow.\n * `Prelude to Integrated Photonics Simulation: Mode Injection `_\n\n**GUI:**\n * `FDTD Walkthrough `_", + "description": "Custom implementation of Maxwell\u2019s equations which represents the physical model to be solved using the FDTD\nmethod.\n\nParameters\n----------\ncenter : Tuple[float, float, float] = (0.0, 0.0, 0.0)\n [units = um]. Center of object in x, y, and z.\nsize : Tuple[NonNegativeFloat, NonNegativeFloat, NonNegativeFloat]\n [units = um]. Size in x, y, and z directions.\nmedium : Union[Medium, AnisotropicMedium, PECMedium, PoleResidue, Sellmeier, Lorentz, Debye, Drude, FullyAnisotropicMedium, CustomMedium, CustomPoleResidue, CustomSellmeier, CustomLorentz, CustomDebye, CustomDrude, CustomAnisotropicMedium, PerturbationMedium, PerturbationPoleResidue] = Medium(name=None, frequency_range=None, allow_gain=False, nonlinear_spec=None, modulation_spec=None, heat_spec=None, type='Medium', permittivity=1.0, conductivity=0.0)\n Background medium of simulation, defaults to vacuum if not specified.\nstructures : Tuple[Structure, ...] = ()\n Tuple of structures present in simulation. Note: Structures defined later in this list override the simulation material properties in regions of spatial overlap.\nsymmetry : Tuple[Literal[0, -1, 1], Literal[0, -1, 1], Literal[0, -1, 1]] = (0, 0, 0)\n Tuple of integers defining reflection symmetry across a plane bisecting the simulation domain normal to the x-, y-, and z-axis at the simulation center of each axis, respectively. Each element can be ``0`` (no symmetry), ``1`` (even, i.e. 'PMC' symmetry) or ``-1`` (odd, i.e. 'PEC' symmetry). Note that the vectorial nature of the fields must be taken into account to correctly determine the symmetry value.\nsources : Tuple[Annotated[Union[tidy3d.components.source.UniformCurrentSource, tidy3d.components.source.PointDipole, tidy3d.components.source.GaussianBeam, tidy3d.components.source.AstigmaticGaussianBeam, tidy3d.components.source.ModeSource, tidy3d.components.source.PlaneWave, tidy3d.components.source.CustomFieldSource, tidy3d.components.source.CustomCurrentSource, tidy3d.components.source.TFSF], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of electric current sources injecting fields into the simulation.\nboundary_spec : BoundarySpec = BoundarySpec(x=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), y=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), z=Boundary(plus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, minus=PML(name=None,, type='PML',, num_layers=12,, parameters=PMLParams(sigma_order=3,, sigma_min=0.0,, sigma_max=1.5,, type='PMLParams',, kappa_order=3,, kappa_min=1.0,, kappa_max=3.0,, alpha_order=1,, alpha_min=0.0,, alpha_max=0.0)),, type='Boundary'), type='BoundarySpec')\n Specification of boundary conditions along each dimension. If ``None``, PML boundary conditions are applied on all sides.\nmonitors : Tuple[Annotated[Union[tidy3d.components.monitor.FieldMonitor, tidy3d.components.monitor.FieldTimeMonitor, tidy3d.components.monitor.PermittivityMonitor, tidy3d.components.monitor.FluxMonitor, tidy3d.components.monitor.FluxTimeMonitor, tidy3d.components.monitor.ModeMonitor, tidy3d.components.monitor.ModeSolverMonitor, tidy3d.components.monitor.FieldProjectionAngleMonitor, tidy3d.components.monitor.FieldProjectionCartesianMonitor, tidy3d.components.monitor.FieldProjectionKSpaceMonitor, tidy3d.components.monitor.DiffractionMonitor], FieldInfo(default=PydanticUndefined, discriminator='type', extra={})], ...] = ()\n Tuple of monitors in the simulation. Note: monitor names are used to access data after simulation is run.\ngrid_spec : GridSpec = GridSpec(grid_x=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), grid_y=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), grid_z=AutoGrid(type='AutoGrid',, min_steps_per_wvl=10.0,, max_scale=1.4,, dl_min=0.0,, mesher=GradedMesher(type='GradedMesher')), wavelength=None, override_structures=(), type='GridSpec')\n Specifications for the simulation grid along each of the three directions.\nversion : str = 2.6.3\n String specifying the front end version number.\ncourant : ConstrainedFloatValue = 0.99\n Courant stability factor, controls time step to spatial step ratio. Lower values lead to more stable simulations for dispersive materials, but result in longer simulation times. This factor is normalized to no larger than 1 when CFL stability condition is met in 3D.\nnormalize_index : Optional[NonNegativeInt] = 0\n Index of the source in the tuple of sources whose spectrum will be used to normalize the frequency-dependent data. If ``None``, the raw field data is returned unnormalized.\nshutoff : NonNegativeFloat = 1e-05\n Ratio of the instantaneous integrated E-field intensity to the maximum value at which the simulation will automatically terminate time stepping. Used to prevent extraneous run time of simulations with fully decayed fields. Set to ``0`` to disable this feature.\nsubpixel : bool = True\n If ``True``, uses subpixel averaging of the permittivity based on structure definition, resulting in much higher accuracy for a given grid size.\nrun_time : PositiveFloat\n [units = sec]. Total electromagnetic evolution time in seconds. Note: If simulation 'shutoff' is specified, simulation will terminate early when shutoff condition met. \n\nNotes\n-----\n\n A ``Simulation`` defines a custom implementation of Maxwell's equations which represents the physical model\n to be solved using `the Finite-Difference Time-Domain (FDTD) method\n `_. ``tidy3d`` simulations\n run very quickly in the cloud through GPU parallelization.\n\n .. image:: ../../_static/img/field_update_fdtd.png\n :width: 50%\n :align: left\n\n FDTD is a method for simulating the interaction of electromagnetic waves with structures and materials. It is\n the most widely used method in photonics design. The Maxwell's\n equations implemented in the ``Simulation`` are solved per time-step in the order shown in this image.\n\n The simplified input to FDTD solver consists of the permittivity distribution defined by :attr:`structures`\n which describe the device and :attr:`sources` of electromagnetic excitation. This information is used to\n computate the time dynamics of the electric and magnetic fields in this system. From these time-domain\n results, frequency-domain information of the simulation can also be extracted, and used for device design and\n optimization.\n\n If you are new to the FDTD method, we recommend you get started with the `FDTD 101 Lecture Series\n `_\n\n **Dimensions Selection**\n\n By default, simulations are defined as 3D. To make the simulation 2D, we can just set the simulation\n :attr:`size` in one of the dimensions to be 0. However, note that we still have to define a grid size (eg.\n ``tidy3d.Simulation(size=[size_x, size_y, 0])``) and specify a periodic boundary condition in that direction.\n\n .. TODO sort out inheritance problem https://aware-moon.cloudvent.net/tidy3d/examples/notebooks/RingResonator/\n\n See further parameter explanations below.\n\nExample\n-------\n>>> from tidy3d import Sphere, Cylinder, PolySlab\n>>> from tidy3d import UniformCurrentSource, GaussianPulse\n>>> from tidy3d import FieldMonitor, FluxMonitor\n>>> from tidy3d import GridSpec, AutoGrid\n>>> from tidy3d import BoundarySpec, Boundary\n>>> from tidy3d import Medium\n>>> sim = Simulation(\n... size=(3.0, 3.0, 3.0),\n... grid_spec=GridSpec(\n... grid_x = AutoGrid(min_steps_per_wvl = 20),\n... grid_y = AutoGrid(min_steps_per_wvl = 20),\n... grid_z = AutoGrid(min_steps_per_wvl = 20)\n... ),\n... run_time=40e-11,\n... structures=[\n... Structure(\n... geometry=Box(size=(1, 1, 1), center=(0, 0, 0)),\n... medium=Medium(permittivity=2.0),\n... ),\n... ],\n... sources=[\n... UniformCurrentSource(\n... size=(0, 0, 0),\n... center=(0, 0.5, 0),\n... polarization=\"Hx\",\n... source_time=GaussianPulse(\n... freq0=2e14,\n... fwidth=4e13,\n... ),\n... )\n... ],\n... monitors=[\n... FluxMonitor(size=(1, 1, 0), center=(0, 0, 0), freqs=[2e14, 2.5e14], name='flux'),\n... ],\n... symmetry=(0, 0, 0),\n... boundary_spec=BoundarySpec(\n... x = Boundary.pml(num_layers=20),\n... y = Boundary.pml(num_layers=30),\n... z = Boundary.periodic(),\n... ),\n... shutoff=1e-6,\n... courant=0.8,\n... subpixel=False,\n... )\n\nSee Also\n--------\n\n**Notebooks:**\n * `Quickstart <../../notebooks/StartHere.html>`_: Usage in a basic simulation flow.\n * `Using automatic nonuniform meshing <../../notebooks/AutoGrid.html>`_\n * See nearly all notebooks for :class:`Simulation` applications.\n\n**Lectures:**\n * `Introduction to FDTD Simulation `_: Usage in a basic simulation flow.\n * `Prelude to Integrated Photonics Simulation: Mode Injection `_\n\n**GUI:**\n * `FDTD Walkthrough `_", "type": "object", "properties": { "type": { @@ -475,7 +475,7 @@ "version": { "title": "Version", "description": "String specifying the front end version number.", - "default": "2.6.2", + "default": "2.6.3", "type": "string" }, "courant": { diff --git a/tidy3d/version.py b/tidy3d/version.py index 6abde6985..667a03d71 100644 --- a/tidy3d/version.py +++ b/tidy3d/version.py @@ -1,2 +1,2 @@ """DO NOT EDIT: Modified automatically with .bump2version.cfg""" -__version__ = "2.6.2" +__version__ = "2.6.3"