From 74fce586ed24257e7ed13f818655aaf7aaee448d Mon Sep 17 00:00:00 2001 From: Yannick Augenstein Date: Fri, 31 May 2024 16:34:48 +0200 Subject: [PATCH] Run isort --- docs/_ext/custom-sitemap.py | 2 +- docs/conf.py | 3 +- docs/generate_doc.py | 8 +- poetry.lock | 148 ++++---- pyproject.toml | 2 +- scripts/make_script.py | 6 +- scripts/sample.py | 2 +- scripts/schema.py | 1 + tests/_test_data/_test_datasets_no_vtk.py | 6 +- .../_test_local/_test_adjoint_performance.py | 20 +- .../_test_adjoint_performance_multi.py | 11 +- tests/_test_local/_test_data_performance.py | 15 +- tests/_test_local/_test_fit_web.py | 4 +- tests/_test_local/_test_plugins_web.py | 3 +- tests/_test_local/_test_web.py | 3 +- tests/_test_notebooks/full_test_notebooks.py | 6 +- tests/conftest.py | 1 - tests/test_cli/full_test_develop.py | 5 +- tests/test_components/test_IO.py | 19 +- tests/test_components/test_apodization.py | 4 +- tests/test_components/test_autograd.py | 9 +- tests/test_components/test_base.py | 4 +- tests/test_components/test_bc_placement.py | 6 +- tests/test_components/test_boundaries.py | 20 +- tests/test_components/test_custom.py | 25 +- tests/test_components/test_eme.py | 9 +- .../test_components/test_field_projection.py | 4 +- tests/test_components/test_geometry.py | 21 +- tests/test_components/test_grid.py | 3 +- tests/test_components/test_grid_spec.py | 3 +- tests/test_components/test_heat.py | 38 +- tests/test_components/test_medium.py | 12 +- tests/test_components/test_meshgenerate.py | 6 +- tests/test_components/test_mode.py | 4 +- tests/test_components/test_monitor.py | 5 +- tests/test_components/test_packaging.py | 2 +- .../test_parameter_perturbation.py | 5 +- tests/test_components/test_scene.py | 8 +- tests/test_components/test_sidewall.py | 5 +- tests/test_components/test_simulation.py | 16 +- tests/test_components/test_source.py | 9 +- tests/test_components/test_structure.py | 4 +- tests/test_components/test_time_modulation.py | 6 +- tests/test_components/test_types.py | 6 +- tests/test_components/test_viz.py | 2 +- tests/test_data/test_data_arrays.py | 6 +- tests/test_data/test_datasets.py | 5 +- tests/test_data/test_monitor_data.py | 54 ++- tests/test_data/test_sim_data.py | 25 +- tests/test_package/test_config.py | 3 +- tests/test_package/test_convert.py | 1 - tests/test_package/test_log.py | 6 +- tests/test_package/test_main.py | 2 +- tests/test_package/test_material_library.py | 13 +- .../test_package/test_parametric_variants.py | 13 +- tests/test_plugins/autograd/test_functions.py | 9 +- .../test_plugins/autograd/test_primitives.py | 1 - .../terminal_component_modeler_def.py | 3 +- tests/test_plugins/test_adjoint.py | 82 +++-- tests/test_plugins/test_component_modeler.py | 16 +- tests/test_plugins/test_design.py | 11 +- tests/test_plugins/test_dispersion_fitter.py | 13 +- tests/test_plugins/test_invdes.py | 12 +- tests/test_plugins/test_microwave.py | 15 +- tests/test_plugins/test_mode_solver.py | 18 +- tests/test_plugins/test_polyslab.py | 5 +- tests/test_plugins/test_resonance_finder.py | 6 +- .../test_terminal_component_modeler.py | 12 +- tests/test_plugins/test_waveguide.py | 4 +- tests/test_web/test_env.py | 1 + tests/test_web/test_material_fitter.py | 7 +- tests/test_web/test_tidy3d_folder.py | 4 +- .../test_web/test_tidy3d_material_library.py | 5 +- tests/test_web/test_tidy3d_task.py | 5 +- tests/test_web/test_webapi.py | 46 ++- tests/test_web/test_webapi_eme.py | 22 +- tests/test_web/test_webapi_heat.py | 22 +- tests/utils.py | 13 +- tidy3d/__init__.py | 347 +++++++++++------- tidy3d/__main__.py | 2 +- tidy3d/components/apodization.py | 4 +- tidy3d/components/autograd.py | 12 +- tidy3d/components/base.py | 30 +- .../components/base_sim/data/monitor_data.py | 3 +- tidy3d/components/base_sim/data/sim_data.py | 15 +- tidy3d/components/base_sim/monitor.py | 7 +- tidy3d/components/base_sim/simulation.py | 24 +- tidy3d/components/base_sim/source.py | 3 +- tidy3d/components/bc_placement.py | 6 +- tidy3d/components/boundary.py | 15 +- tidy3d/components/data/data_array.py | 14 +- tidy3d/components/data/dataset.py | 46 ++- tidy3d/components/data/monitor_data.py | 94 +++-- tidy3d/components/data/sim_data.py | 40 +- tidy3d/components/data/validators.py | 4 +- tidy3d/components/eme/data/dataset.py | 11 +- tidy3d/components/eme/data/monitor_data.py | 7 +- tidy3d/components/eme/data/sim_data.py | 17 +- tidy3d/components/eme/grid.py | 12 +- tidy3d/components/eme/monitor.py | 8 +- tidy3d/components/eme/simulation.py | 33 +- tidy3d/components/eme/sweep.py | 2 +- tidy3d/components/field_projection.py | 45 ++- tidy3d/components/geometry/base.py | 58 ++- tidy3d/components/geometry/mesh.py | 20 +- tidy3d/components/geometry/polyslab.py | 33 +- tidy3d/components/geometry/primitives.py | 10 +- tidy3d/components/geometry/triangulation.py | 2 +- tidy3d/components/geometry/utils.py | 11 +- tidy3d/components/geometry/utils_2d.py | 7 +- tidy3d/components/grid/grid.py | 12 +- tidy3d/components/grid/grid_spec.py | 16 +- tidy3d/components/grid/mesher.py | 22 +- tidy3d/components/heat/boundary.py | 3 +- tidy3d/components/heat/data/monitor_data.py | 17 +- tidy3d/components/heat/data/sim_data.py | 16 +- tidy3d/components/heat/grid.py | 5 +- tidy3d/components/heat/monitor.py | 6 +- tidy3d/components/heat/simulation.py | 55 +-- tidy3d/components/heat/source.py | 10 +- tidy3d/components/heat_spec.py | 4 +- tidy3d/components/lumped_element.py | 16 +- tidy3d/components/medium.py | 79 ++-- tidy3d/components/mode.py | 11 +- tidy3d/components/monitor.py | 36 +- tidy3d/components/parameter_perturbation.py | 29 +- tidy3d/components/scene.py | 62 ++-- tidy3d/components/simulation.py | 126 ++++--- tidy3d/components/source.py | 53 ++- tidy3d/components/structure.py | 21 +- tidy3d/components/subpixel_spec.py | 3 +- tidy3d/components/time.py | 11 +- tidy3d/components/time_modulation.py | 12 +- tidy3d/components/transformation.py | 6 +- tidy3d/components/types.py | 7 +- tidy3d/components/types_extra.py | 1 + tidy3d/components/validators.py | 10 +- tidy3d/components/viz.py | 14 +- tidy3d/config.py | 2 +- tidy3d/log.py | 5 +- tidy3d/material_library/material_library.py | 5 +- .../material_library/parametric_materials.py | 9 +- tidy3d/packaging.py | 12 +- tidy3d/plugins/adjoint/__init__.py | 14 +- tidy3d/plugins/adjoint/components/__init__.py | 14 +- tidy3d/plugins/adjoint/components/base.py | 8 +- .../adjoint/components/data/data_array.py | 13 +- .../adjoint/components/data/dataset.py | 3 +- .../adjoint/components/data/monitor_data.py | 41 ++- .../adjoint/components/data/sim_data.py | 14 +- tidy3d/plugins/adjoint/components/geometry.py | 30 +- tidy3d/plugins/adjoint/components/medium.py | 20 +- .../plugins/adjoint/components/simulation.py | 39 +- .../plugins/adjoint/components/structure.py | 19 +- tidy3d/plugins/adjoint/components/types.py | 3 +- tidy3d/plugins/adjoint/utils/filter.py | 4 +- tidy3d/plugins/adjoint/utils/penalty.py | 4 +- tidy3d/plugins/adjoint/web.py | 17 +- tidy3d/plugins/autograd/functions.py | 2 +- tidy3d/plugins/autograd/invdes/__init__.py | 4 +- tidy3d/plugins/autograd/invdes/filters.py | 2 +- .../autograd/invdes/parametrizations.py | 2 +- tidy3d/plugins/autograd/invdes/penalties.py | 2 +- tidy3d/plugins/autograd/utilities.py | 2 +- tidy3d/plugins/design/__init__.py | 4 +- tidy3d/plugins/design/design.py | 5 +- tidy3d/plugins/design/method.py | 6 +- tidy3d/plugins/design/parameter.py | 2 +- tidy3d/plugins/design/result.py | 4 +- tidy3d/plugins/dispersion/__init__.py | 2 +- tidy3d/plugins/dispersion/fit.py | 24 +- tidy3d/plugins/dispersion/fit_fast.py | 17 +- tidy3d/plugins/dispersion/web.py | 22 +- tidy3d/plugins/invdes/__init__.py | 7 +- tidy3d/plugins/invdes/design.py | 5 +- tidy3d/plugins/invdes/optimizer.py | 9 +- tidy3d/plugins/invdes/penalty.py | 6 +- tidy3d/plugins/invdes/region.py | 1 - tidy3d/plugins/invdes/result.py | 3 +- tidy3d/plugins/invdes/transformation.py | 4 +- tidy3d/plugins/invdes/utils.py | 5 +- tidy3d/plugins/invdes/validators.py | 2 + tidy3d/plugins/microwave/__init__.py | 14 +- .../microwave/custom_path_integrals.py | 17 +- .../plugins/microwave/impedance_calculator.py | 17 +- tidy3d/plugins/microwave/models/__init__.py | 3 +- .../microwave/models/coupled_microstrip.py | 1 + tidy3d/plugins/microwave/path_integrals.py | 18 +- tidy3d/plugins/mode/mode_solver.py | 42 ++- tidy3d/plugins/mode/solver.py | 6 +- tidy3d/plugins/resonance/resonance.py | 8 +- tidy3d/plugins/smatrix/__init__.py | 7 +- .../smatrix/component_modelers/base.py | 16 +- .../smatrix/component_modelers/modal.py | 16 +- .../smatrix/component_modelers/terminal.py | 17 +- tidy3d/plugins/smatrix/ports/base_lumped.py | 17 +- .../plugins/smatrix/ports/coaxial_lumped.py | 17 +- tidy3d/plugins/smatrix/ports/modal.py | 2 +- .../smatrix/ports/rectangular_lumped.py | 18 +- tidy3d/plugins/smatrix/smatrix.py | 2 +- .../waveguide/rectangular_dielectric.py | 19 +- tidy3d/updater.py | 11 +- tidy3d/web/__init__.py | 39 +- tidy3d/web/api/asynchronous.py | 4 +- tidy3d/web/api/autograd/autograd.py | 17 +- tidy3d/web/api/connect_util.py | 6 +- tidy3d/web/api/container.py | 21 +- tidy3d/web/api/material_fitter.py | 2 +- tidy3d/web/api/material_libray.py | 2 +- tidy3d/web/api/mode.py | 19 +- tidy3d/web/api/tidy3d_stub.py | 24 +- tidy3d/web/api/webapi.py | 25 +- tidy3d/web/cli/app.py | 4 +- tidy3d/web/cli/develop/__init__.py | 23 +- tidy3d/web/cli/develop/documentation.py | 4 +- tidy3d/web/cli/develop/packaging.py | 5 +- tidy3d/web/cli/develop/tests.py | 3 +- tidy3d/web/cli/develop/utils.py | 1 + tidy3d/web/cli/migrate.py | 4 +- tidy3d/web/core/environment.py | 5 +- tidy3d/web/core/http_util.py | 21 +- tidy3d/web/core/s3utils.py | 20 +- tidy3d/web/core/task_core.py | 16 +- tidy3d/web/core/task_info.py | 2 +- tidy3d/web/core/types.py | 2 +- 225 files changed, 1926 insertions(+), 1595 deletions(-) diff --git a/docs/_ext/custom-sitemap.py b/docs/_ext/custom-sitemap.py index e28e96f66e..aec6a5d5cb 100644 --- a/docs/_ext/custom-sitemap.py +++ b/docs/_ext/custom-sitemap.py @@ -1,5 +1,5 @@ -import xml.etree.ElementTree as ET import re +import xml.etree.ElementTree as ET def match_exclude_url(app, url): diff --git a/docs/conf.py b/docs/conf.py index 552ebff366..d020264b78 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -20,8 +20,9 @@ import datetime import os import re -import sys import subprocess +import sys + import tidy3d # import sphinxcontrib.divparams as divparams diff --git a/docs/generate_doc.py b/docs/generate_doc.py index bae5ea2a12..0def305f87 100644 --- a/docs/generate_doc.py +++ b/docs/generate_doc.py @@ -1,10 +1,14 @@ # Generate documentation for Material Library (Python) import numpy as np + from tidy3d import material_library as lib from tidy3d.constants import C_0 -from tidy3d.material_library.material_library import MaterialItemUniaxial, MaterialItem -from tidy3d.material_library.material_library import MaterialItem2D +from tidy3d.material_library.material_library import ( + MaterialItem, + MaterialItem2D, + MaterialItemUniaxial, +) LOW_LOSS_THRESHOLD = 2e-5 diff --git a/poetry.lock b/poetry.lock index 3eb003be84..4364370244 100644 --- a/poetry.lock +++ b/poetry.lock @@ -341,17 +341,17 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "boto3" -version = "1.34.116" +version = "1.34.117" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.34.116-py3-none-any.whl", hash = "sha256:e7f5ab2d1f1b90971a2b9369760c2c6bae49dae98c084a5c3f5c78e3968ace15"}, - {file = "boto3-1.34.116.tar.gz", hash = "sha256:53cb8aeb405afa1cd2b25421e27a951aeb568026675dec020587861fac96ac87"}, + {file = "boto3-1.34.117-py3-none-any.whl", hash = "sha256:1506589e30566bbb2f4997b60968ff7d4ef8a998836c31eedd36437ac3b7408a"}, + {file = "boto3-1.34.117.tar.gz", hash = "sha256:c8a383b904d6faaf7eed0c06e31b423db128e4c09ce7bd2afc39d1cd07030a51"}, ] [package.dependencies] -botocore = ">=1.34.116,<1.35.0" +botocore = ">=1.34.117,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -360,13 +360,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.116" +version = "1.34.117" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.34.116-py3-none-any.whl", hash = "sha256:ec4d42c816e9b2d87a2439ad277e7dda16a4a614ef6839cf66f4c1a58afa547c"}, - {file = "botocore-1.34.116.tar.gz", hash = "sha256:269cae7ba99081519a9f87d7298e238d9e68ba94eb4f8ddfa906224c34cb8b6c"}, + {file = "botocore-1.34.117-py3-none-any.whl", hash = "sha256:26a431997f882bcdd1e835f44c24b2a1752b1c4e5183c2ce62999ce95d518d6c"}, + {file = "botocore-1.34.117.tar.gz", hash = "sha256:4637ca42e6c51aebc4d9a2d92f97bf4bdb042e3f7985ff31a659a11e4c170e73"}, ] [package.dependencies] @@ -430,13 +430,13 @@ files = [ [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.6.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, + {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, ] [[package]] @@ -859,13 +859,13 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "dask" -version = "2024.5.1" +version = "2024.5.2" description = "Parallel PyData with Task Scheduling" optional = false python-versions = ">=3.9" files = [ - {file = "dask-2024.5.1-py3-none-any.whl", hash = "sha256:af1cadd1fd1d1d44600ff5de43dd029e5668fdf87422131f4e3e3aa2a6a63555"}, - {file = "dask-2024.5.1.tar.gz", hash = "sha256:e071fda67031c314569e37ca70b3e88bb30f1d91ff8ee4122b541845847cc264"}, + {file = "dask-2024.5.2-py3-none-any.whl", hash = "sha256:acc2cfe41d9e0151c216ac40396dbe34df13bc3d8c51dfece190349e4f2243af"}, + {file = "dask-2024.5.2.tar.gz", hash = "sha256:5c9722c44d0195e78b6e54197aa3302e6fcaaac2310fd3014560bcb86253dcb3"}, ] [package.dependencies] @@ -883,7 +883,7 @@ array = ["numpy (>=1.21)"] complete = ["dask[array,dataframe,diagnostics,distributed]", "lz4 (>=4.3.2)", "pyarrow (>=7.0)", "pyarrow-hotfix"] dataframe = ["dask-expr (>=1.1,<1.2)", "dask[array]", "pandas (>=1.3)"] diagnostics = ["bokeh (>=2.4.2)", "jinja2 (>=2.10.3)"] -distributed = ["distributed (==2024.5.1)"] +distributed = ["distributed (==2024.5.2)"] test = ["pandas[test]", "pre-commit", "pytest", "pytest-cov", "pytest-rerunfailures", "pytest-timeout", "pytest-xdist"] [[package]] @@ -1056,13 +1056,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastcore" -version = "1.5.42" +version = "1.5.43" description = "Python supercharged for fastai development" optional = true python-versions = ">=3.7" files = [ - {file = "fastcore-1.5.42-py3-none-any.whl", hash = "sha256:9f749a7aa4aeff37446bf114edafcac277ffb12cfef29f8219d5928b447e5486"}, - {file = "fastcore-1.5.42.tar.gz", hash = "sha256:3fcb93402ac4b7f3f0e4beb4ca66c708fe7d42cce1e2a3116f2e9162e09aeff6"}, + {file = "fastcore-1.5.43-py3-none-any.whl", hash = "sha256:f1b6280f7f9e8d2d5f3659ff55f1e34afbf44e75a3818e22bc97fc36678371d4"}, + {file = "fastcore-1.5.43.tar.gz", hash = "sha256:b5ab49f4afd6656d262f4ba2f0af2a176c9636fab33383844de320567b73ebd0"}, ] [package.dependencies] @@ -1133,53 +1133,53 @@ testing = ["black[jupyter] (==23.7.0)", "clu", "clu (<=0.0.9)", "einops", "gymna [[package]] name = "fonttools" -version = "4.52.4" +version = "4.53.0" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.52.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb8cd6559f0ae3a8f5e146f80ab2a90ad0325a759be8d48ee82758a0b89fa0aa"}, - {file = "fonttools-4.52.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5ecb88318ff249bd2a715e7aec36774ce7ae3441128007ef72a39a60601f4a8f"}, - {file = "fonttools-4.52.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9a22cf1adaae7b2ba2ed7d8651a4193a4f348744925b4b740e6b38a94599c5b"}, - {file = "fonttools-4.52.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8873d6edd1dae5c088dd3d61c9fd4dd80c827c486fa224d368233e7f33dc98af"}, - {file = "fonttools-4.52.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:73ba38b98c012957940a04d9eb5439b42565ac892bba8cfc32e10d88e73921fe"}, - {file = "fonttools-4.52.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9725687db3c1cef13c0f40b380c3c15bea0113f4d0231b204d58edd5f2a53d90"}, - {file = "fonttools-4.52.4-cp310-cp310-win32.whl", hash = "sha256:9180775c9535389a665cae7c5282f8e07754beabf59b66aeba7f6bfeb32a3652"}, - {file = "fonttools-4.52.4-cp310-cp310-win_amd64.whl", hash = "sha256:46cc5d06ee05fd239c45d7935aaffd060ee773a88b97e901df50478247472643"}, - {file = "fonttools-4.52.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d272c7e173c3085308345ccc7fb2ad6ce7f415d777791dd6ce4e8140e354d09c"}, - {file = "fonttools-4.52.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:21921e5855c399d10ddfc373538b425cabcf8b3258720b51450909e108896450"}, - {file = "fonttools-4.52.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52f6001814ec5e0c961cabe89642f7e8d7e07892b565057aa526569b9ebb711c"}, - {file = "fonttools-4.52.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b0b9eb0f55dce9c7278ad4175f1cbaed23b799dce5ecc20e3213da241584140"}, - {file = "fonttools-4.52.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:70d87f2099006304d33438bdaa5101953b7e22e23a93b1c7b7ed0f32ff44b423"}, - {file = "fonttools-4.52.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e176249292eccd89f81d39f514f2b5e8c75dfc9cef8653bdc3021d06697e9eff"}, - {file = "fonttools-4.52.4-cp311-cp311-win32.whl", hash = "sha256:bb7d206fa5ba6e082ba5d5e1b7107731029fc3a55c71c48de65121710d817986"}, - {file = "fonttools-4.52.4-cp311-cp311-win_amd64.whl", hash = "sha256:346d08ff92e577b2dc5a0c228487667d23fe2da35a8b9a8bba22c2b6ba8be21c"}, - {file = "fonttools-4.52.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d2cc7906bc0afdd2689aaf88b910307333b1f936262d1d98f25dbf8a5eb2e829"}, - {file = "fonttools-4.52.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:00d9abf4b400f98fb895566eb298f60432b4b29048e3dc02807427b09a06604e"}, - {file = "fonttools-4.52.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b419207e53db1599b3d385afd4bca6692c219d53732890d0814a2593104d0e2"}, - {file = "fonttools-4.52.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf694159528022daa71b1777cb6ec9e0ebbdd29859f3e9c845826cafaef4ca29"}, - {file = "fonttools-4.52.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9a5d1b0475050056d2e3bc378014f2ea2230e8ae434eeac8dfb182aa8efaf642"}, - {file = "fonttools-4.52.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4c3ad89204c2d7f419436f1d6fde681b070c5e20b888beb57ccf92f640628cc9"}, - {file = "fonttools-4.52.4-cp312-cp312-win32.whl", hash = "sha256:1dc626de4b204d025d029e646bae8fdbf5acd9217158283a567f4b523fda3bae"}, - {file = "fonttools-4.52.4-cp312-cp312-win_amd64.whl", hash = "sha256:309b617942041073ffa96090d320b99d75648ed16e0c67fb1aa7788e06c834de"}, - {file = "fonttools-4.52.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8b186cd6b8844f6cf04a7e0a174bc3649d3deddbfc10dc59846a4381f796d348"}, - {file = "fonttools-4.52.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9ed23a03b7d9f0e29ca0679eafe5152aeccb0580312a3fc36f0662e178b4791b"}, - {file = "fonttools-4.52.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89b53386214197bd5b3e3c753895bad691de84726ced3c222a59cde1dd12d57b"}, - {file = "fonttools-4.52.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7467161f1eed557dbcec152d5ee95540200b1935709fa73307da16bc0b7ca361"}, - {file = "fonttools-4.52.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b4cba644e2515d685d4ee3ca2fbb5d53930a0e9ec2cf332ed704dc341b145878"}, - {file = "fonttools-4.52.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:890e7a657574610330e42dd1e38d3b9e0a8cb0eff3da080f80995460a256d3dd"}, - {file = "fonttools-4.52.4-cp38-cp38-win32.whl", hash = "sha256:7dccf4666f716e5e0753f0fa28dad2f4431154c87747bc781c838b8a5dca990e"}, - {file = "fonttools-4.52.4-cp38-cp38-win_amd64.whl", hash = "sha256:a791f002d1b717268235cfae7e4957b7fd132e92e2c5400e521bf191f1b3a9a5"}, - {file = "fonttools-4.52.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:05e4291db6af66f466a203d9922e4c1d3e18ef16868f76f10b00e2c3b9814df2"}, - {file = "fonttools-4.52.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a64e72d2c144630e017ac9c1c416ddf8ac43bef9a083bf81fe08c0695f0baa95"}, - {file = "fonttools-4.52.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebb183ed8b789cece0bd6363121913fb6da4034af89a2fa5408e42a1592889a8"}, - {file = "fonttools-4.52.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4daf2751a98c69d9620717826ed6c5743b662ef0ae7bb33dc6c205425e48eba"}, - {file = "fonttools-4.52.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:15efb2ba4b8c2d012ee0bb7a850c2e4780c530cc83ec8e843b2a97f8b3a5fd4b"}, - {file = "fonttools-4.52.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:35af630404223273f1d7acd4761f399131c62820366f53eac029337069f5826a"}, - {file = "fonttools-4.52.4-cp39-cp39-win32.whl", hash = "sha256:d0184aa88865339d96f7f452e8c5b621186ef7638744d78bf9b775d67e206819"}, - {file = "fonttools-4.52.4-cp39-cp39-win_amd64.whl", hash = "sha256:e03dae26084bb3632b4a77b1cd0419159d2226911aff6dc4c7e3058df68648c6"}, - {file = "fonttools-4.52.4-py3-none-any.whl", hash = "sha256:95e8a5975d08d0b624a14eec0f987e204ad81b480e24c5436af99170054434b8"}, - {file = "fonttools-4.52.4.tar.gz", hash = "sha256:859399b7adc8ac067be8e5c80ef4bb2faddff97e9b40896a9de75606a43d0469"}, + {file = "fonttools-4.53.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:52a6e0a7a0bf611c19bc8ec8f7592bdae79c8296c70eb05917fd831354699b20"}, + {file = "fonttools-4.53.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:099634631b9dd271d4a835d2b2a9e042ccc94ecdf7e2dd9f7f34f7daf333358d"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40013572bfb843d6794a3ce076c29ef4efd15937ab833f520117f8eccc84fd6"}, + {file = "fonttools-4.53.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:715b41c3e231f7334cbe79dfc698213dcb7211520ec7a3bc2ba20c8515e8a3b5"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:74ae2441731a05b44d5988d3ac2cf784d3ee0a535dbed257cbfff4be8bb49eb9"}, + {file = "fonttools-4.53.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:95db0c6581a54b47c30860d013977b8a14febc206c8b5ff562f9fe32738a8aca"}, + {file = "fonttools-4.53.0-cp310-cp310-win32.whl", hash = "sha256:9cd7a6beec6495d1dffb1033d50a3f82dfece23e9eb3c20cd3c2444d27514068"}, + {file = "fonttools-4.53.0-cp310-cp310-win_amd64.whl", hash = "sha256:daaef7390e632283051e3cf3e16aff2b68b247e99aea916f64e578c0449c9c68"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a209d2e624ba492df4f3bfad5996d1f76f03069c6133c60cd04f9a9e715595ec"}, + {file = "fonttools-4.53.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4f520d9ac5b938e6494f58a25c77564beca7d0199ecf726e1bd3d56872c59749"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eceef49f457253000e6a2d0f7bd08ff4e9fe96ec4ffce2dbcb32e34d9c1b8161"}, + {file = "fonttools-4.53.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa1f3e34373aa16045484b4d9d352d4c6b5f9f77ac77a178252ccbc851e8b2ee"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:28d072169fe8275fb1a0d35e3233f6df36a7e8474e56cb790a7258ad822b6fd6"}, + {file = "fonttools-4.53.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a2a6ba400d386e904fd05db81f73bee0008af37799a7586deaa4aef8cd5971e"}, + {file = "fonttools-4.53.0-cp311-cp311-win32.whl", hash = "sha256:bb7273789f69b565d88e97e9e1da602b4ee7ba733caf35a6c2affd4334d4f005"}, + {file = "fonttools-4.53.0-cp311-cp311-win_amd64.whl", hash = "sha256:9fe9096a60113e1d755e9e6bda15ef7e03391ee0554d22829aa506cdf946f796"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d8f191a17369bd53a5557a5ee4bab91d5330ca3aefcdf17fab9a497b0e7cff7a"}, + {file = "fonttools-4.53.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:93156dd7f90ae0a1b0e8871032a07ef3178f553f0c70c386025a808f3a63b1f4"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bff98816cb144fb7b85e4b5ba3888a33b56ecef075b0e95b95bcd0a5fbf20f06"}, + {file = "fonttools-4.53.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:973d030180eca8255b1bce6ffc09ef38a05dcec0e8320cc9b7bcaa65346f341d"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4ee5a24e281fbd8261c6ab29faa7fd9a87a12e8c0eed485b705236c65999109"}, + {file = "fonttools-4.53.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd5bc124fae781a4422f61b98d1d7faa47985f663a64770b78f13d2c072410c2"}, + {file = "fonttools-4.53.0-cp312-cp312-win32.whl", hash = "sha256:a239afa1126b6a619130909c8404070e2b473dd2b7fc4aacacd2e763f8597fea"}, + {file = "fonttools-4.53.0-cp312-cp312-win_amd64.whl", hash = "sha256:45b4afb069039f0366a43a5d454bc54eea942bfb66b3fc3e9a2c07ef4d617380"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:93bc9e5aaa06ff928d751dc6be889ff3e7d2aa393ab873bc7f6396a99f6fbb12"}, + {file = "fonttools-4.53.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2367d47816cc9783a28645bc1dac07f8ffc93e0f015e8c9fc674a5b76a6da6e4"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:907fa0b662dd8fc1d7c661b90782ce81afb510fc4b7aa6ae7304d6c094b27bce"}, + {file = "fonttools-4.53.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e0ad3c6ea4bd6a289d958a1eb922767233f00982cf0fe42b177657c86c80a8f"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:73121a9b7ff93ada888aaee3985a88495489cc027894458cb1a736660bdfb206"}, + {file = "fonttools-4.53.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ee595d7ba9bba130b2bec555a40aafa60c26ce68ed0cf509983e0f12d88674fd"}, + {file = "fonttools-4.53.0-cp38-cp38-win32.whl", hash = "sha256:fca66d9ff2ac89b03f5aa17e0b21a97c21f3491c46b583bb131eb32c7bab33af"}, + {file = "fonttools-4.53.0-cp38-cp38-win_amd64.whl", hash = "sha256:31f0e3147375002aae30696dd1dc596636abbd22fca09d2e730ecde0baad1d6b"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7d6166192dcd925c78a91d599b48960e0a46fe565391c79fe6de481ac44d20ac"}, + {file = "fonttools-4.53.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef50ec31649fbc3acf6afd261ed89d09eb909b97cc289d80476166df8438524d"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f193f060391a455920d61684a70017ef5284ccbe6023bb056e15e5ac3de11d1"}, + {file = "fonttools-4.53.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9f09ff17f947392a855e3455a846f9855f6cf6bec33e9a427d3c1d254c712f"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0c555e039d268445172b909b1b6bdcba42ada1cf4a60e367d68702e3f87e5f64"}, + {file = "fonttools-4.53.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4788036201c908079e89ae3f5399b33bf45b9ea4514913f4dbbe4fac08efe0"}, + {file = "fonttools-4.53.0-cp39-cp39-win32.whl", hash = "sha256:d1a24f51a3305362b94681120c508758a88f207fa0a681c16b5a4172e9e6c7a9"}, + {file = "fonttools-4.53.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e677bfb2b4bd0e5e99e0f7283e65e47a9814b0486cb64a41adf9ef110e078f2"}, + {file = "fonttools-4.53.0-py3-none-any.whl", hash = "sha256:6b4f04b1fbc01a3569d63359f2227c89ab294550de277fd09d8fca6185669fa4"}, + {file = "fonttools-4.53.0.tar.gz", hash = "sha256:c93ed66d32de1559b6fc348838c7572d5c0ac1e4a258e76763a5caddd8944002"}, ] [package.extras] @@ -2635,8 +2635,8 @@ files = [ numpy = [ {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.23.3", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, - {version = ">1.20", markers = "python_version < \"3.10\""}, {version = ">=1.21.2", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">1.20", markers = "python_version < \"3.10\""}, ] [package.extras] @@ -3054,13 +3054,13 @@ test = ["dm-tree (>=0.1.7)", "flax (>=0.5.3)"] [[package]] name = "orbax-checkpoint" -version = "0.5.14" +version = "0.5.15" description = "Orbax Checkpoint" optional = true python-versions = ">=3.9" files = [ - {file = "orbax_checkpoint-0.5.14-py3-none-any.whl", hash = "sha256:78669617821081f5e455d50bf576891f1b60ca018262502584b6febc65b4881e"}, - {file = "orbax_checkpoint-0.5.14.tar.gz", hash = "sha256:97a42597fa2fcbe7de914decd6aefbf8303216f3a66af02ab0c5a0ca0811facd"}, + {file = "orbax_checkpoint-0.5.15-py3-none-any.whl", hash = "sha256:658dd89bc925cecc584d89eaa19af9a7e16e3371377907eb713fbd59b85262e4"}, + {file = "orbax_checkpoint-0.5.15.tar.gz", hash = "sha256:15195e8d1b381b56f23a62a25599a3644f5d08655fa64f60bb1b938b8ffe7ef3"}, ] [package.dependencies] @@ -5280,13 +5280,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.12.0" +version = "4.12.1" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.12.0-py3-none-any.whl", hash = "sha256:b349c66bea9016ac22978d800cfff206d5f9816951f12a7d0ec5578b0a819594"}, - {file = "typing_extensions-4.12.0.tar.gz", hash = "sha256:8cbcdc8606ebcb0d95453ad7dc5065e6237b6aa230a31e81d0f440c30fed5fd8"}, + {file = "typing_extensions-4.12.1-py3-none-any.whl", hash = "sha256:6024b58b69089e5a89c347397254e35f1bf02a907728ec7fee9bf0fe837d203a"}, + {file = "typing_extensions-4.12.1.tar.gz", hash = "sha256:915f5e35ff76f56588223f15fdd5938f9a1cf9195c0de25130c627e4d597f6d1"}, ] [[package]] @@ -5512,21 +5512,21 @@ viz = ["matplotlib", "nc-time-axis", "seaborn"] [[package]] name = "zipp" -version = "3.19.0" +version = "3.19.1" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.19.0-py3-none-any.whl", hash = "sha256:96dc6ad62f1441bcaccef23b274ec471518daf4fbbc580341204936a5a3dddec"}, - {file = "zipp-3.19.0.tar.gz", hash = "sha256:952df858fb3164426c976d9338d3961e8e8b3758e2e059e0f754b8c4262625ee"}, + {file = "zipp-3.19.1-py3-none-any.whl", hash = "sha256:2828e64edb5386ea6a52e7ba7cdb17bb30a73a858f5eb6eb93d8d36f5ea26091"}, + {file = "zipp-3.19.1.tar.gz", hash = "sha256:35427f6d5594f4acf82d25541438348c26736fa9b3afa2754bcd63cdb99d8e8f"}, ] [package.extras] -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", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -dev = ["bump-my-version", "cma", "coverage", "devsim", "dill", "gdspy", "gdstk", "gdstk", "grcwa", "ipython", "ipython", "jax", "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", "scikit-rf", "signac", "sphinx", "sphinx-book-theme", "sphinx-copybutton", "sphinx-favicon", "sphinx-notfound-page", "sphinx-sitemap", "sphinx-tabs", "sphinxemoji", "tmm", "tox", "trimesh", "vtk"] +dev = ["bump-my-version", "cma", "coverage", "devsim", "dill", "gdspy", "gdstk", "grcwa", "ipython", "ipython", "jax", "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", "scikit-rf", "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"] @@ -5538,4 +5538,4 @@ vtk = ["vtk"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0.0" -content-hash = "8dcce97f48b8ea77d687c27864cabeef4961a6c64d3503a0d64302a667c9869b" +content-hash = "88ab67fd9fde40fc975487bcf4b14c0791432d2048e713c78fcab240bc29e5ea" diff --git a/pyproject.toml b/pyproject.toml index 510af20ab0..52ab3e943d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -117,7 +117,6 @@ dev = [ 'divparams', 'gdspy', 'gdstk', - 'gdstk', 'grcwa', 'ipython', 'ipython', @@ -220,6 +219,7 @@ typing-modules = [ "tidy3d.components.types", ] # without this Literal["something fails"] select = [ + "I", # isort "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes diff --git a/scripts/make_script.py b/scripts/make_script.py index 096ec2edd5..3a7877f60f 100644 --- a/scripts/make_script.py +++ b/scripts/make_script.py @@ -8,12 +8,12 @@ """ +import argparse import os -import sys import re -import argparse -import tempfile import subprocess +import sys +import tempfile import tidy3d as td diff --git a/scripts/sample.py b/scripts/sample.py index a516048a6b..1949e8f2bf 100644 --- a/scripts/sample.py +++ b/scripts/sample.py @@ -1,6 +1,6 @@ """Generates sample simulation json and h5 files in the tests/sims folder""" -from os.path import join import sys +from os.path import join sys.path.append("tests") diff --git a/scripts/schema.py b/scripts/schema.py index 9ddbadf3cb..b3e5fa962f 100644 --- a/scripts/schema.py +++ b/scripts/schema.py @@ -1,6 +1,7 @@ """Generates schema for Simulation, saves it to file.""" import json + import tidy3d FNAME = "tidy3d/schema.json" diff --git a/tests/_test_data/_test_datasets_no_vtk.py b/tests/_test_data/_test_datasets_no_vtk.py index c6d4990e38..d7fb81eba2 100644 --- a/tests/_test_data/_test_datasets_no_vtk.py +++ b/tests/_test_data/_test_datasets_no_vtk.py @@ -1,9 +1,11 @@ """Tests tidy3d/components/data/dataset.py""" -import pytest import builtins -from ..test_data.test_datasets import test_triangular_dataset as _test_triangular_dataset + +import pytest + from ..test_data.test_datasets import test_tetrahedral_dataset as _test_tetrahedral_dataset +from ..test_data.test_datasets import test_triangular_dataset as _test_triangular_dataset @pytest.fixture diff --git a/tests/_test_local/_test_adjoint_performance.py b/tests/_test_local/_test_adjoint_performance.py index 09c7a4d27c..616065460c 100644 --- a/tests/_test_local/_test_adjoint_performance.py +++ b/tests/_test_local/_test_adjoint_performance.py @@ -1,29 +1,25 @@ -import pytest -import numpy as np import sys -from memory_profiler import profile -import matplotlib.pyplot as plt import time -from jax import grad - +import matplotlib.pyplot as plt +import numpy as np +import pytest import tidy3d as td - +from jax import grad +from memory_profiler import profile +from tidy3d.plugins.adjoint.components.data.data_array import JaxDataArray +from tidy3d.plugins.adjoint.components.data.dataset import JaxPermittivityDataset from tidy3d.plugins.adjoint.components.geometry import JaxBox from tidy3d.plugins.adjoint.components.medium import JaxCustomMedium -from tidy3d.plugins.adjoint.components.structure import JaxStructure from tidy3d.plugins.adjoint.components.simulation import JaxSimulation -from tidy3d.plugins.adjoint.components.data.data_array import JaxDataArray -from tidy3d.plugins.adjoint.components.data.dataset import JaxPermittivityDataset +from tidy3d.plugins.adjoint.components.structure import JaxStructure from tidy3d.plugins.adjoint.web import run from ..utils import run_emulated - sys.path.append("/users/twhughes/Documents/Flexcompute/tidy3d-core") from tidy3d_backend.utils import Profile - EPS = 2.0 SIZE = (1.0, 2.0, 3.0) CENTER = (2.0, -1.0, 1.0) diff --git a/tests/_test_local/_test_adjoint_performance_multi.py b/tests/_test_local/_test_adjoint_performance_multi.py index 30f445a4b8..1ea12222e3 100644 --- a/tests/_test_local/_test_adjoint_performance_multi.py +++ b/tests/_test_local/_test_adjoint_performance_multi.py @@ -1,15 +1,14 @@ -import pytest -from memory_profiler import profile -import jax +import cProfile +import jax import jax.numpy as jnp -from ..utils import run_emulated - +import pytest import tidy3d as td import tidy3d.plugins.adjoint as tda +from memory_profiler import profile from tidy3d.plugins.adjoint.web import run_local as run -import cProfile +from ..utils import run_emulated # name of the output monitor used in tests MNT_NAME = "field" diff --git a/tests/_test_local/_test_data_performance.py b/tests/_test_local/_test_data_performance.py index c51c3b1dfd..1db021e74b 100644 --- a/tests/_test_local/_test_data_performance.py +++ b/tests/_test_local/_test_data_performance.py @@ -1,17 +1,16 @@ -import numpy as np import os import sys -from memory_profiler import profile -from tidy3d.components.data.sim_data import SimulationData -from tidy3d.components.data.monitor_data import FieldData +import numpy as np +import tidy3d as td +from memory_profiler import profile from tidy3d.components.data.data_array import ScalarFieldDataArray +from tidy3d.components.data.monitor_data import FieldData +from tidy3d.components.data.sim_data import SimulationData +from tidy3d.components.grid.grid_spec import GridSpec from tidy3d.components.monitor import FieldMonitor from tidy3d.components.simulation import Simulation -from tidy3d.components.source import PointDipole, GaussianPulse -from tidy3d.components.grid.grid_spec import GridSpec - -import tidy3d as td +from tidy3d.components.source import GaussianPulse, PointDipole sys.path.append("/users/twhughes/Documents/Flexcompute/tidy3d-core") from tidy3d_backend.utils import Profile diff --git a/tests/_test_local/_test_fit_web.py b/tests/_test_local/_test_fit_web.py index d60785a6f6..92c06b7963 100644 --- a/tests/_test_local/_test_fit_web.py +++ b/tests/_test_local/_test_fit_web.py @@ -1,7 +1,7 @@ -import numpy as np from math import isclose -from tidy3d.plugins.fitter import StableDispersionFitter, AdvancedFitterParam +import numpy as np +from tidy3d.plugins.fitter import AdvancedFitterParam, StableDispersionFitter np.random.seed(4) ATOL = 1e-50 diff --git a/tests/_test_local/_test_plugins_web.py b/tests/_test_local/_test_plugins_web.py index 0926095225..cbf9b2d4ce 100644 --- a/tests/_test_local/_test_plugins_web.py +++ b/tests/_test_local/_test_plugins_web.py @@ -1,6 +1,5 @@ import numpy as np - -from tidy3d.plugins.fitter import StableDispersionFitter, DispersionFitter +from tidy3d.plugins.fitter import DispersionFitter, StableDispersionFitter def test_dispersion_load_list(): diff --git a/tests/_test_local/_test_web.py b/tests/_test_local/_test_web.py index 4a7406511e..75c93f61ca 100644 --- a/tests/_test_local/_test_web.py +++ b/tests/_test_local/_test_web.py @@ -4,7 +4,8 @@ from unittest import TestCase, mock import tidy3d.web as web -from tidy3d.web.auth import get_credentials, encode_password +from tidy3d.web.auth import encode_password, get_credentials + from ..utils import SIM_FULL as sim_original CALLBACK_URL = "https://callbackurl" diff --git a/tests/_test_notebooks/full_test_notebooks.py b/tests/_test_notebooks/full_test_notebooks.py index 270127715f..8f407be703 100644 --- a/tests/_test_notebooks/full_test_notebooks.py +++ b/tests/_test_notebooks/full_test_notebooks.py @@ -1,12 +1,10 @@ import os import sys -import pytest - # note: these libraries throw Deprecation warnings in python 3.9, so they are ignored in pytest.ini import nbformat -from nbconvert.preprocessors import CellExecutionError -from nbconvert.preprocessors import ExecutePreprocessor +import pytest +from nbconvert.preprocessors import CellExecutionError, ExecutePreprocessor sys.path.append("tidy3d") diff --git a/tests/conftest.py b/tests/conftest.py index 58e499e299..26c2c9d9ca 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,4 @@ import pytest - import tidy3d as td diff --git a/tests/test_cli/full_test_develop.py b/tests/test_cli/full_test_develop.py index 305aa0f83a..d46ca78a4d 100644 --- a/tests/test_cli/full_test_develop.py +++ b/tests/test_cli/full_test_develop.py @@ -2,11 +2,12 @@ These scripts just test the CLI commands for the develop command, and verify that they run properly. """ -import pytest import os +from unittest.mock import patch + +import pytest from click.testing import CliRunner from tidy3d.web.cli import tidy3d_cli -from unittest.mock import patch @pytest.fixture diff --git a/tests/test_components/test_IO.py b/tests/test_components/test_IO.py index b1c36cdafb..4b9d7b9b6c 100644 --- a/tests/test_components/test_IO.py +++ b/tests/test_components/test_IO.py @@ -1,25 +1,24 @@ """Tests file export and loading.""" -import os import json - -import pytest -import numpy as np +import os from time import time + import dill as pickle import h5py - -from tidy3d import __version__ +import numpy as np +import pytest import tidy3d as td +from tidy3d import __version__ from tidy3d.components.base import DATA_ARRAY_MAP -from ..utils import SIM_FULL as SIM -from ..utils import SIM_MONITORS as SIM2 +from tidy3d.components.data.sim_data import DATA_TYPE_MAP + from ..test_data.test_monitor_data import make_flux_data from ..test_data.test_sim_data import make_sim_data +from ..utils import SIM_FULL as SIM +from ..utils import SIM_MONITORS as SIM2 from ..utils import run_emulated -from tidy3d.components.data.sim_data import DATA_TYPE_MAP - # Store an example of every minor release simulation to test updater in the future SIM_DIR = "tests/sims" diff --git a/tests/test_components/test_apodization.py b/tests/test_components/test_apodization.py index 40a4017ad1..d1c3b14440 100644 --- a/tests/test_components/test_apodization.py +++ b/tests/test_components/test_apodization.py @@ -1,9 +1,9 @@ """Tests mode objects.""" -import pytest +import matplotlib.pyplot as plt import pydantic.v1 as pydantic +import pytest import tidy3d as td -import matplotlib.pyplot as plt def test_apodization(): diff --git a/tests/test_components/test_autograd.py b/tests/test_components/test_autograd.py index 087e31b873..d063d9ecee 100644 --- a/tests/test_components/test_autograd.py +++ b/tests/test_components/test_autograd.py @@ -1,20 +1,19 @@ # test autograd integration into tidy3d -import pytest -import matplotlib.pylab as plt -import numpy as np import cProfile import typing from importlib import reload import autograd as ag import autograd.numpy as anp - +import matplotlib.pylab as plt +import numpy as np +import pytest import tidy3d as td from tidy3d.web import run_async from tidy3d.web.api.autograd.autograd import run -from ..utils import run_emulated, SIM_FULL, AssertLogLevel +from ..utils import SIM_FULL, AssertLogLevel, run_emulated """ Test configuration """ diff --git a/tests/test_components/test_base.py b/tests/test_components/test_base.py index 38b09cbd26..eac3fd2f86 100644 --- a/tests/test_components/test_base.py +++ b/tests/test_components/test_base.py @@ -1,12 +1,10 @@ """Tests the base model.""" -import pytest import numpy as np - +import pytest import tidy3d as td from tidy3d.components.base import Tidy3dBaseModel - M = td.Medium() diff --git a/tests/test_components/test_bc_placement.py b/tests/test_components/test_bc_placement.py index 9498823e9e..6c1a1fcf70 100644 --- a/tests/test_components/test_bc_placement.py +++ b/tests/test_components/test_bc_placement.py @@ -1,9 +1,9 @@ from tidy3d.components.bc_placement import ( - StructureBoundary, - StructureStructureInterface, + MediumMediumInterface, SimulationBoundary, + StructureBoundary, StructureSimulationBoundary, - MediumMediumInterface, + StructureStructureInterface, ) diff --git a/tests/test_components/test_boundaries.py b/tests/test_components/test_boundaries.py index cab9dcd9f7..ec0cd2d805 100644 --- a/tests/test_components/test_boundaries.py +++ b/tests/test_components/test_boundaries.py @@ -1,14 +1,22 @@ """Tests boundary conditions.""" -import pytest import pydantic.v1 as pydantic - +import pytest import tidy3d as td -from tidy3d.components.boundary import BoundarySpec, Boundary -from tidy3d.components.boundary import Periodic, PECBoundary, PMCBoundary, BlochBoundary -from tidy3d.components.boundary import PML, StablePML, Absorber +from tidy3d.components.boundary import ( + PML, + Absorber, + BlochBoundary, + Boundary, + BoundarySpec, + PECBoundary, + Periodic, + PMCBoundary, + StablePML, +) from tidy3d.components.source import GaussianPulse, PlaneWave, PointDipole -from tidy3d.exceptions import SetupError, DataError +from tidy3d.exceptions import DataError, SetupError + from ..utils import assert_log_level diff --git a/tests/test_components/test_custom.py b/tests/test_components/test_custom.py index d03da9cd1c..8d04d37c65 100644 --- a/tests/test_components/test_custom.py +++ b/tests/test_components/test_custom.py @@ -1,23 +1,30 @@ """Tests custom sources and mediums.""" -import dill as pickle from typing import Tuple -import pytest +import dill as pickle import numpy as np import pydantic.v1 as pydantic -import xarray as xr +import pytest import tidy3d as td - -from ..utils import assert_log_level, cartesian_to_unstructured +import xarray as xr from tidy3d.components.data.dataset import ( PermittivityDataset, - _get_numpy_array, UnstructuredGridDataset, + _get_numpy_array, ) -from tidy3d.components.medium import CustomMedium, CustomPoleResidue, CustomSellmeier -from tidy3d.components.medium import CustomLorentz, CustomDrude, CustomDebye, AbstractCustomMedium -from tidy3d.components.medium import CustomAnisotropicMedium +from tidy3d.components.medium import ( + AbstractCustomMedium, + CustomAnisotropicMedium, + CustomDebye, + CustomDrude, + CustomLorentz, + CustomMedium, + CustomPoleResidue, + CustomSellmeier, +) + +from ..utils import assert_log_level, cartesian_to_unstructured np.random.seed(4) diff --git a/tests/test_components/test_eme.py b/tests/test_components/test_eme.py index 8a669b85f5..7a100f5578 100644 --- a/tests/test_components/test_eme.py +++ b/tests/test_components/test_eme.py @@ -1,10 +1,9 @@ -import pytest -import pydantic.v1 as pd import numpy as np -from matplotlib import pyplot as plt - +import pydantic.v1 as pd +import pytest import tidy3d as td -from tidy3d.exceptions import ValidationError, SetupError +from matplotlib import pyplot as plt +from tidy3d.exceptions import SetupError, ValidationError from ..utils import AssertLogLevel diff --git a/tests/test_components/test_field_projection.py b/tests/test_components/test_field_projection.py index 0fa22efedc..0e1523b87b 100644 --- a/tests/test_components/test_field_projection.py +++ b/tests/test_components/test_field_projection.py @@ -1,12 +1,10 @@ """Test near field to far field transformations.""" import numpy as np -import tidy3d as td import pytest - +import tidy3d as td from tidy3d.exceptions import DataError - MEDIUM = td.Medium(permittivity=3) WAVELENGTH = 1 F0 = td.C_0 / WAVELENGTH / np.sqrt(MEDIUM.permittivity) diff --git a/tests/test_components/test_geometry.py b/tests/test_components/test_geometry.py index f558482c7e..d61e3907b0 100644 --- a/tests/test_components/test_geometry.py +++ b/tests/test_components/test_geometry.py @@ -1,21 +1,20 @@ """Tests Geometry objects.""" -import pytest -import pydantic.v1 as pydantic -import numpy as np -import shapely -import matplotlib.pyplot as plt -import gdstk -import gdspy -import trimesh import warnings +import gdspy +import gdstk +import matplotlib.pyplot as plt +import numpy as np +import pydantic.v1 as pydantic +import pytest +import shapely import tidy3d as td -from tidy3d.constants import LARGE_NUMBER -from tidy3d.exceptions import SetupError, Tidy3dKeyError, ValidationError +import trimesh from tidy3d.components.geometry.base import Planar from tidy3d.components.geometry.utils import flatten_groups, traverse_geometries - +from tidy3d.constants import LARGE_NUMBER +from tidy3d.exceptions import SetupError, Tidy3dKeyError, ValidationError GEO = td.Box(size=(1, 1, 1)) GEO_INF = td.Box(size=(1, 1, td.inf)) diff --git a/tests/test_components/test_grid.py b/tests/test_components/test_grid.py index ef07a57913..2ca7e613ea 100644 --- a/tests/test_components/test_grid.py +++ b/tests/test_components/test_grid.py @@ -1,8 +1,7 @@ """Tests grid operations.""" -import pytest import numpy as np - +import pytest import tidy3d as td from tidy3d.components.grid.grid import Coords, FieldGrid, Grid from tidy3d.exceptions import SetupError diff --git a/tests/test_components/test_grid_spec.py b/tests/test_components/test_grid_spec.py index 25e834f413..73523232da 100644 --- a/tests/test_components/test_grid_spec.py +++ b/tests/test_components/test_grid_spec.py @@ -1,8 +1,7 @@ """Tests GridSpec.""" -import pytest import numpy as np - +import pytest import tidy3d as td from tidy3d.exceptions import SetupError diff --git a/tests/test_components/test_heat.py b/tests/test_components/test_heat.py index 43229a8aa7..15edf5a1f9 100644 --- a/tests/test_components/test_heat.py +++ b/tests/test_components/test_heat.py @@ -1,33 +1,31 @@ -import pytest -import pydantic.v1 as pd import numpy as np -from matplotlib import pyplot as plt - +import pydantic.v1 as pd +import pytest import tidy3d as td - -from tidy3d import FluidSpec, SolidSpec -from tidy3d import UniformHeatSource +from matplotlib import pyplot as plt from tidy3d import ( - TemperatureBC, - HeatFluxBC, ConvectionBC, + DistanceUnstructuredGrid, + FluidSpec, HeatBoundarySpec, -) -from tidy3d import ( - StructureBoundary, - StructureStructureInterface, + HeatFluxBC, + HeatSimulation, + HeatSimulationData, + MediumMediumInterface, SimulationBoundary, + SolidSpec, + StructureBoundary, StructureSimulationBoundary, - MediumMediumInterface, + StructureStructureInterface, + TemperatureBC, + TemperatureData, + TemperatureMonitor, + UniformHeatSource, + UniformUnstructuredGrid, ) -from tidy3d import UniformUnstructuredGrid, DistanceUnstructuredGrid -from tidy3d import HeatSimulation -from tidy3d import HeatSimulationData -from tidy3d import TemperatureMonitor -from tidy3d import TemperatureData from tidy3d.exceptions import DataError -from ..utils import assert_log_level, AssertLogLevel, cartesian_to_unstructured +from ..utils import AssertLogLevel, assert_log_level, cartesian_to_unstructured def make_heat_mediums(): diff --git a/tests/test_components/test_medium.py b/tests/test_components/test_medium.py index c52b778887..3aad9b0576 100644 --- a/tests/test_components/test_medium.py +++ b/tests/test_components/test_medium.py @@ -1,13 +1,15 @@ """Tests mediums.""" +from typing import Dict + +import matplotlib.pyplot as plt import numpy as np -import pytest import pydantic.v1 as pydantic -import matplotlib.pyplot as plt +import pytest import tidy3d as td -from tidy3d.exceptions import ValidationError, SetupError -from ..utils import assert_log_level, AssertLogLevel -from typing import Dict +from tidy3d.exceptions import SetupError, ValidationError + +from ..utils import AssertLogLevel, assert_log_level MEDIUM = td.Medium() ANIS_MEDIUM = td.AnisotropicMedium(xx=MEDIUM, yy=MEDIUM, zz=MEDIUM) diff --git a/tests/test_components/test_meshgenerate.py b/tests/test_components/test_meshgenerate.py index 3c4b673c2f..ff7244797f 100644 --- a/tests/test_components/test_meshgenerate.py +++ b/tests/test_components/test_meshgenerate.py @@ -1,12 +1,12 @@ """Tests generating meshes.""" -import numpy as np import warnings -import pytest +import numpy as np +import pytest import tidy3d as td -from tidy3d.constants import fp_eps from tidy3d.components.grid.mesher import GradedMesher +from tidy3d.constants import fp_eps from ..utils import assert_log_level, cartesian_to_unstructured diff --git a/tests/test_components/test_mode.py b/tests/test_components/test_mode.py index 88a58e1952..305625490e 100644 --- a/tests/test_components/test_mode.py +++ b/tests/test_components/test_mode.py @@ -1,8 +1,8 @@ """Tests mode objects.""" -import pytest -import pydantic.v1 as pydantic import numpy as np +import pydantic.v1 as pydantic +import pytest import tidy3d as td diff --git a/tests/test_components/test_monitor.py b/tests/test_components/test_monitor.py index 65b220ed1e..1daadc3ea8 100644 --- a/tests/test_components/test_monitor.py +++ b/tests/test_components/test_monitor.py @@ -1,10 +1,11 @@ """Tests monitors.""" -import pytest -import pydantic.v1 as pydantic import numpy as np +import pydantic.v1 as pydantic +import pytest import tidy3d as td from tidy3d.exceptions import SetupError, ValidationError + from ..utils import assert_log_level diff --git a/tests/test_components/test_packaging.py b/tests/test_components/test_packaging.py index 5cffc3659e..71d9893224 100644 --- a/tests/test_components/test_packaging.py +++ b/tests/test_components/test_packaging.py @@ -1,5 +1,5 @@ import pytest -from tidy3d.packaging import check_import, verify_packages_import, Tidy3dImportError +from tidy3d.packaging import Tidy3dImportError, check_import, verify_packages_import assert check_import("tidy3d") is True diff --git a/tests/test_components/test_parameter_perturbation.py b/tests/test_components/test_parameter_perturbation.py index c1cc7a470f..a2b4a15b17 100644 --- a/tests/test_components/test_parameter_perturbation.py +++ b/tests/test_components/test_parameter_perturbation.py @@ -1,10 +1,11 @@ """Tests parameter perturbations.""" -import numpy as np import matplotlib.pyplot as plt -import pytest +import numpy as np import pydantic.v1 as pydantic +import pytest import tidy3d as td + from ..utils import cartesian_to_unstructured sp_arr = td.SpatialDataArray(300 * np.ones((2, 2, 2)), coords=dict(x=[1, 2], y=[3, 4], z=[5, 6])) diff --git a/tests/test_components/test_scene.py b/tests/test_components/test_scene.py index 26a7415bec..fdc3514602 100644 --- a/tests/test_components/test_scene.py +++ b/tests/test_components/test_scene.py @@ -1,12 +1,12 @@ """Tests the scene and its validators.""" -import pytest -import pydantic.v1 as pd import matplotlib.pyplot as plt - import numpy as np +import pydantic.v1 as pd +import pytest import tidy3d as td -from tidy3d.components.scene import MAX_NUM_MEDIUMS, MAX_GEOMETRY_COUNT +from tidy3d.components.scene import MAX_GEOMETRY_COUNT, MAX_NUM_MEDIUMS + from ..utils import SIM_FULL, cartesian_to_unstructured SCENE = td.Scene() diff --git a/tests/test_components/test_sidewall.py b/tests/test_components/test_sidewall.py index cc7de3e9cf..c466c7d607 100644 --- a/tests/test_components/test_sidewall.py +++ b/tests/test_components/test_sidewall.py @@ -1,11 +1,10 @@ """test slanted polyslab can be correctly setup and visualized.""" -import pytest import numpy as np import pydantic.v1 as pydantic -from shapely import Polygon, Point - +import pytest import tidy3d as td +from shapely import Point, Polygon from tidy3d.constants import fp_eps np.random.seed(4) diff --git a/tests/test_components/test_simulation.py b/tests/test_components/test_simulation.py index c5efdc0295..911e903b08 100644 --- a/tests/test_components/test_simulation.py +++ b/tests/test_components/test_simulation.py @@ -1,22 +1,22 @@ """Tests the simulation and its validators.""" -import pytest -import pydantic.v1 as pydantic -import matplotlib.pyplot as plt import gdstk - +import matplotlib.pyplot as plt import numpy as np +import pydantic.v1 as pydantic +import pytest import tidy3d as td -from tidy3d.exceptions import SetupError, Tidy3dKeyError from tidy3d.components import simulation +from tidy3d.components.scene import MAX_GEOMETRY_COUNT, MAX_NUM_MEDIUMS from tidy3d.components.simulation import MAX_NUM_SOURCES -from tidy3d.components.scene import MAX_NUM_MEDIUMS, MAX_GEOMETRY_COUNT +from tidy3d.exceptions import SetupError, Tidy3dKeyError + from ..utils import ( - assert_log_level, SIM_FULL, - run_emulated, AssertLogLevel, + assert_log_level, cartesian_to_unstructured, + run_emulated, ) SIM = td.Simulation(size=(1, 1, 1), run_time=1e-12, grid_spec=td.GridSpec(wavelength=1.0)) diff --git a/tests/test_components/test_source.py b/tests/test_components/test_source.py index eb43b1bbde..3fbf84ddfb 100644 --- a/tests/test_components/test_source.py +++ b/tests/test_components/test_source.py @@ -1,13 +1,14 @@ """Tests sources.""" -import pytest -import pydantic.v1 as pydantic import matplotlib.pyplot as plt import numpy as np +import pydantic.v1 as pydantic +import pytest import tidy3d as td +from tidy3d.components.source import CHEB_GRID_WIDTH, DirectionalSource from tidy3d.exceptions import SetupError -from tidy3d.components.source import DirectionalSource, CHEB_GRID_WIDTH -from ..utils import assert_log_level, AssertLogLevel + +from ..utils import AssertLogLevel, assert_log_level ST = td.GaussianPulse(freq0=2e14, fwidth=1e14) S = td.PointDipole(source_time=ST, polarization="Ex") diff --git a/tests/test_components/test_structure.py b/tests/test_components/test_structure.py index a40e21c34b..54fc322318 100644 --- a/tests/test_components/test_structure.py +++ b/tests/test_components/test_structure.py @@ -1,8 +1,8 @@ -import pytest import gdstk import numpy as np -import tidy3d as td import pydantic.v1 as pd +import pytest +import tidy3d as td def test_to_gds(tmp_path): diff --git a/tests/test_components/test_time_modulation.py b/tests/test_components/test_time_modulation.py index 8b65916b1a..96b03a4d70 100644 --- a/tests/test_components/test_time_modulation.py +++ b/tests/test_components/test_time_modulation.py @@ -1,10 +1,12 @@ """Tests space time modulation.""" -import numpy as np -import pytest from math import isclose + +import numpy as np import pydantic.v1 as pydantic +import pytest import tidy3d as td + from ..utils import cartesian_to_unstructured np.random.seed(4) diff --git a/tests/test_components/test_types.py b/tests/test_components/test_types.py index 09ede00f7a..f992bbec8d 100644 --- a/tests/test_components/test_types.py +++ b/tests/test_components/test_types.py @@ -1,10 +1,10 @@ """Tests type definitions.""" -import pytest +import numpy as np import pydantic.v1 as pydantic -from tidy3d.components.types import ArrayLike, Complex, constrained_array, Tuple +import pytest from tidy3d.components.base import Tidy3dBaseModel -import numpy as np +from tidy3d.components.types import ArrayLike, Complex, Tuple, constrained_array def _test_validate_array_like(): diff --git a/tests/test_components/test_viz.py b/tests/test_components/test_viz.py index be1979a988..b8b5c190ff 100644 --- a/tests/test_components/test_viz.py +++ b/tests/test_components/test_viz.py @@ -1,7 +1,7 @@ """Tests visualization operations.""" -import pytest import matplotlib.pyplot as plt +import pytest import tidy3d as td from tidy3d.components.viz import Polygon diff --git a/tests/test_data/test_data_arrays.py b/tests/test_data/test_data_arrays.py index 33bd6982d2..07e01eb039 100644 --- a/tests/test_data/test_data_arrays.py +++ b/tests/test_data/test_data_arrays.py @@ -1,9 +1,9 @@ """Tests tidy3d/components/data/data_array.py""" -import pytest -import numpy as np -from typing import Tuple, List +from typing import List, Tuple +import numpy as np +import pytest import tidy3d as td from tidy3d.exceptions import DataError diff --git a/tests/test_data/test_datasets.py b/tests/test_data/test_datasets.py index efb736af40..8bf3e084d8 100644 --- a/tests/test_data/test_datasets.py +++ b/tests/test_data/test_datasets.py @@ -1,12 +1,11 @@ """Tests tidy3d/components/data/dataset.py""" -import pytest import numpy as np import pydantic.v1 as pd +import pytest from matplotlib import pyplot as plt -from ..utils import cartesian_to_unstructured -from ..utils import AssertLogLevel +from ..utils import AssertLogLevel, cartesian_to_unstructured np.random.seed(4) diff --git a/tests/test_data/test_monitor_data.py b/tests/test_data/test_monitor_data.py index dc9568459e..df38f0f7a3 100644 --- a/tests/test_data/test_monitor_data.py +++ b/tests/test_data/test_monitor_data.py @@ -1,30 +1,46 @@ """Tests tidy3d/components/data/monitor_data.py""" -import numpy as np import matplotlib.pyplot as plt -import pytest +import numpy as np import pydantic.v1 as pydantic +import pytest import tidy3d as td - +from tidy3d.components.data.data_array import FreqModeDataArray +from tidy3d.components.data.monitor_data import ( + DiffractionData, + FieldData, + FieldTimeData, + FluxData, + FluxTimeData, + ModeData, + PermittivityData, +) from tidy3d.exceptions import DataError -from tidy3d.components.data.data_array import FreqModeDataArray -from tidy3d.components.data.monitor_data import FieldData, FieldTimeData, PermittivityData - -from tidy3d.components.data.monitor_data import ModeData -from tidy3d.components.data.monitor_data import FluxData, FluxTimeData, DiffractionData - -from .test_data_arrays import make_scalar_field_data_array, make_scalar_field_time_data_array -from .test_data_arrays import make_scalar_mode_field_data_array -from .test_data_arrays import make_scalar_mode_field_data_array_smooth -from .test_data_arrays import make_flux_data_array, make_flux_time_data_array -from .test_data_arrays import make_mode_amps_data_array, make_mode_index_data_array -from .test_data_arrays import make_diffraction_data_array -from .test_data_arrays import FIELD_MONITOR, FIELD_TIME_MONITOR, MODE_MONITOR_WITH_FIELDS -from .test_data_arrays import MODE_MONITOR, PERMITTIVITY_MONITOR, FLUX_MONITOR, FLUX_TIME_MONITOR -from .test_data_arrays import FIELD_MONITOR_2D, FIELD_TIME_MONITOR_2D -from .test_data_arrays import DIFFRACTION_MONITOR, SIM_SYM, SIM from ..utils import assert_log_level +from .test_data_arrays import ( + DIFFRACTION_MONITOR, + FIELD_MONITOR, + FIELD_MONITOR_2D, + FIELD_TIME_MONITOR, + FIELD_TIME_MONITOR_2D, + FLUX_MONITOR, + FLUX_TIME_MONITOR, + MODE_MONITOR, + MODE_MONITOR_WITH_FIELDS, + PERMITTIVITY_MONITOR, + SIM, + SIM_SYM, + make_diffraction_data_array, + make_flux_data_array, + make_flux_time_data_array, + make_mode_amps_data_array, + make_mode_index_data_array, + make_scalar_field_data_array, + make_scalar_field_time_data_array, + make_scalar_mode_field_data_array, + make_scalar_mode_field_data_array_smooth, +) # data array instances AMPS = make_mode_amps_data_array() diff --git a/tests/test_data/test_sim_data.py b/tests/test_data/test_sim_data.py index 2713b42f56..ccc6c4a0ff 100644 --- a/tests/test_data/test_sim_data.py +++ b/tests/test_data/test_sim_data.py @@ -1,24 +1,27 @@ """Tests SimulationData""" -import pytest -import numpy as np import matplotlib.pyplot as plt +import numpy as np import pydantic.v1 as pydantic - +import pytest import tidy3d as td -from tidy3d.exceptions import DataError, Tidy3dKeyError - -from tidy3d.components.data.sim_data import SimulationData from tidy3d.components.data.data_array import ScalarFieldTimeDataArray from tidy3d.components.data.monitor_data import FieldTimeData +from tidy3d.components.data.sim_data import SimulationData from tidy3d.components.monitor import FieldMonitor, FieldTimeMonitor, ModeMonitor +from tidy3d.exceptions import DataError, Tidy3dKeyError -from .test_monitor_data import make_field_data, make_field_time_data, make_permittivity_data -from .test_monitor_data import make_mode_data, make_mode_solver_data -from .test_monitor_data import make_flux_data, make_flux_time_data -from .test_monitor_data import make_diffraction_data from .test_data_arrays import FIELD_MONITOR, SIM, SIM_SYM - +from .test_monitor_data import ( + make_diffraction_data, + make_field_data, + make_field_time_data, + make_flux_data, + make_flux_time_data, + make_mode_data, + make_mode_solver_data, + make_permittivity_data, +) # monitor data instances diff --git a/tests/test_package/test_config.py b/tests/test_package/test_config.py index b28d04b8c8..fcec8ecf0f 100644 --- a/tests/test_package/test_config.py +++ b/tests/test_package/test_config.py @@ -1,8 +1,7 @@ """test the grid operations""" -import pytest import pydantic.v1 as pydantic - +import pytest import tidy3d as td from tidy3d.log import DEFAULT_LEVEL, _level_value diff --git a/tests/test_package/test_convert.py b/tests/test_package/test_convert.py index 701d933cc2..fb7d5e741f 100644 --- a/tests/test_package/test_convert.py +++ b/tests/test_package/test_convert.py @@ -1,7 +1,6 @@ """Test converting .lsf files to Tidy3D python files.""" import pytest - from tidy3d.web.cli.app import convert diff --git a/tests/test_package/test_log.py b/tests/test_package/test_log.py index c9d780235e..335482cbe3 100644 --- a/tests/test_package/test_log.py +++ b/tests/test_package/test_log.py @@ -1,15 +1,15 @@ """Test the logging.""" -import pytest import json -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd +import pytest import tidy3d as td from tidy3d.exceptions import Tidy3dError from tidy3d.log import DEFAULT_LEVEL, _get_level_int, set_logging_level -from ..utils import assert_log_level, AssertLogLevel +from ..utils import AssertLogLevel, assert_log_level def test_log(): diff --git a/tests/test_package/test_main.py b/tests/test_package/test_main.py index da02210668..e55b39d622 100644 --- a/tests/test_package/test_main.py +++ b/tests/test_package/test_main.py @@ -1,7 +1,7 @@ """Test running tidy3d as command line application.""" -import tidy3d as td import pytest +import tidy3d as td from tidy3d.__main__ import main diff --git a/tests/test_package/test_material_library.py b/tests/test_package/test_material_library.py index c035cd7ff6..2e8d86e0a7 100644 --- a/tests/test_package/test_material_library.py +++ b/tests/test_package/test_material_library.py @@ -1,17 +1,16 @@ -import pytest import numpy as np import pydantic.v1 as pydantic - +import pytest +import tidy3d as td from tidy3d.material_library.material_library import ( - VariantItem, MaterialItem, + MaterialItemUniaxial, ReferenceData, - material_library, - export_matlib_to_file, + VariantItem, VariantItemUniaxial, - MaterialItemUniaxial, + export_matlib_to_file, + material_library, ) -import tidy3d as td def test_VariantItem(): diff --git a/tests/test_package/test_parametric_variants.py b/tests/test_package/test_parametric_variants.py index 069a252597..ce2c01f04d 100644 --- a/tests/test_package/test_parametric_variants.py +++ b/tests/test_package/test_parametric_variants.py @@ -1,16 +1,13 @@ -import pytest import numpy as np - +import pytest +from numpy.random import default_rng from tidy3d.material_library.parametric_materials import ( - GRAPHENE_FIT_FREQ_MIN, + GRAPHENE_FIT_ATOL, GRAPHENE_FIT_FREQ_MAX, + GRAPHENE_FIT_FREQ_MIN, GRAPHENE_FIT_NUM_FREQS, - GRAPHENE_FIT_ATOL, + Graphene, ) -from tidy3d.material_library.parametric_materials import Graphene - -from numpy.random import default_rng - # bounds for MU_C GRAPHENE_MU_C_MIN = 0 diff --git a/tests/test_plugins/autograd/test_functions.py b/tests/test_plugins/autograd/test_functions.py index 814533a318..6d87e3f461 100644 --- a/tests/test_plugins/autograd/test_functions.py +++ b/tests/test_plugins/autograd/test_functions.py @@ -1,20 +1,19 @@ -import pytest import numpy as np import numpy.testing as npt +import pytest import scipy.ndimage from autograd.test_util import check_grads from scipy.signal import convolve as convolve_sp - from tidy3d.plugins.autograd.functions import ( convolve, + grey_closing, grey_dilation, grey_erosion, - pad, grey_opening, - grey_closing, morphological_gradient, - morphological_gradient_internal, morphological_gradient_external, + morphological_gradient_internal, + pad, ) from tidy3d.plugins.autograd.types import PaddingType diff --git a/tests/test_plugins/autograd/test_primitives.py b/tests/test_plugins/autograd/test_primitives.py index 17083f124a..ce38b7a42d 100644 --- a/tests/test_plugins/autograd/test_primitives.py +++ b/tests/test_plugins/autograd/test_primitives.py @@ -1,6 +1,5 @@ import pytest from autograd.test_util import check_grads - from tidy3d.plugins.autograd.primitives import gaussian_filter diff --git a/tests/test_plugins/terminal_component_modeler_def.py b/tests/test_plugins/terminal_component_modeler_def.py index d3ce9e4f35..de762b8104 100644 --- a/tests/test_plugins/terminal_component_modeler_def.py +++ b/tests/test_plugins/terminal_component_modeler_def.py @@ -1,9 +1,8 @@ import numpy as np - import tidy3d as td from tidy3d.plugins.smatrix import ( - LumpedPort, CoaxialLumpedPort, + LumpedPort, TerminalComponentModeler, ) diff --git a/tests/test_plugins/test_adjoint.py b/tests/test_plugins/test_adjoint.py index 4714cbc454..3d8c8e0bd8 100644 --- a/tests/test_plugins/test_adjoint.py +++ b/tests/test_plugins/test_adjoint.py @@ -1,59 +1,64 @@ """Tests adjoint plugin.""" -from typing import Tuple, Dict, List import builtins +import time +from typing import Dict, List, Tuple -import pytest -import pydantic.v1 as pydantic +import gdstk +import h5py +import jax import jax.numpy as jnp +import matplotlib.pyplot as plt import numpy as np -from numpy.testing import assert_allclose -from xarray import DataArray +import pydantic.v1 as pydantic +import pytest +import tidy3d as td +import trimesh from jax import grad -import jax from jax.test_util import check_grads -import time -import matplotlib.pyplot as plt -import h5py -import trimesh -import gdstk - -import tidy3d as td - -from tidy3d.exceptions import DataError, Tidy3dKeyError, AdjointError -from tidy3d.plugins.polyslab import ComplexPolySlab +from numpy.testing import assert_allclose +from tidy3d.exceptions import AdjointError, DataError, Tidy3dKeyError +from tidy3d.plugins.adjoint.components import simulation +from tidy3d.plugins.adjoint.components.data.data_array import ( + JAX_DATA_ARRAY_TAG, + VALUE_FILTER_THRESHOLD, + JaxDataArray, +) +from tidy3d.plugins.adjoint.components.data.dataset import JaxPermittivityDataset +from tidy3d.plugins.adjoint.components.data.monitor_data import ( + JaxDiffractionData, + JaxFieldData, + JaxModeData, +) +from tidy3d.plugins.adjoint.components.data.sim_data import JaxSimulationData from tidy3d.plugins.adjoint.components.geometry import ( + MAX_NUM_VERTICES, JaxBox, - JaxPolySlab, JaxComplexPolySlab, - MAX_NUM_VERTICES, + JaxGeometryGroup, + JaxPolySlab, +) +from tidy3d.plugins.adjoint.components.medium import ( + MAX_NUM_CELLS_CUSTOM_MEDIUM, + JaxAnisotropicMedium, + JaxCustomMedium, + JaxMedium, ) -from tidy3d.plugins.adjoint.components.geometry import JaxGeometryGroup -from tidy3d.plugins.adjoint.components.medium import JaxMedium, JaxAnisotropicMedium -from tidy3d.plugins.adjoint.components.medium import JaxCustomMedium, MAX_NUM_CELLS_CUSTOM_MEDIUM +from tidy3d.plugins.adjoint.components.simulation import RUN_TIME_FACTOR, JaxInfo, JaxSimulation from tidy3d.plugins.adjoint.components.structure import ( JaxStructure, - JaxStructureStaticMedium, JaxStructureStaticGeometry, + JaxStructureStaticMedium, ) -from tidy3d.plugins.adjoint.components.simulation import JaxSimulation, JaxInfo, RUN_TIME_FACTOR -from tidy3d.plugins.adjoint.components import simulation -from tidy3d.plugins.adjoint.components.data.sim_data import JaxSimulationData -from tidy3d.plugins.adjoint.components.data.monitor_data import ( - JaxModeData, - JaxDiffractionData, - JaxFieldData, -) -from tidy3d.plugins.adjoint.components.data.data_array import JaxDataArray, JAX_DATA_ARRAY_TAG -from tidy3d.plugins.adjoint.components.data.dataset import JaxPermittivityDataset -from tidy3d.plugins.adjoint.web import run, run_async -from tidy3d.plugins.adjoint.web import run_local, run_async_local -from tidy3d.plugins.adjoint.components.data.data_array import VALUE_FILTER_THRESHOLD -from tidy3d.plugins.adjoint.utils.penalty import RadiusPenalty, ErosionDilationPenalty -from tidy3d.plugins.adjoint.utils.filter import ConicFilter, BinaryProjector, CircularFilter +from tidy3d.plugins.adjoint.utils.filter import BinaryProjector, CircularFilter, ConicFilter +from tidy3d.plugins.adjoint.utils.penalty import ErosionDilationPenalty, RadiusPenalty +from tidy3d.plugins.adjoint.web import run, run_async, run_async_local, run_local +from tidy3d.plugins.polyslab import ComplexPolySlab from tidy3d.web.api.container import BatchData -from ..utils import run_emulated, assert_log_level, AssertLogLevel, run_async_emulated +from xarray import DataArray + from ..test_components.test_custom import CUSTOM_MEDIUM +from ..utils import AssertLogLevel, assert_log_level, run_async_emulated, run_emulated TMP_PATH = None FWD_SIM_DATA_FILE = "adjoint_grad_data_fwd.hdf5" @@ -1889,6 +1894,7 @@ def mocked_import(name, *args, **kwargs): def try_tracer_import() -> None: """Try importing `tidy3d.plugins.adjoint.components.types`.""" from importlib import reload + import tidy3d reload(tidy3d.plugins.adjoint.components.types) diff --git a/tests/test_plugins/test_component_modeler.py b/tests/test_plugins/test_component_modeler.py index a513184ee8..ca4534ccc2 100644 --- a/tests/test_plugins/test_component_modeler.py +++ b/tests/test_plugins/test_component_modeler.py @@ -1,16 +1,16 @@ -import pytest +import gdstk +import matplotlib.pyplot as plt import numpy as np import pydantic.v1 as pydantic -import matplotlib.pyplot as plt -import gdstk - +import pytest import tidy3d as td -from tidy3d.web.api.container import Batch +from tidy3d.exceptions import SetupError, Tidy3dKeyError from tidy3d.plugins.smatrix import ( - Port, ComponentModeler, + Port, ) -from tidy3d.exceptions import SetupError, Tidy3dKeyError +from tidy3d.web.api.container import Batch + from ..utils import run_emulated # Waveguide height @@ -385,7 +385,7 @@ def test_batch_filename(tmp_path): def test_import_smatrix_smatrix(): - from tidy3d.plugins.smatrix.smatrix import Port, ComponentModeler # noqa: F401 + from tidy3d.plugins.smatrix.smatrix import ComponentModeler, Port # noqa: F401 def test_to_from_file_batch(monkeypatch, tmp_path): diff --git a/tests/test_plugins/test_design.py b/tests/test_plugins/test_design.py index fafa268101..aaae784475 100644 --- a/tests/test_plugins/test_design.py +++ b/tests/test_plugins/test_design.py @@ -1,18 +1,15 @@ """Test the parameter sweep plugin.""" -import pytest -import numpy as np -import tidy3d as td import matplotlib.pyplot as plt +import numpy as np +import pytest import scipy.stats.qmc as qmc - +import tidy3d as td import tidy3d.web as web - from tidy3d.plugins import design as tdd from tidy3d.plugins.design.method import MethodIndependent -from ..utils import run_emulated, assert_log_level - +from ..utils import assert_log_level, run_emulated SWEEP_METHODS = dict( grid=tdd.MethodGrid(), diff --git a/tests/test_plugins/test_dispersion_fitter.py b/tests/test_plugins/test_dispersion_fitter.py index 1300c58dff..518a6d150f 100644 --- a/tests/test_plugins/test_dispersion_fitter.py +++ b/tests/test_plugins/test_dispersion_fitter.py @@ -1,14 +1,15 @@ +import matplotlib.pyplot as plt import numpy as np +import pydantic.v1 as pydantic import pytest import responses -import pydantic.v1 as pydantic - -import matplotlib.pyplot as plt - import tidy3d as td from tidy3d.exceptions import SetupError, ValidationError -from tidy3d.plugins.dispersion import DispersionFitter, FastDispersionFitter -from tidy3d.plugins.dispersion import AdvancedFastFitterParam +from tidy3d.plugins.dispersion import ( + AdvancedFastFitterParam, + DispersionFitter, + FastDispersionFitter, +) from tidy3d.plugins.dispersion.web import run as run_fitter advanced_param = AdvancedFastFitterParam(num_iters=1, passivity_num_iters=1) diff --git a/tests/test_plugins/test_invdes.py b/tests/test_plugins/test_invdes.py index 89e0f5500e..59c20765b1 100644 --- a/tests/test_plugins/test_invdes.py +++ b/tests/test_plugins/test_invdes.py @@ -1,20 +1,16 @@ # Test the inverse design plugin -import pytest - -import numpy as np import autograd.numpy as anp - +import numpy as np +import pytest import tidy3d as td import tidy3d.plugins.invdes as tdi -# use single threading pipeline +from ..utils import AssertLogLevel, run_async_emulated, run_emulated +# use single threading pipeline from .test_adjoint import use_emulated_run, use_emulated_run_async # noqa: F401 -from ..utils import run_emulated, run_async_emulated, AssertLogLevel - - FREQ0 = 1e14 L_SIM = 1.0 MNT_NAME1 = "mnt_name1" diff --git a/tests/test_plugins/test_microwave.py b/tests/test_plugins/test_microwave.py index 2949a22c37..ca0302ce17 100644 --- a/tests/test_plugins/test_microwave.py +++ b/tests/test_plugins/test_microwave.py @@ -1,26 +1,23 @@ """Test the microwave plugin.""" -import pytest import numpy as np import pydantic.v1 as pydantic - +import pytest +import tidy3d as td from skrf import Frequency from skrf.media import MLine - -import tidy3d as td from tidy3d import FieldData from tidy3d.constants import ETA_0 +from tidy3d.exceptions import DataError from tidy3d.plugins.microwave import ( - VoltageIntegralAxisAligned, CurrentIntegralAxisAligned, - CustomVoltageIntegral2D, CustomCurrentIntegral2D, + CustomVoltageIntegral2D, ImpedanceCalculator, + VoltageIntegralAxisAligned, ) +from tidy3d.plugins.microwave.models import coupled_microstrip, microstrip -from tidy3d.plugins.microwave.models import microstrip, coupled_microstrip - -from tidy3d.exceptions import DataError from ..utils import run_emulated # Using similar code as "test_data/test_data_arrays.py" diff --git a/tests/test_plugins/test_mode_solver.py b/tests/test_plugins/test_mode_solver.py index 2a0917af94..35bc154f8d 100644 --- a/tests/test_plugins/test_mode_solver.py +++ b/tests/test_plugins/test_mode_solver.py @@ -1,22 +1,20 @@ -import pytest -import responses -import numpy as np import matplotlib.pyplot as plt +import numpy as np import pydantic.v1 as pydantic - +import pytest +import responses import tidy3d as td - import tidy3d.plugins.mode.web as msweb +from tidy3d import ScalarFieldDataArray +from tidy3d.components.data.monitor_data import ModeSolverData +from tidy3d.exceptions import SetupError from tidy3d.plugins.mode import ModeSolver -from tidy3d.plugins.mode.mode_solver import MODE_MONITOR_NAME from tidy3d.plugins.mode.derivatives import create_sfactor_b, create_sfactor_f +from tidy3d.plugins.mode.mode_solver import MODE_MONITOR_NAME from tidy3d.plugins.mode.solver import compute_modes -from tidy3d.exceptions import SetupError -from ..utils import assert_log_level, cartesian_to_unstructured -from tidy3d import ScalarFieldDataArray from tidy3d.web.core.environment import Env -from tidy3d.components.data.monitor_data import ModeSolverData +from ..utils import assert_log_level, cartesian_to_unstructured WG_MEDIUM = td.Medium(permittivity=4.0, conductivity=1e-4) WAVEGUIDE = td.Structure(geometry=td.Box(size=(1.5, 100, 1)), medium=WG_MEDIUM) diff --git a/tests/test_plugins/test_polyslab.py b/tests/test_plugins/test_polyslab.py index d2a03b01de..3c61d0e055 100644 --- a/tests/test_plugins/test_polyslab.py +++ b/tests/test_plugins/test_polyslab.py @@ -1,9 +1,8 @@ -import numpy as np import gdstk - +import numpy as np import tidy3d as td - from tidy3d.plugins.polyslab import ComplexPolySlab + from ..utils import assert_log_level diff --git a/tests/test_plugins/test_resonance_finder.py b/tests/test_plugins/test_resonance_finder.py index 96425ffcf0..311c9f42b5 100644 --- a/tests/test_plugins/test_resonance_finder.py +++ b/tests/test_plugins/test_resonance_finder.py @@ -1,10 +1,8 @@ -import pytest import numpy as np - +import pytest from numpy.random import default_rng - +from tidy3d import FieldTimeData, FieldTimeMonitor, ScalarFieldTimeDataArray from tidy3d.plugins.resonance import ResonanceFinder -from tidy3d import ScalarFieldTimeDataArray, FieldTimeData, FieldTimeMonitor RTOL = 1e-2 NTIME = 10000 diff --git a/tests/test_plugins/test_terminal_component_modeler.py b/tests/test_plugins/test_terminal_component_modeler.py index b3beb8ac41..b23935f5b4 100644 --- a/tests/test_plugins/test_terminal_component_modeler.py +++ b/tests/test_plugins/test_terminal_component_modeler.py @@ -1,19 +1,19 @@ -import pytest +import matplotlib.pyplot as plt import numpy as np import pydantic.v1 as pydantic -import matplotlib.pyplot as plt - +import pytest import tidy3d as td +from tidy3d.exceptions import SetupError, Tidy3dKeyError from tidy3d.plugins.smatrix import ( AbstractComponentModeler, - LumpedPort, CoaxialLumpedPort, + LumpedPort, LumpedPortDataArray, TerminalComponentModeler, ) -from tidy3d.exceptions import Tidy3dKeyError, SetupError + from ..utils import run_emulated -from .terminal_component_modeler_def import make_component_modeler, make_coaxial_component_modeler +from .terminal_component_modeler_def import make_coaxial_component_modeler, make_component_modeler def run_component_modeler(monkeypatch, modeler: TerminalComponentModeler): diff --git a/tests/test_plugins/test_waveguide.py b/tests/test_plugins/test_waveguide.py index 959803bae5..4772fcfb27 100644 --- a/tests/test_plugins/test_waveguide.py +++ b/tests/test_plugins/test_waveguide.py @@ -1,8 +1,8 @@ -import pytest import numpy as np +import pytest import tidy3d as td -from tidy3d.plugins import waveguide from pydantic.v1 import ValidationError +from tidy3d.plugins import waveguide def test_array_validators(): diff --git a/tests/test_web/test_env.py b/tests/test_web/test_env.py index 9cc595fc4f..13152cd50b 100644 --- a/tests/test_web/test_env.py +++ b/tests/test_web/test_env.py @@ -1,4 +1,5 @@ import ssl + from tidy3d.web.core.environment import Env diff --git a/tests/test_web/test_material_fitter.py b/tests/test_web/test_material_fitter.py index c35e267795..8f86c001d6 100644 --- a/tests/test_web/test_material_fitter.py +++ b/tests/test_web/test_material_fitter.py @@ -1,12 +1,9 @@ import pytest - import responses - +import tidy3d as td from tidy3d.plugins.dispersion import DispersionFitter - -from tidy3d.web.core.environment import Env from tidy3d.web.api.material_fitter import FitterOptions, MaterialFitterTask -import tidy3d as td +from tidy3d.web.core.environment import Env Env.dev.active() diff --git a/tests/test_web/test_tidy3d_folder.py b/tests/test_web/test_tidy3d_folder.py index 4bf885ae71..280854200b 100644 --- a/tests/test_web/test_tidy3d_folder.py +++ b/tests/test_web/test_tidy3d_folder.py @@ -1,9 +1,9 @@ import pytest import responses -from responses import matchers import tidy3d as td -from tidy3d.web.core.task_core import Folder +from responses import matchers from tidy3d.web.core.environment import Env +from tidy3d.web.core.task_core import Folder Env.dev.active() diff --git a/tests/test_web/test_tidy3d_material_library.py b/tests/test_web/test_tidy3d_material_library.py index 14bcdf5cd4..b897d92962 100644 --- a/tests/test_web/test_tidy3d_material_library.py +++ b/tests/test_web/test_tidy3d_material_library.py @@ -1,9 +1,8 @@ import pytest import responses - -from tidy3d.web.core.environment import Env -from tidy3d.web.api.material_libray import MaterialLibray import tidy3d as td +from tidy3d.web.api.material_libray import MaterialLibray +from tidy3d.web.core.environment import Env Env.dev.active() diff --git a/tests/test_web/test_tidy3d_task.py b/tests/test_web/test_tidy3d_task.py index b2d6b03314..9b067c6c97 100644 --- a/tests/test_web/test_tidy3d_task.py +++ b/tests/test_web/test_tidy3d_task.py @@ -1,10 +1,9 @@ -import pytest import tempfile +import pytest import responses -from responses import matchers - import tidy3d as td +from responses import matchers from tidy3d.web.core import http_util from tidy3d.web.core.environment import Env, EnvironmentConfig from tidy3d.web.core.task_core import Folder, SimulationTask diff --git a/tests/test_web/test_webapi.py b/tests/test_web/test_webapi.py index 064e619902..a654934056 100644 --- a/tests/test_web/test_webapi.py +++ b/tests/test_web/test_webapi.py @@ -1,29 +1,43 @@ # Tests webapi and things that depend on it +import numpy as np import pytest import responses -import numpy as np -from _pytest import monkeypatch - import tidy3d as td +from _pytest import monkeypatch from responses import matchers from tidy3d import Simulation -from tidy3d.exceptions import SetupError -from tidy3d.web.core.environment import Env -from tidy3d.web.api.webapi import delete, delete_old, download, download_json, run, abort -from tidy3d.web.api.webapi import download_log, estimate_cost, get_info, get_run_info, get_tasks -from tidy3d.web.api.webapi import load, load_simulation, start, upload, monitor, real_cost -from tidy3d.web.api.container import Job, Batch -from tidy3d.web.api.asynchronous import run_async - from tidy3d.__main__ import main -from tidy3d.web.core.types import TaskType -from tidy3d.components.source import PointDipole, GaussianPulse -from tidy3d.components.grid.grid_spec import GridSpec -from tidy3d.components.data.sim_data import SimulationData -from tidy3d.components.data.monitor_data import FieldData from tidy3d.components.data.data_array import ScalarFieldDataArray +from tidy3d.components.data.monitor_data import FieldData +from tidy3d.components.data.sim_data import SimulationData +from tidy3d.components.grid.grid_spec import GridSpec from tidy3d.components.monitor import FieldMonitor +from tidy3d.components.source import GaussianPulse, PointDipole +from tidy3d.exceptions import SetupError +from tidy3d.web.api.asynchronous import run_async +from tidy3d.web.api.container import Batch, Job +from tidy3d.web.api.webapi import ( + abort, + delete, + delete_old, + download, + download_json, + download_log, + estimate_cost, + get_info, + get_run_info, + get_tasks, + load, + load_simulation, + monitor, + real_cost, + run, + start, + upload, +) +from tidy3d.web.core.environment import Env +from tidy3d.web.core.types import TaskType TASK_NAME = "task_name_test" TASK_ID = "1234" diff --git a/tests/test_web/test_webapi_eme.py b/tests/test_web/test_webapi_eme.py index 6142f6386e..07c1a7d20c 100644 --- a/tests/test_web/test_webapi_eme.py +++ b/tests/test_web/test_webapi_eme.py @@ -2,18 +2,26 @@ import pytest import responses -from botocore.exceptions import ClientError import tidy3d as td +from botocore.exceptions import ClientError from responses import matchers from tidy3d import EMESimulation -from tidy3d.web.core.environment import Env -from tidy3d.web.api.webapi import download, download_json, run, abort -from tidy3d.web.api.webapi import estimate_cost, get_info, get_run_info -from tidy3d.web.api.webapi import load_simulation, upload -from tidy3d.web.api.container import Job, Batch from tidy3d.web.api.asynchronous import run_async - +from tidy3d.web.api.container import Batch, Job +from tidy3d.web.api.webapi import ( + abort, + download, + download_json, + estimate_cost, + get_info, + get_run_info, + load_simulation, + run, + upload, +) +from tidy3d.web.core.environment import Env from tidy3d.web.core.types import TaskType + from ..test_components.test_eme import make_eme_sim TASK_NAME = "task_name_test" diff --git a/tests/test_web/test_webapi_heat.py b/tests/test_web/test_webapi_heat.py index 6594e34219..162f5e1648 100644 --- a/tests/test_web/test_webapi_heat.py +++ b/tests/test_web/test_webapi_heat.py @@ -2,18 +2,26 @@ import pytest import responses -from botocore.exceptions import ClientError import tidy3d as td +from botocore.exceptions import ClientError from responses import matchers from tidy3d import HeatSimulation -from tidy3d.web.core.environment import Env -from tidy3d.web.api.webapi import download, download_json, run, abort -from tidy3d.web.api.webapi import estimate_cost, get_info, get_run_info -from tidy3d.web.api.webapi import load_simulation, upload -from tidy3d.web.api.container import Job, Batch from tidy3d.web.api.asynchronous import run_async - +from tidy3d.web.api.container import Batch, Job +from tidy3d.web.api.webapi import ( + abort, + download, + download_json, + estimate_cost, + get_info, + get_run_info, + load_simulation, + run, + upload, +) +from tidy3d.web.core.environment import Env from tidy3d.web.core.types import TaskType + from ..test_components.test_heat import make_heat_sim TASK_NAME = "task_name_test" diff --git a/tests/utils.py b/tests/utils.py index 97d6481ad4..ba3d7b59c0 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,20 +1,17 @@ from pathlib import Path -from typing import Dict, Tuple, List, Any, Union -import pydantic.v1 as pd -import trimesh +from typing import Any, Dict, List, Tuple, Union import numpy as np +import pydantic.v1 as pd import tidy3d as td +import trimesh import xarray as xr - from autograd.core import VJPNode from autograd.tracer import new_box - +from tidy3d import ModeIndexDataArray +from tidy3d.components.base import Tidy3dBaseModel from tidy3d.log import _get_level_int from tidy3d.web import BatchData -from tidy3d.components.base import Tidy3dBaseModel -from tidy3d import ModeIndexDataArray - """ utilities shared between all tests """ np.random.seed(4) diff --git a/tidy3d/__init__.py b/tidy3d/__init__.py index 2d43d7e8ed..70f7cecff6 100644 --- a/tidy3d/__init__.py +++ b/tidy3d/__init__.py @@ -1,162 +1,263 @@ """ Tidy3d package imports""" # grid -from .components.grid.grid import Grid, Coords -from .components.grid.grid_spec import GridSpec, UniformGrid, CustomGrid, AutoGrid +# apodization +from .components.apodization import ApodizationSpec -# subpixel -from .components.subpixel_spec import SubpixelSpec, Staircasing -from .components.subpixel_spec import VolumetricAveraging, PolarizedAveraging -from .components.subpixel_spec import HeuristicPECStaircasing, PECConformal +# boundary placement for other solvers +from .components.bc_placement import ( + MediumMediumInterface, + SimulationBoundary, + StructureBoundary, + StructureSimulationBoundary, + StructureStructureInterface, +) + +# boundary +from .components.boundary import ( + PML, + Absorber, + AbsorberParams, + BlochBoundary, + Boundary, + BoundaryEdge, + BoundaryEdgeType, + BoundarySpec, + DefaultAbsorberParameters, + DefaultPMLParameters, + DefaultStablePMLParameters, + PECBoundary, + Periodic, + PMCBoundary, + PMLParams, + PMLTypes, + StablePML, +) + +# data +from .components.data.data_array import ( + CellDataArray, + ChargeDataArray, + DiffractionDataArray, + EMECoefficientDataArray, + EMEModeIndexDataArray, + EMEScalarFieldDataArray, + EMEScalarModeFieldDataArray, + EMESMatrixDataArray, + FieldProjectionAngleDataArray, + FieldProjectionCartesianDataArray, + FieldProjectionKSpaceDataArray, + FluxDataArray, + FluxTimeDataArray, + HeatDataArray, + IndexedDataArray, + ModeAmpsDataArray, + ModeIndexDataArray, + PointDataArray, + ScalarFieldDataArray, + ScalarFieldTimeDataArray, + ScalarModeFieldDataArray, + SpatialDataArray, +) +from .components.data.dataset import ( + FieldDataset, + FieldTimeDataset, + ModeSolverDataset, + PermittivityDataset, + TetrahedralGridDataset, + TriangularGridDataset, +) +from .components.data.monitor_data import ( + AbstractFieldProjectionData, + DiffractionData, + FieldData, + FieldProjectionAngleData, + FieldProjectionCartesianData, + FieldProjectionKSpaceData, + FieldTimeData, + FluxData, + FluxTimeData, + ModeData, + ModeSolverData, + PermittivityData, +) +from .components.data.sim_data import DATA_TYPE_MAP, SimulationData +from .components.eme.data.dataset import ( + EMECoefficientDataset, + EMEFieldDataset, + EMEModeSolverDataset, + EMESMatrixDataset, +) +from .components.eme.data.monitor_data import EMECoefficientData, EMEFieldData, EMEModeSolverData +from .components.eme.data.sim_data import EMESimulationData +from .components.eme.grid import ( + EMECompositeGrid, + EMEExplicitGrid, + EMEGrid, + EMEModeSpec, + EMEUniformGrid, +) +from .components.eme.monitor import ( + EMECoefficientMonitor, + EMEFieldMonitor, + EMEModeSolverMonitor, + EMEMonitor, +) + +# EME +from .components.eme.simulation import EMESimulation +from .components.eme.sweep import EMELengthSweep, EMEModeSweep + +# field projection +from .components.field_projection import FieldProjector # geometry -from .components.geometry.base import Box, Transformed, ClipOperation, GeometryGroup -from .components.geometry.primitives import Sphere, Cylinder +from .components.geometry.base import Box, ClipOperation, Geometry, GeometryGroup, Transformed from .components.geometry.mesh import TriangleMesh from .components.geometry.polyslab import PolySlab +from .components.geometry.primitives import Cylinder, Sphere +from .components.grid.grid import Coords, Coords1D, FieldGrid, Grid, YeeGrid +from .components.grid.grid_spec import AutoGrid, CustomGrid, GridSpec, UniformGrid +from .components.heat.boundary import ConvectionBC, HeatBoundarySpec, HeatFluxBC, TemperatureBC +from .components.heat.data.monitor_data import TemperatureData +from .components.heat.data.sim_data import HeatSimulationData +from .components.heat.grid import DistanceUnstructuredGrid, UniformUnstructuredGrid +from .components.heat.monitor import TemperatureMonitor +from .components.heat.simulation import HeatSimulation +from .components.heat.source import UniformHeatSource -# medium -from .components.medium import Medium, PoleResidue, AnisotropicMedium, PEC, PECMedium -from .components.medium import Medium2D, PEC2D, medium_from_nk -from .components.medium import Sellmeier, Debye, Drude, Lorentz -from .components.medium import CustomMedium, CustomPoleResidue -from .components.medium import CustomSellmeier, FullyAnisotropicMedium -from .components.medium import CustomLorentz, CustomDrude, CustomDebye, CustomAnisotropicMedium -from .components.medium import NonlinearSusceptibility, TwoPhotonAbsorption, KerrNonlinearity -from .components.transformation import RotationAroundAxis -from .components.medium import PerturbationMedium, PerturbationPoleResidue -from .components.parameter_perturbation import ParameterPerturbation -from .components.parameter_perturbation import LinearHeatPerturbation, CustomHeatPerturbation -from .components.parameter_perturbation import LinearChargePerturbation, CustomChargePerturbation +# heat +from .components.heat_spec import FluidSpec, SolidSpec -# time modulation -from .components.time_modulation import SpaceTimeModulation, SpaceModulation -from .components.time_modulation import ContinuousWaveTimeModulation, ModulationSpec +# lumped elements +from .components.lumped_element import CoaxialLumpedResistor, LumpedResistor -# structures -from .components.structure import Structure, MeshOverrideStructure +# medium +# for docs +from .components.medium import ( + PEC, + PEC2D, + AbstractMedium, + AnisotropicMedium, + CustomAnisotropicMedium, + CustomDebye, + CustomDrude, + CustomLorentz, + CustomMedium, + CustomPoleResidue, + CustomSellmeier, + Debye, + Drude, + FullyAnisotropicMedium, + KerrNonlinearity, + Lorentz, + Medium, + Medium2D, + NonlinearModel, + NonlinearSpec, + NonlinearSusceptibility, + PECMedium, + PerturbationMedium, + PerturbationPoleResidue, + PoleResidue, + Sellmeier, + TwoPhotonAbsorption, + medium_from_nk, +) # modes from .components.mode import ModeSpec -# apodization -from .components.apodization import ApodizationSpec - -# sources -from .components.source import GaussianPulse, ContinuousWave, CustomSourceTime -from .components.source import UniformCurrentSource, PlaneWave, ModeSource, PointDipole -from .components.source import GaussianBeam, AstigmaticGaussianBeam -from .components.source import CustomFieldSource, TFSF, CustomCurrentSource - # monitors -from .components.monitor import FieldMonitor, FieldTimeMonitor, FluxMonitor, FluxTimeMonitor -from .components.monitor import ModeMonitor, ModeSolverMonitor, PermittivityMonitor -from .components.monitor import FieldProjectionAngleMonitor, FieldProjectionCartesianMonitor -from .components.monitor import FieldProjectionKSpaceMonitor, FieldProjectionSurface -from .components.monitor import DiffractionMonitor - -# lumped elements -from .components.lumped_element import LumpedResistor, CoaxialLumpedResistor +from .components.monitor import ( + DiffractionMonitor, + FieldMonitor, + FieldProjectionAngleMonitor, + FieldProjectionCartesianMonitor, + FieldProjectionKSpaceMonitor, + FieldProjectionSurface, + FieldTimeMonitor, + FluxMonitor, + FluxTimeMonitor, + ModeMonitor, + ModeSolverMonitor, + Monitor, + PermittivityMonitor, +) +from .components.parameter_perturbation import ( + CustomChargePerturbation, + CustomHeatPerturbation, + LinearChargePerturbation, + LinearHeatPerturbation, + ParameterPerturbation, +) # run time spec from .components.run_time_spec import RunTimeSpec +# scene +from .components.scene import Scene + # simulation from .components.simulation import Simulation -# field projection -from .components.field_projection import FieldProjector +# sources +from .components.source import ( + TFSF, + AstigmaticGaussianBeam, + ContinuousWave, + CustomCurrentSource, + CustomFieldSource, + CustomSourceTime, + GaussianBeam, + GaussianPulse, + ModeSource, + PlaneWave, + PointDipole, + Source, + SourceTime, + UniformCurrentSource, +) -# data -from .components.data.data_array import ScalarFieldDataArray, ScalarModeFieldDataArray -from .components.data.data_array import ScalarFieldTimeDataArray, SpatialDataArray -from .components.data.data_array import ModeAmpsDataArray, ModeIndexDataArray -from .components.data.data_array import FluxDataArray, FluxTimeDataArray -from .components.data.data_array import FieldProjectionAngleDataArray -from .components.data.data_array import FieldProjectionCartesianDataArray -from .components.data.data_array import FieldProjectionKSpaceDataArray -from .components.data.data_array import DiffractionDataArray -from .components.data.data_array import HeatDataArray, ChargeDataArray -from .components.data.dataset import FieldDataset, FieldTimeDataset -from .components.data.dataset import PermittivityDataset, ModeSolverDataset -from .components.data.monitor_data import FieldData, FieldTimeData, PermittivityData -from .components.data.monitor_data import FluxData, FluxTimeData -from .components.data.monitor_data import ModeData, ModeSolverData -from .components.data.monitor_data import AbstractFieldProjectionData -from .components.data.monitor_data import FieldProjectionAngleData, FieldProjectionCartesianData -from .components.data.monitor_data import FieldProjectionKSpaceData -from .components.data.monitor_data import DiffractionData -from .components.data.sim_data import SimulationData -from .components.data.sim_data import DATA_TYPE_MAP -from .components.data.data_array import PointDataArray, CellDataArray, IndexedDataArray -from .components.data.dataset import TriangularGridDataset, TetrahedralGridDataset +# structures +from .components.structure import MeshOverrideStructure, Structure -# boundary -from .components.boundary import BoundarySpec, Boundary, BoundaryEdge, BoundaryEdgeType -from .components.boundary import BlochBoundary, Periodic, PECBoundary, PMCBoundary -from .components.boundary import PML, StablePML, Absorber, PMLParams, AbsorberParams, PMLTypes -from .components.boundary import DefaultPMLParameters, DefaultStablePMLParameters -from .components.boundary import DefaultAbsorberParameters +# subpixel +from .components.subpixel_spec import ( + HeuristicPECStaircasing, + PECConformal, + PolarizedAveraging, + Staircasing, + SubpixelSpec, + VolumetricAveraging, +) + +# time modulation +from .components.time_modulation import ( + ContinuousWaveTimeModulation, + ModulationSpec, + SpaceModulation, + SpaceTimeModulation, +) +from .components.transformation import RotationAroundAxis + +# config +from .config import config # constants imported as `C_0 = td.C_0` or `td.constants.C_0` -from .constants import C_0, ETA_0, HBAR, EPSILON_0, MU_0, Q_e, K_B, inf +from .constants import C_0, EPSILON_0, ETA_0, HBAR, K_B, MU_0, Q_e, inf +from .log import log, set_logging_console, set_logging_file # material library dict imported as `from tidy3d import material_library` # get material `mat` and variant `var` as `material_library[mat][var]` from .material_library.material_library import material_library from .material_library.parametric_materials import Graphene -# for docs -from .components.medium import AbstractMedium, NonlinearSpec, NonlinearModel -from .components.geometry.base import Geometry -from .components.source import Source, SourceTime -from .components.monitor import Monitor -from .components.grid.grid import YeeGrid, FieldGrid, Coords1D - -from .log import log, set_logging_file, set_logging_console - -# config -from .config import config - -# version -from .version import __version__ - # updater from .updater import Updater -# scene -from .components.scene import Scene - -# boundary placement for other solvers -from .components.bc_placement import StructureStructureInterface, StructureBoundary -from .components.bc_placement import MediumMediumInterface -from .components.bc_placement import StructureSimulationBoundary -from .components.bc_placement import SimulationBoundary - -# heat -from .components.heat_spec import FluidSpec, SolidSpec -from .components.heat.simulation import HeatSimulation -from .components.heat.data.sim_data import HeatSimulationData -from .components.heat.data.monitor_data import TemperatureData -from .components.heat.boundary import TemperatureBC, ConvectionBC, HeatFluxBC, HeatBoundarySpec -from .components.heat.source import UniformHeatSource -from .components.heat.monitor import TemperatureMonitor -from .components.heat.grid import UniformUnstructuredGrid, DistanceUnstructuredGrid - -# EME -from .components.eme.simulation import EMESimulation -from .components.eme.data.sim_data import EMESimulationData -from .components.eme.monitor import EMECoefficientMonitor, EMEModeSolverMonitor, EMEFieldMonitor -from .components.eme.monitor import EMEMonitor -from .components.data.data_array import EMESMatrixDataArray, EMEScalarFieldDataArray -from .components.data.data_array import EMECoefficientDataArray -from .components.data.data_array import EMEScalarModeFieldDataArray, EMEModeIndexDataArray -from .components.eme.data.dataset import EMEFieldDataset, EMECoefficientDataset, EMESMatrixDataset -from .components.eme.data.dataset import EMEModeSolverDataset -from .components.eme.data.monitor_data import EMEModeSolverData, EMEFieldData, EMECoefficientData -from .components.eme.grid import EMEUniformGrid, EMECompositeGrid, EMEExplicitGrid -from .components.eme.grid import EMEGrid, EMEModeSpec -from .components.eme.sweep import EMELengthSweep, EMEModeSweep +# version +from .version import __version__ def set_logging_level(level: str) -> None: diff --git a/tidy3d/__main__.py b/tidy3d/__main__.py index b0ffe5e5d3..51a12e799a 100644 --- a/tidy3d/__main__.py +++ b/tidy3d/__main__.py @@ -1,6 +1,6 @@ """ command-line interface. For instructions run `python -m tidy3d --help` """ -import sys import argparse +import sys from tidy3d import Simulation from tidy3d.web import Job diff --git a/tidy3d/components/apodization.py b/tidy3d/components/apodization.py index 47f713285d..d4a848c27f 100644 --- a/tidy3d/components/apodization.py +++ b/tidy3d/components/apodization.py @@ -1,11 +1,11 @@ """Defines specification for apodization.""" -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from .base import Tidy3dBaseModel, skip_if_fields_missing from ..constants import SECOND from ..exceptions import SetupError +from .base import Tidy3dBaseModel, skip_if_fields_missing from .types import ArrayFloat1D, Ax from .viz import add_ax_if_none diff --git a/tidy3d/components/autograd.py b/tidy3d/components/autograd.py index bd58e6cb77..06b9e0e8aa 100644 --- a/tidy3d/components/autograd.py +++ b/tidy3d/components/autograd.py @@ -1,14 +1,14 @@ # utilities for working with autograd -from autograd.extend import Box, primitive, defvjp -from autograd.builtins import dict as dict_ag -from autograd.tracer import getval +import typing -import xarray as xr import numpy as np +import xarray as xr +from autograd.builtins import dict as dict_ag +from autograd.extend import Box, defvjp, primitive +from autograd.tracer import getval -import typing -from .types import Size1D, Bound, ArrayFloat2D, ArrayLike +from .types import ArrayFloat2D, ArrayLike, Bound, Size1D # TODO: should we use ArrayBox? Box is more general diff --git a/tidy3d/components/base.py b/tidy3d/components/base.py index 151c7124cd..840a3c47ad 100644 --- a/tidy3d/components/base.py +++ b/tidy3d/components/base.py @@ -1,34 +1,32 @@ """global configuration / base class for pydantic models used to make simulation.""" from __future__ import annotations +import hashlib +import io import json -import pathlib import os +import pathlib import tempfile from functools import wraps -from typing import List, Callable, Dict, Union, Tuple, Any from math import ceil -import io -import hashlib +from typing import Any, Callable, Dict, List, Tuple, Union -import rich -import pydantic.v1 as pydantic -from pydantic.v1.fields import ModelField -import yaml -import numpy as np import h5py +import numpy as np +import pydantic.v1 as pydantic +import rich import xarray as xr - -from .autograd import Box, AutogradFieldMap, get_static -from autograd.tracer import isbox +import yaml from autograd.builtins import dict as dict_ag +from autograd.tracer import isbox +from pydantic.v1.fields import ModelField -from .types import ComplexNumber, Literal, TYPE_TAG_STR -from .data.data_array import DataArray, DATA_ARRAY_MAP, AUTOGRAD_KEY -from .file_util import compress_file_to_gzip, extract_gzip_file from ..exceptions import FileError from ..log import log - +from .autograd import AutogradFieldMap, Box, get_static +from .data.data_array import AUTOGRAD_KEY, DATA_ARRAY_MAP, DataArray +from .file_util import compress_file_to_gzip, extract_gzip_file +from .types import TYPE_TAG_STR, ComplexNumber, Literal INDENT_JSON_FILE = 4 # default indentation of json string in json files INDENT = None # default indentation of json string used internally diff --git a/tidy3d/components/base_sim/data/monitor_data.py b/tidy3d/components/base_sim/data/monitor_data.py index fffcf130c2..d99e8debaf 100644 --- a/tidy3d/components/base_sim/data/monitor_data.py +++ b/tidy3d/components/base_sim/data/monitor_data.py @@ -1,11 +1,12 @@ """Abstract base for monitor data structures.""" from __future__ import annotations + from abc import ABC import pydantic.v1 as pd -from ..monitor import AbstractMonitor from ...data.dataset import Dataset +from ..monitor import AbstractMonitor class AbstractMonitorData(Dataset, ABC): diff --git a/tidy3d/components/base_sim/data/sim_data.py b/tidy3d/components/base_sim/data/sim_data.py index f782e1ecf0..cfcd892041 100644 --- a/tidy3d/components/base_sim/data/sim_data.py +++ b/tidy3d/components/base_sim/data/sim_data.py @@ -1,20 +1,19 @@ """Abstract base for simulation data structures.""" from __future__ import annotations -from typing import Dict, Tuple, Union from abc import ABC +from typing import Dict, Tuple, Union -import xarray as xr -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd +import xarray as xr -from .monitor_data import AbstractMonitorData -from ..simulation import AbstractSimulation +from ....exceptions import DataError, Tidy3dKeyError, ValidationError +from ...base import Tidy3dBaseModel, skip_if_fields_missing from ...data.dataset import UnstructuredGridDatasetType -from ...base import Tidy3dBaseModel -from ...base import skip_if_fields_missing from ...types import FieldVal -from ....exceptions import DataError, Tidy3dKeyError, ValidationError +from ..simulation import AbstractSimulation +from .monitor_data import AbstractMonitorData class AbstractSimulationData(Tidy3dBaseModel, ABC): diff --git a/tidy3d/components/base_sim/monitor.py b/tidy3d/components/base_sim/monitor.py index ff13887fd3..a4e4bc5c3f 100644 --- a/tidy3d/components/base_sim/monitor.py +++ b/tidy3d/components/base_sim/monitor.py @@ -2,13 +2,12 @@ from abc import ABC, abstractmethod from typing import Tuple -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from ..types import ArrayFloat1D, Numpy -from ..types import Axis -from ..geometry.base import Box from ..base import cached_property +from ..geometry.base import Box +from ..types import ArrayFloat1D, Axis, Numpy from ..viz import PlotParams, plot_params_monitor diff --git a/tidy3d/components/base_sim/simulation.py b/tidy3d/components/base_sim/simulation.py index 32d76855c2..429ff61ca3 100644 --- a/tidy3d/components/base_sim/simulation.py +++ b/tidy3d/components/base_sim/simulation.py @@ -5,26 +5,20 @@ from typing import Tuple import autograd.numpy as anp - import pydantic.v1 as pd -from .monitor import AbstractMonitor - +from ...exceptions import Tidy3dKeyError +from ...log import log +from ...version import __version__ from ..base import cached_property, skip_if_fields_missing -from ..validators import assert_unique_names, assert_objects_in_sim_bounds from ..geometry.base import Box -from ..types import Ax, Bound, Axis, Symmetry, TYPE_TAG_STR -from ..structure import Structure -from ..viz import add_ax_if_none, equal_aspect -from ..scene import Scene - from ..medium import Medium, MediumType3D - -from ..viz import PlotParams, plot_params_symmetry - -from ...version import __version__ -from ...exceptions import Tidy3dKeyError -from ...log import log +from ..scene import Scene +from ..structure import Structure +from ..types import TYPE_TAG_STR, Ax, Axis, Bound, Symmetry +from ..validators import assert_objects_in_sim_bounds, assert_unique_names +from ..viz import PlotParams, add_ax_if_none, equal_aspect, plot_params_symmetry +from .monitor import AbstractMonitor class AbstractSimulation(Box, ABC): diff --git a/tidy3d/components/base_sim/source.py b/tidy3d/components/base_sim/source.py index d2089523b4..78c3ab7953 100644 --- a/tidy3d/components/base_sim/source.py +++ b/tidy3d/components/base_sim/source.py @@ -1,10 +1,11 @@ """Abstract base for classes that define simulation sources.""" from __future__ import annotations + from abc import ABC, abstractmethod + import pydantic.v1 as pydantic from ..base import Tidy3dBaseModel - from ..validators import validate_name_str from ..viz import PlotParams diff --git a/tidy3d/components/bc_placement.py b/tidy3d/components/bc_placement.py index 5b48a77c17..26ee10b9bc 100644 --- a/tidy3d/components/bc_placement.py +++ b/tidy3d/components/bc_placement.py @@ -2,13 +2,13 @@ from __future__ import annotations from abc import ABC -from typing import Union, Tuple +from typing import Tuple, Union import pydantic.v1 as pd -from .types import BoxSurface -from .base import Tidy3dBaseModel from ..exceptions import SetupError +from .base import Tidy3dBaseModel +from .types import BoxSurface class AbstractBCPlacement(ABC, Tidy3dBaseModel): diff --git a/tidy3d/components/boundary.py b/tidy3d/components/boundary.py index 372cac4457..6c97715cb5 100644 --- a/tidy3d/components/boundary.py +++ b/tidy3d/components/boundary.py @@ -2,19 +2,18 @@ from __future__ import annotations from abc import ABC -from typing import Union, Tuple, List +from typing import List, Tuple, Union -import pydantic.v1 as pd import numpy as np - -from .base import Tidy3dBaseModel, cached_property -from .types import Complex, Axis, TYPE_TAG_STR -from .source import GaussianBeam, ModeSource, PlaneWave, TFSF -from .medium import Medium +import pydantic.v1 as pd from ..constants import EPSILON_0, MU_0, PML_SIGMA -from ..exceptions import SetupError, DataError +from ..exceptions import DataError, SetupError from ..log import log +from .base import Tidy3dBaseModel, cached_property +from .medium import Medium +from .source import TFSF, GaussianBeam, ModeSource, PlaneWave +from .types import TYPE_TAG_STR, Axis, Complex class BoundaryEdge(ABC, Tidy3dBaseModel): diff --git a/tidy3d/components/data/data_array.py b/tidy3d/components/data/data_array.py index 588a742b64..de878c347a 100644 --- a/tidy3d/components/data/data_array.py +++ b/tidy3d/components/data/data_array.py @@ -1,16 +1,16 @@ """Storing tidy3d data at it's most fundamental level as xr.DataArray objects""" from __future__ import annotations -from typing import Dict, List, Union + from abc import ABC +from typing import Dict, List, Union -import xarray as xr -import numpy as np -import pandas import dask import h5py - -from autograd.tracer import isbox, getval +import numpy as np +import pandas +import xarray as xr +from autograd.tracer import getval, isbox from ...constants import ( HERTZ, @@ -21,7 +21,7 @@ WATT, ) from ...exceptions import DataError, FileError -from ..types import Bound, Axis +from ..types import Axis, Bound # maps the dimension names to their attributes DIM_ATTRS = { diff --git a/tidy3d/components/data/dataset.py b/tidy3d/components/data/dataset.py index 1f61fada11..79d3ae4df7 100644 --- a/tidy3d/components/data/dataset.py +++ b/tidy3d/components/data/dataset.py @@ -1,33 +1,41 @@ """Collections of DataArrays.""" from __future__ import annotations +import numbers from abc import ABC, abstractmethod -from typing import Union, Dict, Callable, Any, Tuple +from typing import Any, Callable, Dict, Tuple, Union -import xarray as xr import numpy as np import pydantic.v1 as pd -from matplotlib.tri import Triangulation +import xarray as xr from matplotlib import pyplot as plt -import numbers +from matplotlib.tri import Triangulation -from .data_array import DataArray, DATA_ARRAY_MAP -from .data_array import ScalarFieldDataArray, ScalarFieldTimeDataArray, ScalarModeFieldDataArray -from .data_array import ModeIndexDataArray, GroupIndexDataArray, ModeDispersionDataArray -from .data_array import TriangleMeshDataArray -from .data_array import TimeDataArray -from .data_array import PointDataArray, IndexedDataArray, CellDataArray, SpatialDataArray -from .data_array import EMEScalarFieldDataArray, EMEScalarModeFieldDataArray - -from ..viz import equal_aspect, add_ax_if_none, plot_params_grid -from ..base import Tidy3dBaseModel, cached_property -from ..base import skip_if_fields_missing -from ..types import Axis, Bound, ArrayLike, Ax, Coordinate, Literal, annotate_type -from ...packaging import vtk, requires_vtk -from ...exceptions import DataError, ValidationError, Tidy3dNotImplementedError from ...constants import PICOSECOND_PER_NANOMETER_PER_KILOMETER, inf +from ...exceptions import DataError, Tidy3dNotImplementedError, ValidationError from ...log import log - +from ...packaging import requires_vtk, vtk +from ..base import Tidy3dBaseModel, cached_property, skip_if_fields_missing +from ..types import ArrayLike, Ax, Axis, Bound, Coordinate, Literal, annotate_type +from ..viz import add_ax_if_none, equal_aspect, plot_params_grid +from .data_array import ( + DATA_ARRAY_MAP, + CellDataArray, + DataArray, + EMEScalarFieldDataArray, + EMEScalarModeFieldDataArray, + GroupIndexDataArray, + IndexedDataArray, + ModeDispersionDataArray, + ModeIndexDataArray, + PointDataArray, + ScalarFieldDataArray, + ScalarFieldTimeDataArray, + ScalarModeFieldDataArray, + SpatialDataArray, + TimeDataArray, + TriangleMeshDataArray, +) DEFAULT_MAX_SAMPLES_PER_STEP = 10_000 DEFAULT_MAX_CELLS_PER_STEP = 10_000 diff --git a/tidy3d/components/data/monitor_data.py b/tidy3d/components/data/monitor_data.py index 2f2145efa0..f3ee8c6173 100644 --- a/tidy3d/components/data/monitor_data.py +++ b/tidy3d/components/data/monitor_data.py @@ -1,44 +1,78 @@ """ Monitor Level Data, store the DataArrays associated with a single monitor.""" from __future__ import annotations -from abc import ABC -from typing import Union, Tuple, Callable, Dict, List, Any import warnings +from abc import ABC +from typing import Any, Callable, Dict, List, Tuple, Union -import xarray as xr import numpy as np import pydantic.v1 as pd +import xarray as xr from pandas import DataFrame -from .data_array import FluxTimeDataArray, FluxDataArray -from .data_array import MixedModeDataArray, ModeAmpsDataArray -from .data_array import GroupIndexDataArray, ModeDispersionDataArray -from .data_array import FieldProjectionAngleDataArray, FieldProjectionCartesianDataArray -from .data_array import FieldProjectionKSpaceDataArray -from .data_array import DataArray, DiffractionDataArray -from .data_array import ScalarFieldDataArray, ScalarFieldTimeDataArray -from .data_array import FreqDataArray, TimeDataArray, FreqModeDataArray -from .data_array import EMEFreqModeDataArray -from .dataset import Dataset, AbstractFieldDataset, ElectromagneticFieldDataset -from .dataset import FieldDataset, FieldTimeDataset, ModeSolverDataset, PermittivityDataset -from ..base import TYPE_TAG_STR, cached_property, skip_if_fields_missing -from ..types import Coordinate, Symmetry, ArrayFloat1D, ArrayFloat2D, Size, Numpy, TrackFreq -from ..types import EpsSpecType, Literal -from ..grid.grid import Grid, Coords -from ..validators import enforce_monitor_fields_present, required_if_symmetry_present -from ..source import GaussianPulse, ModeSource, Source, PlaneWave -from ..monitor import MonitorType, FieldMonitor, FieldTimeMonitor, ModeSolverMonitor -from ..monitor import ModeMonitor, FluxMonitor, FluxTimeMonitor, PermittivityMonitor -from ..monitor import FieldProjectionAngleMonitor, FieldProjectionCartesianMonitor -from ..monitor import FieldProjectionKSpaceMonitor, FieldProjectionSurface -from ..monitor import DiffractionMonitor -from ..source import SourceTimeType, CustomFieldSource -from ..medium import Medium, MediumType -from ...exceptions import SetupError, DataError, Tidy3dNotImplementedError, ValidationError -from ...constants import ETA_0, C_0, MICROMETER +from ...constants import C_0, ETA_0, MICROMETER +from ...exceptions import DataError, SetupError, Tidy3dNotImplementedError, ValidationError from ...log import log - +from ..base import TYPE_TAG_STR, cached_property, skip_if_fields_missing from ..base_sim.data.monitor_data import AbstractMonitorData +from ..grid.grid import Coords, Grid +from ..medium import Medium, MediumType +from ..monitor import ( + DiffractionMonitor, + FieldMonitor, + FieldProjectionAngleMonitor, + FieldProjectionCartesianMonitor, + FieldProjectionKSpaceMonitor, + FieldProjectionSurface, + FieldTimeMonitor, + FluxMonitor, + FluxTimeMonitor, + ModeMonitor, + ModeSolverMonitor, + MonitorType, + PermittivityMonitor, +) +from ..source import CustomFieldSource, GaussianPulse, ModeSource, PlaneWave, Source, SourceTimeType +from ..types import ( + ArrayFloat1D, + ArrayFloat2D, + Coordinate, + EpsSpecType, + Literal, + Numpy, + Size, + Symmetry, + TrackFreq, +) +from ..validators import enforce_monitor_fields_present, required_if_symmetry_present +from .data_array import ( + DataArray, + DiffractionDataArray, + EMEFreqModeDataArray, + FieldProjectionAngleDataArray, + FieldProjectionCartesianDataArray, + FieldProjectionKSpaceDataArray, + FluxDataArray, + FluxTimeDataArray, + FreqDataArray, + FreqModeDataArray, + GroupIndexDataArray, + MixedModeDataArray, + ModeAmpsDataArray, + ModeDispersionDataArray, + ScalarFieldDataArray, + ScalarFieldTimeDataArray, + TimeDataArray, +) +from .dataset import ( + AbstractFieldDataset, + Dataset, + ElectromagneticFieldDataset, + FieldDataset, + FieldTimeDataset, + ModeSolverDataset, + PermittivityDataset, +) Coords1D = ArrayFloat1D diff --git a/tidy3d/components/data/sim_data.py b/tidy3d/components/data/sim_data.py index 45495201e8..ef5c183def 100644 --- a/tidy3d/components/data/sim_data.py +++ b/tidy3d/components/data/sim_data.py @@ -1,35 +1,33 @@ """ Simulation Level Data """ from __future__ import annotations -from typing import Callable, Tuple, Union + +import json +import pathlib from abc import ABC from collections import defaultdict +from typing import Callable, Tuple, Union -import pathlib -import xarray as xr -import pydantic.v1 as pd -import numpy as np import h5py -import json - - -from .monitor_data import ( - MonitorDataTypes, - MonitorDataType, - AbstractFieldData, - FieldTimeData, -) +import numpy as np +import pydantic.v1 as pd +import xarray as xr -from ..simulation import Simulation -from ..structure import Structure -from ..monitor import Monitor -from ..source import Source -from ..types import Ax, Axis, annotate_type, FieldVal, PlotScale, ColormapType -from ..viz import equal_aspect, add_ax_if_none from ...exceptions import DataError, Tidy3dKeyError from ...log import log from ..base import JSON_TAG from ..base_sim.data.sim_data import AbstractSimulationData - +from ..monitor import Monitor +from ..simulation import Simulation +from ..source import Source +from ..structure import Structure +from ..types import Ax, Axis, ColormapType, FieldVal, PlotScale, annotate_type +from ..viz import add_ax_if_none, equal_aspect +from .monitor_data import ( + AbstractFieldData, + FieldTimeData, + MonitorDataType, + MonitorDataTypes, +) DATA_TYPE_MAP = {data.__fields__["monitor"].type_: data for data in MonitorDataTypes} diff --git a/tidy3d/components/data/validators.py b/tidy3d/components/data/validators.py index f3c30ff9f4..9afddb8bcd 100644 --- a/tidy3d/components/data/validators.py +++ b/tidy3d/components/data/validators.py @@ -1,11 +1,11 @@ # special validators for Datasets -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd +from ...exceptions import ValidationError from .data_array import DataArray from .dataset import AbstractFieldDataset -from ...exceptions import ValidationError # this can't go in validators.py because that file imports dataset.py diff --git a/tidy3d/components/eme/data/dataset.py b/tidy3d/components/eme/data/dataset.py index 65ffb9fa9c..e1de6e1b08 100644 --- a/tidy3d/components/eme/data/dataset.py +++ b/tidy3d/components/eme/data/dataset.py @@ -1,13 +1,16 @@ """EME dataset""" from __future__ import annotations - import pydantic.v1 as pd +from ...data.data_array import ( + EMECoefficientDataArray, + EMEModeIndexDataArray, + EMEScalarFieldDataArray, + EMEScalarModeFieldDataArray, + EMESMatrixDataArray, +) from ...data.dataset import Dataset, ElectromagneticFieldDataset -from ...data.data_array import EMEScalarFieldDataArray, EMESMatrixDataArray -from ...data.data_array import EMECoefficientDataArray -from ...data.data_array import EMEModeIndexDataArray, EMEScalarModeFieldDataArray class EMESMatrixDataset(Dataset): diff --git a/tidy3d/components/eme/data/monitor_data.py b/tidy3d/components/eme/data/monitor_data.py index 99780af052..44b0558e8c 100644 --- a/tidy3d/components/eme/data/monitor_data.py +++ b/tidy3d/components/eme/data/monitor_data.py @@ -6,10 +6,9 @@ import pydantic.v1 as pd from ...base_sim.data.monitor_data import AbstractMonitorData -from ..monitor import EMEModeSolverMonitor, EMEFieldMonitor, EMECoefficientMonitor -from ...data.monitor_data import ModeSolverData, ElectromagneticFieldData - -from .dataset import EMEFieldDataset, EMECoefficientDataset, EMEModeSolverDataset +from ...data.monitor_data import ElectromagneticFieldData, ModeSolverData +from ..monitor import EMECoefficientMonitor, EMEFieldMonitor, EMEModeSolverMonitor +from .dataset import EMECoefficientDataset, EMEFieldDataset, EMEModeSolverDataset class EMEModeSolverData(ElectromagneticFieldData, EMEModeSolverDataset): diff --git a/tidy3d/components/eme/data/sim_data.py b/tidy3d/components/eme/data/sim_data.py index 0b5a22239a..9d4dda6ce6 100644 --- a/tidy3d/components/eme/data/sim_data.py +++ b/tidy3d/components/eme/data/sim_data.py @@ -1,20 +1,19 @@ """EME simulation data""" from __future__ import annotations -from typing import Tuple, Union, Optional, Literal +from typing import Literal, Optional, Tuple, Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from ..simulation import EMESimulation -from .monitor_data import EMEMonitorDataType, EMEModeSolverData, EMEFieldData -from .dataset import EMESMatrixDataset -from ...data.data_array import EMESMatrixDataArray, EMEScalarFieldDataArray -from ...data.sim_data import AbstractYeeGridSimulationData - -from ...types import annotate_type from ....exceptions import SetupError +from ...data.data_array import EMEScalarFieldDataArray, EMESMatrixDataArray from ...data.monitor_data import FieldData, ModeData, ModeSolverData +from ...data.sim_data import AbstractYeeGridSimulationData +from ...types import annotate_type +from ..simulation import EMESimulation +from .dataset import EMESMatrixDataset +from .monitor_data import EMEFieldData, EMEModeSolverData, EMEMonitorDataType class EMESimulationData(AbstractYeeGridSimulationData): diff --git a/tidy3d/components/eme/grid.py b/tidy3d/components/eme/grid.py index bba3571f9c..ec44dc37e8 100644 --- a/tidy3d/components/eme/grid.py +++ b/tidy3d/components/eme/grid.py @@ -1,19 +1,19 @@ """Defines cells for the EME simulation.""" from __future__ import annotations -from typing import List, Union, Tuple, Literal from abc import ABC, abstractmethod -import numpy as np +from typing import List, Literal, Tuple, Union +import numpy as np import pydantic.v1 as pd +from ...constants import RADIAN, fp_eps +from ...exceptions import SetupError, ValidationError from ..base import Tidy3dBaseModel, skip_if_fields_missing from ..geometry.base import Box -from ..mode import ModeSpec -from ..types import Axis, Coordinate, Size, annotate_type, TrackFreq -from ...constants import RADIAN, fp_eps from ..grid.grid import Coords1D -from ...exceptions import ValidationError, SetupError +from ..mode import ModeSpec +from ..types import Axis, Coordinate, Size, TrackFreq, annotate_type # grid limits MAX_NUM_MODES = 100 diff --git a/tidy3d/components/eme/monitor.py b/tidy3d/components/eme/monitor.py index 09d5388436..379a0b7a82 100644 --- a/tidy3d/components/eme/monitor.py +++ b/tidy3d/components/eme/monitor.py @@ -1,16 +1,14 @@ """EME monitors""" from __future__ import annotations -import pydantic.v1 as pd - -from typing import Union, List, Optional, Tuple, Literal - from abc import ABC, abstractmethod +from typing import List, Literal, Optional, Tuple, Union + +import pydantic.v1 as pd from ..base_sim.monitor import AbstractMonitor from ..monitor import AbstractFieldMonitor, ModeSolverMonitor - BYTES_COMPLEX = 8 diff --git a/tidy3d/components/eme/simulation.py b/tidy3d/components/eme/simulation.py index 7d39cb121e..5ff4a42227 100644 --- a/tidy3d/components/eme/simulation.py +++ b/tidy3d/components/eme/simulation.py @@ -1,32 +1,29 @@ """Defines EME simulation class.""" from __future__ import annotations -from typing import Tuple, List, Dict, Optional, Literal +from typing import Dict, List, Literal, Optional, Tuple -import pydantic.v1 as pd import matplotlib as mpl import numpy as np +import pydantic.v1 as pd -from ..types import Ax -from ..simulation import AbstractYeeGridSimulation -from ..viz import add_ax_if_none, equal_aspect +from ...exceptions import SetupError +from ...log import log +from ..base import cached_property from ..boundary import BoundarySpec, PECBoundary -from ..grid.grid_spec import GridSpec from ..grid.grid import Grid -from ..types import Axis, annotate_type -from ..base import cached_property -from ..scene import Scene +from ..grid.grid_spec import GridSpec from ..medium import FullyAnisotropicMedium +from ..monitor import AbstractModeMonitor, FieldMonitor, ModeSolverMonitor, Monitor +from ..scene import Scene +from ..simulation import AbstractYeeGridSimulation +from ..source import GaussianPulse, ModeSource from ..structure import Structure -from ..source import ModeSource, GaussianPulse -from ..monitor import ModeSolverMonitor, AbstractModeMonitor, FieldMonitor, Monitor -from ...exceptions import SetupError -from ...log import log - -from .monitor import EMEMonitor, EMEMonitorType, EMEFieldMonitor, EMEModeSolverMonitor -from .grid import EMEGridSpecType, EMEGrid, EMEGridSpec, EMECompositeGrid -from .sweep import EMESweepSpecType, EMEModeSweep, EMELengthSweep - +from ..types import Ax, Axis, annotate_type +from ..viz import add_ax_if_none, equal_aspect +from .grid import EMECompositeGrid, EMEGrid, EMEGridSpec, EMEGridSpecType +from .monitor import EMEFieldMonitor, EMEModeSolverMonitor, EMEMonitor, EMEMonitorType +from .sweep import EMELengthSweep, EMEModeSweep, EMESweepSpecType # maximum numbers of simulation parameters MAX_GRID_CELLS = 20e9 diff --git a/tidy3d/components/eme/sweep.py b/tidy3d/components/eme/sweep.py index 4cb23d8eb0..6198aa75fc 100644 --- a/tidy3d/components/eme/sweep.py +++ b/tidy3d/components/eme/sweep.py @@ -1,8 +1,8 @@ """Defines sweep settings for the EME simulation.""" from __future__ import annotations -from typing import List, Union from abc import ABC +from typing import List, Union import pydantic.v1 as pd diff --git a/tidy3d/components/field_projection.py b/tidy3d/components/field_projection.py index 6098a22ebf..04f67af113 100644 --- a/tidy3d/components/field_projection.py +++ b/tidy3d/components/field_projection.py @@ -1,28 +1,41 @@ """Near field to far field transformation plugin """ from __future__ import annotations -from typing import Dict, Tuple, Union, List + +from typing import Dict, List, Tuple, Union + import numpy as np -import xarray as xr import pydantic.v1 as pydantic - +import xarray as xr from rich.progress import track -from .data.data_array import FieldProjectionAngleDataArray, FieldProjectionCartesianDataArray -from .data.data_array import FieldProjectionKSpaceDataArray -from .data.monitor_data import FieldData -from .data.monitor_data import AbstractFieldProjectionData, FieldProjectionAngleData -from .data.monitor_data import FieldProjectionCartesianData, FieldProjectionKSpaceData -from .data.sim_data import SimulationData -from .monitor import FieldProjectionSurface -from .monitor import FieldMonitor, AbstractFieldProjectionMonitor, FieldProjectionAngleMonitor -from .monitor import FieldProjectionCartesianMonitor, FieldProjectionKSpaceMonitor -from .types import Direction, Coordinate, ArrayComplex4D -from .medium import MediumType -from .base import Tidy3dBaseModel, cached_property, skip_if_fields_missing +from ..constants import C_0, EPSILON_0, ETA_0, MICROMETER, MU_0 from ..exceptions import SetupError -from ..constants import C_0, MICROMETER, ETA_0, EPSILON_0, MU_0 from ..log import get_logging_console +from .base import Tidy3dBaseModel, cached_property, skip_if_fields_missing +from .data.data_array import ( + FieldProjectionAngleDataArray, + FieldProjectionCartesianDataArray, + FieldProjectionKSpaceDataArray, +) +from .data.monitor_data import ( + AbstractFieldProjectionData, + FieldData, + FieldProjectionAngleData, + FieldProjectionCartesianData, + FieldProjectionKSpaceData, +) +from .data.sim_data import SimulationData +from .medium import MediumType +from .monitor import ( + AbstractFieldProjectionMonitor, + FieldMonitor, + FieldProjectionAngleMonitor, + FieldProjectionCartesianMonitor, + FieldProjectionKSpaceMonitor, + FieldProjectionSurface, +) +from .types import ArrayComplex4D, Coordinate, Direction # Default number of points per wavelength in the background medium to use for resampling fields. PTS_PER_WVL = 10 diff --git a/tidy3d/components/geometry/base.py b/tidy3d/components/geometry/base.py index 71c9dd5735..0f088473c6 100644 --- a/tidy3d/components/geometry/base.py +++ b/tidy3d/components/geometry/base.py @@ -2,32 +2,56 @@ from __future__ import annotations -from abc import ABC, abstractmethod -from typing import List, Tuple, Any, Union, Callable import functools import pathlib +from abc import ABC, abstractmethod +from typing import Any, Callable, List, Tuple, Union -import pydantic.v1 as pydantic import autograd.numpy as np +import pydantic.v1 as pydantic import shapely -from matplotlib import patches import xarray as xr +from matplotlib import patches -from ..autograd import TracedSize, TracedCoordinate, integrate_within_bounds, get_static +from ...constants import LARGE_NUMBER, MICROMETER, RADIAN, fp_eps, inf +from ...exceptions import ( + SetupError, + Tidy3dError, + Tidy3dImportError, + Tidy3dKeyError, + ValidationError, +) +from ...log import log +from ...packaging import check_import, verify_packages_import +from ..autograd import TracedCoordinate, TracedSize, get_static, integrate_within_bounds from ..base import Tidy3dBaseModel, cached_property -from ..types import Ax, Axis, PlanePosition, Shapely, ClipOperationType, annotate_type -from ..types import Bound, Size, Coordinate, Coordinate2D -from ..types import ArrayFloat2D, ArrayFloat3D, MatrixReal4x4 -from ..viz import add_ax_if_none, equal_aspect, PLOT_BUFFER, ARROW_LENGTH -from ..viz import PlotParams, plot_params_geometry, polygon_patch, arrow_style +from ..data.dataset import ElectromagneticFieldDataset, PermittivityDataset from ..transformation import RotationAroundAxis -from ..data.dataset import PermittivityDataset, ElectromagneticFieldDataset -from ...log import log -from ...exceptions import SetupError, ValidationError -from ...exceptions import Tidy3dKeyError, Tidy3dError, Tidy3dImportError -from ...constants import MICROMETER, LARGE_NUMBER, RADIAN, inf, fp_eps -from ...packaging import verify_packages_import, check_import - +from ..types import ( + ArrayFloat2D, + ArrayFloat3D, + Ax, + Axis, + Bound, + ClipOperationType, + Coordinate, + Coordinate2D, + MatrixReal4x4, + PlanePosition, + Shapely, + Size, + annotate_type, +) +from ..viz import ( + ARROW_LENGTH, + PLOT_BUFFER, + PlotParams, + add_ax_if_none, + arrow_style, + equal_aspect, + plot_params_geometry, + polygon_patch, +) POLY_GRID_SIZE = 1e-12 diff --git a/tidy3d/components/geometry/mesh.py b/tidy3d/components/geometry/mesh.py index 020df0b047..7d602eaee4 100644 --- a/tidy3d/components/geometry/mesh.py +++ b/tidy3d/components/geometry/mesh.py @@ -2,22 +2,21 @@ from __future__ import annotations from abc import ABC -from typing import List, Tuple, Union, Optional +from typing import List, Optional, Tuple, Union -import pydantic.v1 as pydantic import numpy as np +import pydantic.v1 as pydantic -from ..base import cached_property -from ..types import Ax, Bound, Coordinate, MatrixReal4x4, Shapely -from ..viz import add_ax_if_none, equal_aspect -from ...log import log -from ...exceptions import ValidationError, DataError from ...constants import inf +from ...exceptions import DataError, ValidationError +from ...log import log +from ...packaging import verify_packages_import +from ..base import cached_property +from ..data.data_array import DATA_ARRAY_MAP, TriangleMeshDataArray from ..data.dataset import TriangleMeshDataset -from ..data.data_array import TriangleMeshDataArray, DATA_ARRAY_MAP from ..data.validators import validate_no_nans -from ...packaging import verify_packages_import - +from ..types import Ax, Bound, Coordinate, MatrixReal4x4, Shapely +from ..viz import add_ax_if_none, equal_aspect from . import base AREA_SIZE_THRESHOLD = 1e-36 @@ -122,6 +121,7 @@ def from_stl( The geometry or geometry group from the file. """ import trimesh + from ..types_extra import TrimeshType def process_single(mesh: TrimeshType) -> TriangleMesh: diff --git a/tidy3d/components/geometry/polyslab.py b/tidy3d/components/geometry/polyslab.py index fab78fa58f..9ab5df76d2 100644 --- a/tidy3d/components/geometry/polyslab.py +++ b/tidy3d/components/geometry/polyslab.py @@ -2,28 +2,33 @@ from __future__ import annotations -from typing import List, Tuple, Any from math import isclose +from typing import Any, List, Tuple -import pydantic.v1 as pydantic import autograd.numpy as np +import pydantic.v1 as pydantic import shapely -from matplotlib import path import xarray as xr +from matplotlib import path -from ..autograd import TracedVertices, get_static -from ..base import cached_property -from ..base import skip_if_fields_missing -from ..types import Axis, Bound, PlanePosition, ArrayFloat2D, Coordinate -from ..types import MatrixReal4x4, Shapely, ArrayLike -from ..data.dataset import PermittivityDataset, ElectromagneticFieldDataset -from ...log import log +from ...constants import LARGE_NUMBER, MICROMETER, fp_eps from ...exceptions import SetupError, ValidationError -from ...constants import MICROMETER, fp_eps, LARGE_NUMBER +from ...log import log from ...packaging import verify_packages_import - -from . import base -from . import triangulation +from ..autograd import TracedVertices, get_static +from ..base import cached_property, skip_if_fields_missing +from ..data.dataset import ElectromagneticFieldDataset, PermittivityDataset +from ..types import ( + ArrayFloat2D, + ArrayLike, + Axis, + Bound, + Coordinate, + MatrixReal4x4, + PlanePosition, + Shapely, +) +from . import base, triangulation # sampling polygon along dilation for validating polygon to be # non self-intersecting during the entire dilation process diff --git a/tidy3d/components/geometry/primitives.py b/tidy3d/components/geometry/primitives.py index 1be832e0a7..2c88c5f620 100644 --- a/tidy3d/components/geometry/primitives.py +++ b/tidy3d/components/geometry/primitives.py @@ -2,18 +2,18 @@ from __future__ import annotations -from typing import List from math import isclose +from typing import List -import pydantic.v1 as pydantic import numpy as np +import pydantic.v1 as pydantic import shapely -from ..base import cached_property, skip_if_fields_missing -from ..types import Axis, Bound, Coordinate, MatrixReal4x4, Shapely, Tuple +from ...constants import LARGE_NUMBER, MICROMETER from ...exceptions import SetupError, ValidationError -from ...constants import MICROMETER, LARGE_NUMBER from ...packaging import verify_packages_import +from ..base import cached_property, skip_if_fields_missing +from ..types import Axis, Bound, Coordinate, MatrixReal4x4, Shapely, Tuple from . import base # for sampling conical frustum in visualization diff --git a/tidy3d/components/geometry/triangulation.py b/tidy3d/components/geometry/triangulation.py index 0cb3c859fb..e581c987f2 100644 --- a/tidy3d/components/geometry/triangulation.py +++ b/tidy3d/components/geometry/triangulation.py @@ -1,6 +1,6 @@ +from dataclasses import dataclass from typing import List, Tuple -from dataclasses import dataclass import numpy as np import shapely diff --git a/tidy3d/components/geometry/utils.py b/tidy3d/components/geometry/utils.py index 7f8069ec31..2b55514059 100644 --- a/tidy3d/components/geometry/utils.py +++ b/tidy3d/components/geometry/utils.py @@ -1,17 +1,14 @@ """Utilities for geometry manipulation.""" from __future__ import annotations -from typing import Union, Tuple + from math import isclose +from typing import Tuple, Union import numpy as np -from ..types import Axis, PlanePosition, Shapely, ArrayFloat2D, MatrixReal4x4 from ...exceptions import Tidy3dError - -from . import base -from . import primitives -from . import polyslab -from . import mesh +from ..types import ArrayFloat2D, Axis, MatrixReal4x4, PlanePosition, Shapely +from . import base, mesh, polyslab, primitives GeometryType = Union[ base.Box, diff --git a/tidy3d/components/geometry/utils_2d.py b/tidy3d/components/geometry/utils_2d.py index 546acb14ab..1a00e8fb53 100644 --- a/tidy3d/components/geometry/utils_2d.py +++ b/tidy3d/components/geometry/utils_2d.py @@ -1,15 +1,16 @@ """Utilities for 2D geometry manipulation.""" +from typing import List, Tuple + import numpy as np import shapely -from typing import Tuple, List -from ..types import Axis from ...constants import inf -from ..geometry.base import Geometry, Box, ClipOperation +from ..geometry.base import Box, ClipOperation, Geometry from ..geometry.polyslab import PolySlab from ..grid.grid import Grid from ..scene import Scene from ..structure import Structure +from ..types import Axis def increment_float(val: float, sign) -> float: diff --git a/tidy3d/components/grid/grid.py b/tidy3d/components/grid/grid.py index ed4d5e180c..5b372cf1fa 100644 --- a/tidy3d/components/grid/grid.py +++ b/tidy3d/components/grid/grid.py @@ -1,17 +1,17 @@ """Defines the FDTD grid.""" from __future__ import annotations -from typing import Tuple, List, Union + +from typing import List, Tuple, Union import numpy as np import pydantic.v1 as pd +from ...exceptions import SetupError from ..base import Tidy3dBaseModel -from ..data.data_array import DataArray, SpatialDataArray, ScalarFieldDataArray -from ..data.dataset import UnstructuredGridDatasetType, UnstructuredGridDataset -from ..types import ArrayFloat1D, Axis, InterpMethod, Literal +from ..data.data_array import DataArray, ScalarFieldDataArray, SpatialDataArray +from ..data.dataset import UnstructuredGridDataset, UnstructuredGridDatasetType from ..geometry.base import Box - -from ...exceptions import SetupError +from ..types import ArrayFloat1D, Axis, InterpMethod, Literal # data type of one dimensional coordinate array. Coords1D = ArrayFloat1D diff --git a/tidy3d/components/grid/grid_spec.py b/tidy3d/components/grid/grid_spec.py index 7eb28a9348..5b51f405cd 100644 --- a/tidy3d/components/grid/grid_spec.py +++ b/tidy3d/components/grid/grid_spec.py @@ -2,21 +2,21 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import Tuple, List, Union +from typing import List, Tuple, Union import numpy as np import pydantic.v1 as pd -from .grid import Coords1D, Coords, Grid -from .mesher import GradedMesher, MesherType +from ...constants import C_0, MICROMETER, fp_eps +from ...exceptions import SetupError +from ...log import log from ..base import Tidy3dBaseModel -from ..types import Axis, Symmetry, annotate_type, TYPE_TAG_STR +from ..geometry.base import Box from ..source import SourceType from ..structure import Structure, StructureType -from ..geometry.base import Box -from ...log import log -from ...exceptions import SetupError -from ...constants import MICROMETER, C_0, fp_eps +from ..types import TYPE_TAG_STR, Axis, Symmetry, annotate_type +from .grid import Coords, Coords1D, Grid +from .mesher import GradedMesher, MesherType class GridSpec1d(Tidy3dBaseModel, ABC): diff --git a/tidy3d/components/grid/mesher.py b/tidy3d/components/grid/mesher.py index 8da41fbebe..376736c51b 100644 --- a/tidy3d/components/grid/mesher.py +++ b/tidy3d/components/grid/mesher.py @@ -1,25 +1,25 @@ """Collection of functions for automatically generating a nonuniform grid. """ +import warnings from abc import ABC, abstractmethod -from typing import Tuple, List, Union, Dict -from math import isclose from itertools import compress -import warnings +from math import isclose +from typing import Dict, List, Tuple, Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd from pyroots import Brentq -from shapely.strtree import STRtree -from shapely.geometry import box as shapely_box from shapely.errors import ShapelyDeprecationWarning +from shapely.geometry import box as shapely_box +from shapely.strtree import STRtree -from ..base import Tidy3dBaseModel -from ..types import Axis, ArrayFloat1D, Bound -from ..structure import Structure, MeshOverrideStructure, StructureType -from ..medium import AnisotropicMedium, Medium2D, PECMedium -from ...exceptions import SetupError, ValidationError from ...constants import C_0, fp_eps +from ...exceptions import SetupError, ValidationError from ...log import log +from ..base import Tidy3dBaseModel +from ..medium import AnisotropicMedium, Medium2D, PECMedium +from ..structure import MeshOverrideStructure, Structure, StructureType +from ..types import ArrayFloat1D, Axis, Bound _ROOTS_TOL = 1e-10 diff --git a/tidy3d/components/heat/boundary.py b/tidy3d/components/heat/boundary.py index 8695fb0d40..1e687bbff3 100644 --- a/tidy3d/components/heat/boundary.py +++ b/tidy3d/components/heat/boundary.py @@ -6,12 +6,11 @@ import pydantic.v1 as pd +from ...constants import HEAT_FLUX, HEAT_TRANSFER_COEFF, KELVIN from ..base import Tidy3dBaseModel from ..bc_placement import BCPlacementType from ..types import TYPE_TAG_STR -from ...constants import KELVIN, HEAT_FLUX, HEAT_TRANSFER_COEFF - class HeatBC(ABC, Tidy3dBaseModel): """Abstract thermal boundary conditions.""" diff --git a/tidy3d/components/heat/data/monitor_data.py b/tidy3d/components/heat/data/monitor_data.py index 33ec7057f1..3fb305c6e1 100644 --- a/tidy3d/components/heat/data/monitor_data.py +++ b/tidy3d/components/heat/data/monitor_data.py @@ -1,21 +1,20 @@ """Monitor level data, store the DataArrays associated with a single heat monitor.""" from __future__ import annotations -from typing import Union, Tuple, Optional from abc import ABC +from typing import Optional, Tuple, Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from ..monitor import TemperatureMonitor, HeatMonitorType -from ...base import skip_if_fields_missing, cached_property -from ...base_sim.data.monitor_data import AbstractMonitorData -from ...data.data_array import SpatialDataArray -from ...data.dataset import TriangularGridDataset, TetrahedralGridDataset -from ...types import ScalarSymmetry, Coordinate, annotate_type from ....constants import KELVIN - from ....log import log +from ...base import cached_property, skip_if_fields_missing +from ...base_sim.data.monitor_data import AbstractMonitorData +from ...data.data_array import SpatialDataArray +from ...data.dataset import TetrahedralGridDataset, TriangularGridDataset +from ...types import Coordinate, ScalarSymmetry, annotate_type +from ..monitor import HeatMonitorType, TemperatureMonitor class HeatMonitorData(AbstractMonitorData, ABC): diff --git a/tidy3d/components/heat/data/sim_data.py b/tidy3d/components/heat/data/sim_data.py index fde336f940..4f8d6c5837 100644 --- a/tidy3d/components/heat/data/sim_data.py +++ b/tidy3d/components/heat/data/sim_data.py @@ -1,19 +1,19 @@ """Defines heat simulation data class""" from __future__ import annotations + from typing import Tuple import numpy as np import pydantic.v1 as pd -from .monitor_data import HeatMonitorDataType, TemperatureData -from ..simulation import HeatSimulation - -from ...data.dataset import UnstructuredGridDataset, TetrahedralGridDataset, TriangularGridDataset -from ...data.data_array import SpatialDataArray -from ...base_sim.data.sim_data import AbstractSimulationData -from ...types import Ax, RealFieldVal, Literal -from ...viz import equal_aspect, add_ax_if_none from ....exceptions import DataError +from ...base_sim.data.sim_data import AbstractSimulationData +from ...data.data_array import SpatialDataArray +from ...data.dataset import TetrahedralGridDataset, TriangularGridDataset, UnstructuredGridDataset +from ...types import Ax, Literal, RealFieldVal +from ...viz import add_ax_if_none, equal_aspect +from ..simulation import HeatSimulation +from .monitor_data import HeatMonitorDataType, TemperatureData class HeatSimulationData(AbstractSimulationData): diff --git a/tidy3d/components/heat/grid.py b/tidy3d/components/heat/grid.py index 57ce44b430..0b42f76f29 100644 --- a/tidy3d/components/heat/grid.py +++ b/tidy3d/components/heat/grid.py @@ -2,12 +2,13 @@ from __future__ import annotations from abc import ABC -from typing import Union, Tuple +from typing import Tuple, Union + import pydantic.v1 as pd -from ..base import Tidy3dBaseModel, skip_if_fields_missing from ...constants import MICROMETER from ...exceptions import ValidationError +from ..base import Tidy3dBaseModel, skip_if_fields_missing class UnstructuredGrid(Tidy3dBaseModel, ABC): diff --git a/tidy3d/components/heat/monitor.py b/tidy3d/components/heat/monitor.py index 1fd722a486..c548bdbbab 100644 --- a/tidy3d/components/heat/monitor.py +++ b/tidy3d/components/heat/monitor.py @@ -1,11 +1,11 @@ """Objects that define how data is recorded from simulation.""" from abc import ABC -import pydantic.v1 as pd from typing import Union -from ..types import ArrayFloat1D -from ..base_sim.monitor import AbstractMonitor +import pydantic.v1 as pd +from ..base_sim.monitor import AbstractMonitor +from ..types import ArrayFloat1D BYTES_REAL = 4 diff --git a/tidy3d/components/heat/simulation.py b/tidy3d/components/heat/simulation.py index b8e5e78865..76847d2320 100644 --- a/tidy3d/components/heat/simulation.py +++ b/tidy3d/components/heat/simulation.py @@ -1,37 +1,42 @@ """Defines heat simulation class""" from __future__ import annotations -from typing import Tuple, List, Dict -from matplotlib import cm -import numpy as np +from typing import Dict, List, Tuple +import numpy as np import pydantic.v1 as pd +from matplotlib import cm -from .boundary import TemperatureBC, HeatFluxBC, ConvectionBC -from .boundary import HeatBoundarySpec -from .source import HeatSourceType, UniformHeatSource -from .monitor import HeatMonitorType -from .grid import HeatGridType, UniformUnstructuredGrid, DistanceUnstructuredGrid -from .viz import HEAT_BC_COLOR_TEMPERATURE, HEAT_BC_COLOR_FLUX, HEAT_BC_COLOR_CONVECTION -from .viz import plot_params_heat_bc, plot_params_heat_source, HEAT_SOURCE_CMAP - -from ..base_sim.simulation import AbstractSimulation +from ...constants import VOLUMETRIC_HEAT_RATE, inf +from ...exceptions import SetupError +from ...log import log from ..base import cached_property, skip_if_fields_missing -from ..types import Ax, Shapely, TYPE_TAG_STR, ScalarSymmetry, Bound -from ..viz import add_ax_if_none, equal_aspect, PlotParams -from ..structure import Structure +from ..base_sim.simulation import AbstractSimulation +from ..bc_placement import ( + MediumMediumInterface, + SimulationBoundary, + StructureBoundary, + StructureSimulationBoundary, + StructureStructureInterface, +) from ..geometry.base import Box -from ..scene import Scene from ..heat_spec import SolidSpec - -from ..bc_placement import StructureBoundary, StructureStructureInterface -from ..bc_placement import StructureSimulationBoundary, SimulationBoundary -from ..bc_placement import MediumMediumInterface - -from ...exceptions import SetupError -from ...constants import inf, VOLUMETRIC_HEAT_RATE - -from ...log import log +from ..scene import Scene +from ..structure import Structure +from ..types import TYPE_TAG_STR, Ax, Bound, ScalarSymmetry, Shapely +from ..viz import PlotParams, add_ax_if_none, equal_aspect +from .boundary import ConvectionBC, HeatBoundarySpec, HeatFluxBC, TemperatureBC +from .grid import DistanceUnstructuredGrid, HeatGridType, UniformUnstructuredGrid +from .monitor import HeatMonitorType +from .source import HeatSourceType, UniformHeatSource +from .viz import ( + HEAT_BC_COLOR_CONVECTION, + HEAT_BC_COLOR_FLUX, + HEAT_BC_COLOR_TEMPERATURE, + HEAT_SOURCE_CMAP, + plot_params_heat_bc, + plot_params_heat_source, +) HEAT_BACK_STRUCTURE_STR = "<<>>" diff --git a/tidy3d/components/heat/source.py b/tidy3d/components/heat/source.py index db993cdceb..69af6ee67d 100644 --- a/tidy3d/components/heat/source.py +++ b/tidy3d/components/heat/source.py @@ -2,19 +2,17 @@ from __future__ import annotations from abc import ABC -from typing import Union, Tuple +from typing import Tuple, Union import pydantic.v1 as pd -from .viz import plot_params_heat_source - +from ...constants import VOLUMETRIC_HEAT_RATE +from ...exceptions import SetupError from ..base import cached_property from ..base_sim.source import AbstractSource from ..data.data_array import TimeDataArray from ..viz import PlotParams - -from ...constants import VOLUMETRIC_HEAT_RATE -from ...exceptions import SetupError +from .viz import plot_params_heat_source class HeatSource(AbstractSource, ABC): diff --git a/tidy3d/components/heat_spec.py b/tidy3d/components/heat_spec.py index 4666e32275..4414c28b6f 100644 --- a/tidy3d/components/heat_spec.py +++ b/tidy3d/components/heat_spec.py @@ -5,9 +5,9 @@ import pydantic.v1 as pd -from .types import Union -from .base import Tidy3dBaseModel from ..constants import SPECIFIC_HEAT_CAPACITY, THERMAL_CONDUCTIVITY +from .base import Tidy3dBaseModel +from .types import Union # Liquid class diff --git a/tidy3d/components/lumped_element.py b/tidy3d/components/lumped_element.py index 89a94cf063..d136faac77 100644 --- a/tidy3d/components/lumped_element.py +++ b/tidy3d/components/lumped_element.py @@ -1,23 +1,23 @@ """Defines lumped elements that should be included in the simulation.""" from __future__ import annotations + from abc import ABC, abstractmethod -from typing import Union, Optional +from typing import Optional, Union -import pydantic.v1 as pydantic import numpy as np +import pydantic.v1 as pydantic +from ..components.medium import Medium, Medium2D +from ..components.structure import MeshOverrideStructure, Structure +from ..components.validators import assert_plane, validate_name_str +from ..constants import MICROMETER, OHM +from ..exceptions import ValidationError from .base import Tidy3dBaseModel, cached_property, skip_if_fields_missing from .geometry.base import Box, ClipOperation, Geometry from .geometry.primitives import Cylinder -from ..components.structure import Structure -from ..components.medium import Medium, Medium2D -from ..components.structure import MeshOverrideStructure from .types import Axis, Coordinate from .viz import PlotParams, plot_params_lumped_element -from ..constants import OHM, MICROMETER -from ..components.validators import validate_name_str, assert_plane -from ..exceptions import ValidationError DEFAULT_LUMPED_ELEMENT_NUM_CELLS = 3 diff --git a/tidy3d/components/medium.py b/tidy3d/components/medium.py index bdebab4ffa..680b8c060e 100644 --- a/tidy3d/components/medium.py +++ b/tidy3d/components/medium.py @@ -1,44 +1,71 @@ """Defines properties of the medium / materials""" from __future__ import annotations -from abc import ABC, abstractmethod -from typing import Tuple, Union, Callable, Optional, Dict, List, Any import functools +from abc import ABC, abstractmethod from math import isclose +from typing import Any, Callable, Dict, List, Optional, Tuple, Union -import pydantic.v1 as pd +import autograd.numpy as np # TODO: it's hard to figure out which functions need this, for now all get it import numpy as npo -import autograd.numpy as np +import pydantic.v1 as pd import xarray as xr -from .autograd import integrate_within_bounds -from .base import Tidy3dBaseModel, cached_property -from .base import skip_if_fields_missing -from .grid.grid import Coords, Grid -from .types import PoleAndResidue, Ax, FreqBound, TYPE_TAG_STR -from .types import InterpMethod, Bound, ArrayComplex3D, ArrayFloat1D -from .types import Axis, TensorReal, Complex -from .data.dataset import PermittivityDataset, CustomSpatialDataType, CustomSpatialDataTypeAnnotated -from .data.dataset import ElectromagneticFieldDataset -from .data.dataset import _get_numpy_array, _zeros_like, _check_same_coordinates, _ones_like -from .data.dataset import UnstructuredGridDataset +from ..constants import ( + C_0, + CONDUCTIVITY, + EPSILON_0, + HBAR, + HERTZ, + MICROMETER, + PERMITTIVITY, + RADPERSEC, + SECOND, + VOLT, + WATT, + fp_eps, + pec_val, +) +from ..exceptions import SetupError, ValidationError +from ..log import log +from .autograd import TracedFloat, integrate_within_bounds +from .base import Tidy3dBaseModel, cached_property, skip_if_fields_missing +from .data.data_array import DATA_ARRAY_MAP, ScalarFieldDataArray, SpatialDataArray +from .data.dataset import ( + CustomSpatialDataType, + CustomSpatialDataTypeAnnotated, + ElectromagneticFieldDataset, + PermittivityDataset, + UnstructuredGridDataset, + _check_same_coordinates, + _get_numpy_array, + _ones_like, + _zeros_like, +) from .data.validators import validate_no_nans -from .data.data_array import SpatialDataArray, ScalarFieldDataArray, DATA_ARRAY_MAP -from .viz import add_ax_if_none from .geometry.base import Geometry -from .validators import validate_name_str, validate_parameter_perturbation -from ..constants import C_0, pec_val, EPSILON_0, fp_eps, HBAR -from ..constants import HERTZ, CONDUCTIVITY, PERMITTIVITY, RADPERSEC, MICROMETER, SECOND -from ..constants import WATT, VOLT -from ..exceptions import ValidationError, SetupError -from ..log import log -from .transformation import RotationType -from .parameter_perturbation import ParameterPerturbation +from .grid.grid import Coords, Grid from .heat_spec import HeatSpecType +from .parameter_perturbation import ParameterPerturbation from .time_modulation import ModulationSpec -from .autograd import TracedFloat +from .transformation import RotationType +from .types import ( + TYPE_TAG_STR, + ArrayComplex3D, + ArrayFloat1D, + Ax, + Axis, + Bound, + Complex, + FreqBound, + InterpMethod, + PoleAndResidue, + TensorReal, +) +from .validators import validate_name_str, validate_parameter_perturbation +from .viz import add_ax_if_none # evaluate frequency as this number (Hz) if inf FREQ_EVAL_INF = 1e50 diff --git a/tidy3d/components/mode.py b/tidy3d/components/mode.py index 8461509e62..85d0382f4f 100644 --- a/tidy3d/components/mode.py +++ b/tidy3d/components/mode.py @@ -1,17 +1,16 @@ """Defines specification for mode solver.""" -from typing import Tuple, Union from math import isclose +from typing import Tuple, Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from ..constants import MICROMETER, RADIAN, GLANCING_CUTOFF, fp_eps +from ..constants import GLANCING_CUTOFF, MICROMETER, RADIAN, fp_eps +from ..exceptions import SetupError, ValidationError +from ..log import log from .base import Tidy3dBaseModel, skip_if_fields_missing from .types import Axis2D, Literal, TrackFreq -from ..log import log -from ..exceptions import SetupError, ValidationError - GROUP_INDEX_STEP = 0.005 diff --git a/tidy3d/components/monitor.py b/tidy3d/components/monitor.py index 5c95121aea..5fddc2a1f6 100644 --- a/tidy3d/components/monitor.py +++ b/tidy3d/components/monitor.py @@ -1,23 +1,35 @@ """Objects that define how data is recorded from simulation.""" from abc import ABC, abstractmethod -from typing import Union, Tuple +from typing import Tuple, Union -import pydantic.v1 as pydantic import numpy as np +import pydantic.v1 as pydantic -from .types import Ax, EMField, ArrayFloat1D, FreqArray, FreqBound, Bound, Size -from .types import Literal, Direction, Coordinate, Axis, ObsGridArray, BoxSurface -from .validators import assert_plane, validate_freqs_not_empty, validate_freqs_min -from .base import cached_property, Tidy3dBaseModel, skip_if_fields_missing -from .mode import ModeSpec -from .apodization import ApodizationSpec -from .medium import MediumType -from .viz import ARROW_COLOR_MONITOR, ARROW_ALPHA -from ..constants import HERTZ, SECOND, MICROMETER, RADIAN, inf +from ..constants import HERTZ, MICROMETER, RADIAN, SECOND, inf from ..exceptions import SetupError, ValidationError from ..log import log - +from .apodization import ApodizationSpec +from .base import Tidy3dBaseModel, cached_property, skip_if_fields_missing from .base_sim.monitor import AbstractMonitor +from .medium import MediumType +from .mode import ModeSpec +from .types import ( + ArrayFloat1D, + Ax, + Axis, + Bound, + BoxSurface, + Coordinate, + Direction, + EMField, + FreqArray, + FreqBound, + Literal, + ObsGridArray, + Size, +) +from .validators import assert_plane, validate_freqs_min, validate_freqs_not_empty +from .viz import ARROW_ALPHA, ARROW_COLOR_MONITOR BYTES_REAL = 4 BYTES_COMPLEX = 8 diff --git a/tidy3d/components/parameter_perturbation.py b/tidy3d/components/parameter_perturbation.py index 5dfcf75066..00d54df60f 100644 --- a/tidy3d/components/parameter_perturbation.py +++ b/tidy3d/components/parameter_perturbation.py @@ -1,24 +1,29 @@ """Defines perturbations to properties of the medium / materials""" from __future__ import annotations -from abc import ABC, abstractmethod -from typing import Callable, Union, Tuple, List import functools +from abc import ABC, abstractmethod +from typing import Callable, List, Tuple, Union -import pydantic.v1 as pd -import numpy as np import matplotlib.pyplot as plt +import numpy as np +import pydantic.v1 as pd -from .data.data_array import SpatialDataArray, HeatDataArray, ChargeDataArray, IndexedDataArray -from .data.dataset import UnstructuredGridDataset, CustomSpatialDataType -from .data.dataset import _get_numpy_array, _zeros_like, _check_same_coordinates -from .base import Tidy3dBaseModel, cached_property -from ..constants import KELVIN, CMCUBE, PERCMCUBE, inf -from ..log import log -from ..components.types import Ax, ArrayLike, Complex, FieldVal, InterpMethod, TYPE_TAG_STR -from ..components.viz import add_ax_if_none from ..components.data.validators import validate_no_nans +from ..components.types import TYPE_TAG_STR, ArrayLike, Ax, Complex, FieldVal, InterpMethod +from ..components.viz import add_ax_if_none +from ..constants import CMCUBE, KELVIN, PERCMCUBE, inf from ..exceptions import DataError +from ..log import log +from .base import Tidy3dBaseModel, cached_property +from .data.data_array import ChargeDataArray, HeatDataArray, IndexedDataArray, SpatialDataArray +from .data.dataset import ( + CustomSpatialDataType, + UnstructuredGridDataset, + _check_same_coordinates, + _get_numpy_array, + _zeros_like, +) """ Generic perturbation classes """ diff --git a/tidy3d/components/scene.py b/tidy3d/components/scene.py index 2619100d47..fe53c37be8 100644 --- a/tidy3d/components/scene.py +++ b/tidy3d/components/scene.py @@ -1,36 +1,52 @@ """ Container holding about the geometry and medium properties common to all types of simulations. """ from __future__ import annotations -from typing import Dict, Tuple, List, Set, Union -import pydantic.v1 as pd +from typing import Dict, List, Set, Tuple, Union + import autograd.numpy as np -import matplotlib.pylab as plt import matplotlib as mpl +import matplotlib.pylab as plt +import pydantic.v1 as pd from mpl_toolkits.axes_grid1 import make_axes_locatable -from .base import cached_property, Tidy3dBaseModel -from .validators import assert_unique_names -from .geometry.base import Box, GeometryGroup, ClipOperation -from .geometry.utils import flatten_groups, traverse_geometries -from .types import Ax, Shapely, TYPE_TAG_STR, Bound, Size, Coordinate, InterpMethod -from .medium import Medium, MediumType -from .medium import AbstractCustomMedium, Medium2D, MediumType3D -from .medium import AbstractPerturbationMedium -from .grid.grid import Grid -from .structure import Structure -from .data.dataset import _get_numpy_array, CustomSpatialDataType -from .data.dataset import UnstructuredGridDataset, TetrahedralGridDataset, TriangularGridDataset -from .viz import add_ax_if_none, equal_aspect -from .grid.grid import Coords -from .heat_spec import SolidSpec - -from .viz import MEDIUM_CMAP, STRUCTURE_EPS_CMAP, PlotParams, polygon_path, STRUCTURE_HEAT_COND_CMAP -from .viz import plot_params_structure, plot_params_fluid - -from ..constants import inf, THERMAL_CONDUCTIVITY +from ..constants import THERMAL_CONDUCTIVITY, inf from ..exceptions import SetupError, Tidy3dError from ..log import log +from .base import Tidy3dBaseModel, cached_property +from .data.dataset import ( + CustomSpatialDataType, + TetrahedralGridDataset, + TriangularGridDataset, + UnstructuredGridDataset, + _get_numpy_array, +) +from .geometry.base import Box, ClipOperation, GeometryGroup +from .geometry.utils import flatten_groups, traverse_geometries +from .grid.grid import Coords, Grid +from .heat_spec import SolidSpec +from .medium import ( + AbstractCustomMedium, + AbstractPerturbationMedium, + Medium, + Medium2D, + MediumType, + MediumType3D, +) +from .structure import Structure +from .types import TYPE_TAG_STR, Ax, Bound, Coordinate, InterpMethod, Shapely, Size +from .validators import assert_unique_names +from .viz import ( + MEDIUM_CMAP, + STRUCTURE_EPS_CMAP, + STRUCTURE_HEAT_COND_CMAP, + PlotParams, + add_ax_if_none, + equal_aspect, + plot_params_fluid, + plot_params_structure, + polygon_path, +) # maximum number of mediums supported MAX_NUM_MEDIUMS = 65530 diff --git a/tidy3d/components/simulation.py b/tidy3d/components/simulation.py index 4ed7297bcc..6884a68c94 100644 --- a/tidy3d/components/simulation.py +++ b/tidy3d/components/simulation.py @@ -2,60 +2,100 @@ from __future__ import annotations -from typing import Dict, Tuple, List, Set, Union +import math +import pathlib from abc import ABC, abstractmethod +from typing import Dict, List, Set, Tuple, Union -import pydantic.v1 as pydantic import autograd.numpy as np -import xarray as xr import matplotlib as mpl -import math -import pathlib +import pydantic.v1 as pydantic +import xarray as xr +from ..constants import C_0, SECOND, fp_eps, inf +from ..exceptions import SetupError, Tidy3dError, Tidy3dImportError, ValidationError +from ..log import log +from ..updater import Updater from .autograd import AutogradFieldMap - -from .base import cached_property -from .base import skip_if_fields_missing -from .validators import assert_objects_in_sim_bounds -from .validators import validate_mode_objects_symmetry -from .geometry.base import Geometry, Box +from .base import cached_property, skip_if_fields_missing +from .base_sim.simulation import AbstractSimulation +from .boundary import ( + PML, + Absorber, + AbsorberSpec, + BlochBoundary, + Boundary, + BoundarySpec, + PECBoundary, + Periodic, + PMCBoundary, + StablePML, +) +from .data.dataset import CustomSpatialDataType, Dataset +from .geometry.base import Box, Geometry from .geometry.mesh import TriangleMesh from .geometry.utils import flatten_groups, traverse_geometries -from .geometry.utils_2d import get_bounds, get_thickened_geom -from .geometry.utils_2d import subdivide, snap_coordinate_to_grid -from .types import Ax, FreqBound, Axis, annotate_type, InterpMethod, Symmetry -from .types import Literal, TYPE_TAG_STR -from .grid.grid import Coords1D, Grid, Coords -from .grid.grid_spec import GridSpec, UniformGrid, AutoGrid, CustomGrid -from .medium import MediumType, AbstractMedium -from .medium import AbstractCustomMedium, Medium, Medium2D, MediumType3D -from .medium import AnisotropicMedium, FullyAnisotropicMedium, AbstractPerturbationMedium -from .boundary import BoundarySpec, BlochBoundary, PECBoundary, PMCBoundary, Periodic, Boundary -from .boundary import PML, StablePML, Absorber, AbsorberSpec -from .structure import Structure, MeshOverrideStructure -from .source import SourceType, PlaneWave, GaussianBeam, AstigmaticGaussianBeam, CustomFieldSource -from .source import CustomCurrentSource, CustomSourceTime, ContinuousWave -from .source import TFSF, Source, ModeSource -from .monitor import ModeMonitor, MonitorType, Monitor, FreqMonitor, SurfaceIntegrationMonitor -from .monitor import AbstractModeMonitor, FieldMonitor, TimeMonitor, FieldTimeMonitor -from .monitor import PermittivityMonitor, DiffractionMonitor, AbstractFieldProjectionMonitor -from .monitor import FieldProjectionAngleMonitor, FieldProjectionKSpaceMonitor +from .geometry.utils_2d import get_bounds, get_thickened_geom, snap_coordinate_to_grid, subdivide +from .grid.grid import Coords, Coords1D, Grid +from .grid.grid_spec import AutoGrid, CustomGrid, GridSpec, UniformGrid from .lumped_element import LumpedElementType -from .data.dataset import Dataset, CustomSpatialDataType -from .viz import add_ax_if_none, equal_aspect -from .scene import Scene, MAX_NUM_MEDIUMS +from .medium import ( + AbstractCustomMedium, + AbstractMedium, + AbstractPerturbationMedium, + AnisotropicMedium, + FullyAnisotropicMedium, + Medium, + Medium2D, + MediumType, + MediumType3D, +) +from .monitor import ( + AbstractFieldProjectionMonitor, + AbstractModeMonitor, + DiffractionMonitor, + FieldMonitor, + FieldProjectionAngleMonitor, + FieldProjectionKSpaceMonitor, + FieldTimeMonitor, + FreqMonitor, + ModeMonitor, + Monitor, + MonitorType, + PermittivityMonitor, + SurfaceIntegrationMonitor, + TimeMonitor, +) from .run_time_spec import RunTimeSpec +from .scene import MAX_NUM_MEDIUMS, Scene +from .source import ( + TFSF, + AstigmaticGaussianBeam, + ContinuousWave, + CustomCurrentSource, + CustomFieldSource, + CustomSourceTime, + GaussianBeam, + ModeSource, + PlaneWave, + Source, + SourceType, +) +from .structure import MeshOverrideStructure, Structure from .subpixel_spec import SubpixelSpec -from .viz import PlotParams -from .viz import plot_params_pml, plot_params_override_structures -from .viz import plot_params_pec, plot_params_pmc, plot_params_bloch, plot_sim_3d - -from ..constants import C_0, SECOND, fp_eps, inf -from ..exceptions import SetupError, ValidationError, Tidy3dError, Tidy3dImportError -from ..log import log -from ..updater import Updater - -from .base_sim.simulation import AbstractSimulation +from .types import TYPE_TAG_STR, Ax, Axis, FreqBound, InterpMethod, Literal, Symmetry, annotate_type +from .validators import assert_objects_in_sim_bounds, validate_mode_objects_symmetry +from .viz import ( + PlotParams, + add_ax_if_none, + equal_aspect, + plot_params_bloch, + plot_params_override_structures, + plot_params_pec, + plot_params_pmc, + plot_params_pml, + plot_sim_3d, +) try: gdstk_available = True diff --git a/tidy3d/components/source.py b/tidy3d/components/source.py index 5261860dd2..b37f9ad6fc 100644 --- a/tidy3d/components/source.py +++ b/tidy3d/components/source.py @@ -2,31 +2,52 @@ from __future__ import annotations + from abc import ABC, abstractmethod -from typing import Union, Tuple, Optional +from typing import Optional, Tuple, Union -from typing_extensions import Literal -import pydantic.v1 as pydantic import numpy as np +import pydantic.v1 as pydantic +from typing_extensions import Literal +from ..constants import GLANCING_CUTOFF, HERTZ, MICROMETER, RADIAN, inf +from ..exceptions import SetupError, ValidationError +from ..log import log from .base import cached_property, skip_if_fields_missing from .base_sim.source import AbstractSource -from .time import AbstractTimeDependence -from .types import Coordinate, Direction, Polarization, Ax, FreqBound -from .types import ArrayFloat1D, Axis, PlotVal, ArrayComplex1D, TYPE_TAG_STR -from .validators import assert_plane, assert_volumetric -from .validators import warn_if_dataset_none, assert_single_freq_in_range, _assert_min_freq -from .data.dataset import FieldDataset, TimeDataset, ScalarFieldDataArray -from .data.validators import validate_no_nans from .data.data_array import TimeDataArray +from .data.dataset import FieldDataset, ScalarFieldDataArray, TimeDataset +from .data.validators import validate_no_nans from .geometry.base import Box from .mode import ModeSpec -from .viz import add_ax_if_none, PlotParams, plot_params_source -from .viz import ARROW_COLOR_SOURCE, ARROW_ALPHA, ARROW_COLOR_POLARIZATION -from ..constants import RADIAN, HERTZ, MICROMETER, GLANCING_CUTOFF -from ..constants import inf -from ..exceptions import SetupError, ValidationError -from ..log import log +from .time import AbstractTimeDependence +from .types import ( + TYPE_TAG_STR, + ArrayComplex1D, + ArrayFloat1D, + Ax, + Axis, + Coordinate, + Direction, + FreqBound, + PlotVal, + Polarization, +) +from .validators import ( + _assert_min_freq, + assert_plane, + assert_single_freq_in_range, + assert_volumetric, + warn_if_dataset_none, +) +from .viz import ( + ARROW_ALPHA, + ARROW_COLOR_POLARIZATION, + ARROW_COLOR_SOURCE, + PlotParams, + add_ax_if_none, + plot_params_source, +) # when checking if custom data spans the source plane, allow for a small tolerance # due to numerical precision diff --git a/tidy3d/components/structure.py b/tidy3d/components/structure.py index 9974999bdb..0f078c8cde 100644 --- a/tidy3d/components/structure.py +++ b/tidy3d/components/structure.py @@ -1,24 +1,25 @@ """Defines Geometric objects with Medium properties.""" from __future__ import annotations -from typing import Union, Tuple, Optional, Callable, Any -from collections import defaultdict import pathlib -import pydantic.v1 as pydantic +from collections import defaultdict +from typing import Any, Callable, Optional, Tuple, Union + import numpy as np +import pydantic.v1 as pydantic +from ..constants import MICROMETER +from ..exceptions import SetupError, Tidy3dError, Tidy3dImportError from .autograd import get_static from .base import Tidy3dBaseModel, skip_if_fields_missing -from .validators import validate_name_str +from .data.monitor_data import FieldData, PermittivityData from .geometry.utils import GeometryType, validate_no_transformed_polyslabs -from .medium import MediumType, AbstractCustomMedium, Medium2D +from .grid.grid import Coords +from .medium import AbstractCustomMedium, Medium2D, MediumType from .monitor import FieldMonitor, PermittivityMonitor -from .types import Ax, TYPE_TAG_STR, Axis, Bound +from .types import TYPE_TAG_STR, Ax, Axis, Bound +from .validators import validate_name_str from .viz import add_ax_if_none, equal_aspect -from .grid.grid import Coords -from ..constants import MICROMETER -from ..exceptions import SetupError, Tidy3dError, Tidy3dImportError -from .data.monitor_data import PermittivityData, FieldData try: gdstk_available = True diff --git a/tidy3d/components/subpixel_spec.py b/tidy3d/components/subpixel_spec.py index 39e53e13e5..7fecb6e02f 100644 --- a/tidy3d/components/subpixel_spec.py +++ b/tidy3d/components/subpixel_spec.py @@ -1,9 +1,10 @@ # Defines specifications for subpixel averaging from __future__ import annotations -import pydantic.v1 as pd from typing import Union +import pydantic.v1 as pd + from .base import Tidy3dBaseModel, cached_property from .types import TYPE_TAG_STR diff --git a/tidy3d/components/time.py b/tidy3d/components/time.py index 1117ec6dd1..99d48224e0 100644 --- a/tidy3d/components/time.py +++ b/tidy3d/components/time.py @@ -1,17 +1,16 @@ """ Defines time dependence """ from __future__ import annotations + from abc import ABC, abstractmethod -import pydantic.v1 as pydantic import numpy as np +import pydantic.v1 as pydantic -from .base import Tidy3dBaseModel - -from .types import Ax -from .types import ArrayFloat1D, PlotVal -from .viz import add_ax_if_none from ..constants import RADIAN from ..exceptions import SetupError +from .base import Tidy3dBaseModel +from .types import ArrayFloat1D, Ax, PlotVal +from .viz import add_ax_if_none # in spectrum computation, discard amplitudes with relative magnitude smaller than cutoff DFT_CUTOFF = 1e-8 diff --git a/tidy3d/components/time_modulation.py b/tidy3d/components/time_modulation.py index 0961f36aa4..9e7883e5c8 100644 --- a/tidy3d/components/time_modulation.py +++ b/tidy3d/components/time_modulation.py @@ -2,19 +2,19 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import Union from math import isclose +from typing import Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd +from ..constants import HERTZ, RADIAN +from ..exceptions import ValidationError from .base import Tidy3dBaseModel, cached_property, skip_if_fields_missing -from .types import InterpMethod, Bound -from .time import AbstractTimeDependence from .data.data_array import SpatialDataArray from .data.validators import validate_no_nans -from ..exceptions import ValidationError -from ..constants import HERTZ, RADIAN +from .time import AbstractTimeDependence +from .types import Bound, InterpMethod class AbstractTimeModulation(AbstractTimeDependence, ABC): diff --git a/tidy3d/components/transformation.py b/tidy3d/components/transformation.py index 012ade3e24..e5b886307e 100644 --- a/tidy3d/components/transformation.py +++ b/tidy3d/components/transformation.py @@ -4,13 +4,13 @@ from abc import ABC, abstractmethod from typing import Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from .base import Tidy3dBaseModel, cached_property -from .types import Coordinate, TensorReal, ArrayFloat2D, Axis from ..constants import RADIAN from ..exceptions import ValidationError +from .base import Tidy3dBaseModel, cached_property +from .types import ArrayFloat2D, Axis, Coordinate, TensorReal class AbstractRotation(ABC, Tidy3dBaseModel): diff --git a/tidy3d/components/types.py b/tidy3d/components/types.py index 86a65611c4..7ad67552de 100644 --- a/tidy3d/components/types.py +++ b/tidy3d/components/types.py @@ -2,18 +2,17 @@ from typing import Tuple, Union - # Literal only available in python 3.8 + so try import otherwise use extensions try: from typing import Literal except ImportError: from typing_extensions import Literal -from typing_extensions import Annotated - -import pydantic.v1 as pydantic import autograd.numpy as np +import pydantic.v1 as pydantic from matplotlib.axes import Axes from shapely.geometry.base import BaseGeometry +from typing_extensions import Annotated + from ..exceptions import ValidationError # type tag default name diff --git a/tidy3d/components/types_extra.py b/tidy3d/components/types_extra.py index e87828b083..92a6342ade 100644 --- a/tidy3d/components/types_extra.py +++ b/tidy3d/components/types_extra.py @@ -1,4 +1,5 @@ from typing import Any + from ..packaging import check_import # TODO Complicated as trimesh should be a core package unless decoupled implementation types in functional location. diff --git a/tidy3d/components/validators.py b/tidy3d/components/validators.py index cf84199538..22ab77c5be 100644 --- a/tidy3d/components/validators.py +++ b/tidy3d/components/validators.py @@ -1,14 +1,14 @@ """ Defines various validation functions that get used to ensure inputs are legit """ -import pydantic.v1 as pydantic import numpy as np +import pydantic.v1 as pydantic -from .geometry.base import Box -from ..exceptions import ValidationError, SetupError -from .data.dataset import Dataset, FieldDataset +from ..exceptions import SetupError, ValidationError +from ..log import log from .base import DATA_ARRAY_MAP, skip_if_fields_missing +from .data.dataset import Dataset, FieldDataset +from .geometry.base import Box from .types import Tuple -from ..log import log """ Explanation of pydantic validators: diff --git a/tidy3d/components/viz.py b/tidy3d/components/viz.py index f9e0078f12..22cd01d638 100644 --- a/tidy3d/components/viz.py +++ b/tidy3d/components/viz.py @@ -1,19 +1,19 @@ """ utilities for plotting """ from __future__ import annotations -from typing import Any from functools import wraps from html import escape +from typing import Any import matplotlib.pyplot as plt -from matplotlib.patches import PathPatch, ArrowStyle -from matplotlib.path import Path -from numpy import array, concatenate, ones, inf import pydantic.v1 as pd +from matplotlib.patches import ArrowStyle, PathPatch +from matplotlib.path import Path +from numpy import array, concatenate, inf, ones -from .types import Ax -from .base import Tidy3dBaseModel from ..exceptions import SetupError +from .base import Tidy3dBaseModel +from .types import Ax """ Constants """ @@ -236,7 +236,7 @@ def plot_sim_3d(sim, width=800, height=800) -> None: """Make 3D display of simulation in ipyython notebook.""" try: - from IPython.display import display, HTML + from IPython.display import HTML, display except ImportError as e: raise SetupError( "3D plotting requires ipython to be installed " diff --git a/tidy3d/config.py b/tidy3d/config.py index 5355e92f9a..3598bc27a7 100644 --- a/tidy3d/config.py +++ b/tidy3d/config.py @@ -2,7 +2,7 @@ import pydantic.v1 as pd -from .log import DEFAULT_LEVEL, LogLevel, set_logging_level, set_log_suppression +from .log import DEFAULT_LEVEL, LogLevel, set_log_suppression, set_logging_level class Tidy3dConfig(pd.BaseModel): diff --git a/tidy3d/log.py b/tidy3d/log.py index 443c5b38fc..719baceaa1 100644 --- a/tidy3d/log.py +++ b/tidy3d/log.py @@ -2,11 +2,10 @@ import inspect from datetime import datetime - -from typing import Union, List, Callable -from typing_extensions import Literal +from typing import Callable, List, Union from rich.console import Console +from typing_extensions import Literal # Note: "SUPPORT" and "USER" levels are meant for backend runs only. # Logging in frontend code should just use the standard debug/info/warning/error/critical. diff --git a/tidy3d/material_library/material_library.py b/tidy3d/material_library/material_library.py index 812ced3920..66cd777194 100644 --- a/tidy3d/material_library/material_library.py +++ b/tidy3d/material_library/material_library.py @@ -1,13 +1,14 @@ """Holds dispersive models for several commonly used optical materials.""" import json from typing import Dict, List + import pydantic.v1 as pd -from ..components.medium import PoleResidue, Medium2D, AnisotropicMedium, Sellmeier from ..components.base import Tidy3dBaseModel +from ..components.medium import AnisotropicMedium, Medium2D, PoleResidue, Sellmeier from ..components.types import Axis from ..exceptions import SetupError -from .material_reference import material_refs, ReferenceData +from .material_reference import ReferenceData, material_refs from .parametric_materials import Graphene diff --git a/tidy3d/material_library/parametric_materials.py b/tidy3d/material_library/parametric_materials.py index 70206d103e..0087319a96 100644 --- a/tidy3d/material_library/parametric_materials.py +++ b/tidy3d/material_library/parametric_materials.py @@ -1,13 +1,14 @@ """Parametric material models.""" +import warnings from abc import ABC, abstractmethod from typing import List, Tuple -import warnings -import pydantic.v1 as pd + import numpy as np +import pydantic.v1 as pd -from ..components.medium import PoleResidue, Medium2D, Drude from ..components.base import Tidy3dBaseModel -from ..constants import EPSILON_0, Q_e, HBAR, K_B, ELECTRON_VOLT, KELVIN +from ..components.medium import Drude, Medium2D, PoleResidue +from ..constants import ELECTRON_VOLT, EPSILON_0, HBAR, K_B, KELVIN, Q_e from ..log import log try: diff --git a/tidy3d/packaging.py b/tidy3d/packaging.py index fceecc1114..36015cb610 100644 --- a/tidy3d/packaging.py +++ b/tidy3d/packaging.py @@ -4,9 +4,10 @@ This section should only depend on the standard core installation in the pyproject.toml, and should not depend on any other part of the codebase optional imports. """ import functools -import numpy as np -from typing import Literal from importlib import import_module +from typing import Literal + +import numpy as np from .exceptions import Tidy3dImportError @@ -121,8 +122,11 @@ def _fn(*args, **kwargs): if vtk["mod"] is None: try: import vtk as vtk_mod - from vtk.util.numpy_support import vtk_to_numpy, numpy_to_vtk - from vtk.util.numpy_support import numpy_to_vtkIdTypeArray + from vtk.util.numpy_support import ( + numpy_to_vtk, + numpy_to_vtkIdTypeArray, + vtk_to_numpy, + ) from vtkmodules.vtkCommonCore import vtkLogger vtk["mod"] = vtk_mod diff --git a/tidy3d/plugins/adjoint/__init__.py b/tidy3d/plugins/adjoint/__init__.py index e266d314f2..6cf3f04f84 100644 --- a/tidy3d/plugins/adjoint/__init__.py +++ b/tidy3d/plugins/adjoint/__init__.py @@ -12,18 +12,18 @@ "for example: $pip install 'tidy3d[jax]'." ) from e -from .components.geometry import JaxBox, JaxPolySlab, JaxComplexPolySlab, JaxGeometryGroup -from .components.medium import JaxMedium, JaxAnisotropicMedium, JaxCustomMedium +from .components.data.data_array import JaxDataArray +from .components.data.dataset import JaxPermittivityDataset +from .components.data.monitor_data import JaxModeData +from .components.data.sim_data import JaxSimulationData +from .components.geometry import JaxBox, JaxComplexPolySlab, JaxGeometryGroup, JaxPolySlab +from .components.medium import JaxAnisotropicMedium, JaxCustomMedium, JaxMedium +from .components.simulation import JaxSimulation from .components.structure import ( JaxStructure, JaxStructureStaticGeometry, JaxStructureStaticMedium, ) -from .components.simulation import JaxSimulation -from .components.data.sim_data import JaxSimulationData -from .components.data.monitor_data import JaxModeData -from .components.data.dataset import JaxPermittivityDataset -from .components.data.data_array import JaxDataArray from .web import run, run_async __all__ = [ diff --git a/tidy3d/plugins/adjoint/components/__init__.py b/tidy3d/plugins/adjoint/components/__init__.py index 3c9fbd4f0b..c9d9cdb5cc 100644 --- a/tidy3d/plugins/adjoint/components/__init__.py +++ b/tidy3d/plugins/adjoint/components/__init__.py @@ -1,14 +1,14 @@ """Component imports for adjoint plugin. from tidy3d.plugins.adjoint.components import *""" # import the jax version of tidy3d components -from .geometry import JaxBox, JaxPolySlab, JaxComplexPolySlab -from .medium import JaxMedium, JaxAnisotropicMedium, JaxCustomMedium -from .structure import JaxStructure, JaxStructureStaticMedium, JaxStructureStaticGeometry -from .simulation import JaxSimulation -from .data.sim_data import JaxSimulationData -from .data.monitor_data import JaxModeData -from .data.dataset import JaxPermittivityDataset from .data.data_array import JaxDataArray +from .data.dataset import JaxPermittivityDataset +from .data.monitor_data import JaxModeData +from .data.sim_data import JaxSimulationData +from .geometry import JaxBox, JaxComplexPolySlab, JaxPolySlab +from .medium import JaxAnisotropicMedium, JaxCustomMedium, JaxMedium +from .simulation import JaxSimulation +from .structure import JaxStructure, JaxStructureStaticGeometry, JaxStructureStaticMedium __all__ = [ "JaxBox", diff --git a/tidy3d/plugins/adjoint/components/base.py b/tidy3d/plugins/adjoint/components/base.py index 3b1e515e5a..2b5afc8eca 100644 --- a/tidy3d/plugins/adjoint/components/base.py +++ b/tidy3d/plugins/adjoint/components/base.py @@ -1,19 +1,17 @@ """Base model for Tidy3D components that are compatible with jax.""" from __future__ import annotations -from typing import Tuple, List, Any, Callable import json +from typing import Any, Callable, List, Tuple -import numpy as np import jax +import numpy as np import pydantic.v1 as pd - from jax.tree_util import tree_flatten as jax_tree_flatten from jax.tree_util import tree_unflatten as jax_tree_unflatten from ....components.base import Tidy3dBaseModel -from .data.data_array import JaxDataArray, JAX_DATA_ARRAY_TAG - +from .data.data_array import JAX_DATA_ARRAY_TAG, JaxDataArray # end of the error message when a ``_validate_web_adjoint`` exception is raised WEB_ADJOINT_MESSAGE = ( diff --git a/tidy3d/plugins/adjoint/components/data/data_array.py b/tidy3d/plugins/adjoint/components/data/data_array.py index 89a85b5368..083dd9d2e9 100644 --- a/tidy3d/plugins/adjoint/components/data/data_array.py +++ b/tidy3d/plugins/adjoint/components/data/data_array.py @@ -2,19 +2,18 @@ from __future__ import annotations -from typing import Tuple, Any, Dict, List, Literal, Sequence, Union +from typing import Any, Dict, List, Literal, Sequence, Tuple, Union import h5py -import pydantic.v1 as pd -import numpy as np -import jax.numpy as jnp import jax -from jax.tree_util import register_pytree_node_class +import jax.numpy as jnp +import numpy as np +import pydantic.v1 as pd import xarray as xr +from jax.tree_util import register_pytree_node_class from .....components.base import Tidy3dBaseModel, cached_property, skip_if_fields_missing -from .....exceptions import DataError, Tidy3dKeyError, AdjointError - +from .....exceptions import AdjointError, DataError, Tidy3dKeyError # condition setting when to set value in DataArray to zero: # if abs(val) <= VALUE_FILTER_THRESHOLD * max(abs(val)) diff --git a/tidy3d/plugins/adjoint/components/data/dataset.py b/tidy3d/plugins/adjoint/components/data/dataset.py index c9c72590b7..eb2ce3d888 100644 --- a/tidy3d/plugins/adjoint/components/data/dataset.py +++ b/tidy3d/plugins/adjoint/components/data/dataset.py @@ -1,11 +1,10 @@ """Defines jax-compatible datasets.""" import pydantic.v1 as pd - from jax.tree_util import register_pytree_node_class from .....components.data.dataset import PermittivityDataset -from .data_array import JaxDataArray from ..base import JaxObject +from .data_array import JaxDataArray @register_pytree_node_class diff --git a/tidy3d/plugins/adjoint/components/data/monitor_data.py b/tidy3d/plugins/adjoint/components/data/monitor_data.py index 73fc09a3c2..93d22e3e78 100644 --- a/tidy3d/plugins/adjoint/components/data/monitor_data.py +++ b/tidy3d/plugins/adjoint/components/data/monitor_data.py @@ -2,27 +2,42 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import Union, List, Dict, Any -import pydantic.v1 as pd -import numpy as np -import jax.numpy as jnp +from typing import Any, Dict, List, Union +import jax.numpy as jnp +import numpy as np +import pydantic.v1 as pd from jax.tree_util import register_pytree_node_class from .....components.base import cached_property -from .....components.geometry.base import Box -from .....components.source import Source, GaussianPulse, PointDipole -from .....components.source import ModeSource, PlaneWave, CustomFieldSource, CustomCurrentSource -from .....components.data.monitor_data import MonitorData, ModeSolverData -from .....components.data.monitor_data import ModeData, DiffractionData, FieldData +from .....components.data.data_array import ( + FreqModeDataArray, + MixedModeDataArray, + ModeAmpsDataArray, + ScalarFieldDataArray, +) from .....components.data.dataset import FieldDataset -from .....components.data.data_array import ScalarFieldDataArray, FreqModeDataArray -from .....components.data.data_array import ModeAmpsDataArray, MixedModeDataArray +from .....components.data.monitor_data import ( + DiffractionData, + FieldData, + ModeData, + ModeSolverData, + MonitorData, +) +from .....components.geometry.base import Box +from .....components.source import ( + CustomCurrentSource, + CustomFieldSource, + GaussianPulse, + ModeSource, + PlaneWave, + PointDipole, + Source, +) from .....constants import C_0, ETA_0, MU_0 from .....exceptions import AdjointError - -from .data_array import JaxDataArray from ..base import JaxObject +from .data_array import JaxDataArray class JaxMonitorData(MonitorData, JaxObject, ABC): diff --git a/tidy3d/plugins/adjoint/components/data/sim_data.py b/tidy3d/plugins/adjoint/components/data/sim_data.py index e74197bdb2..4942e0e570 100644 --- a/tidy3d/plugins/adjoint/components/data/sim_data.py +++ b/tidy3d/plugins/adjoint/components/data/sim_data.py @@ -1,22 +1,20 @@ """Defines a jax-compatible SimulationData.""" from __future__ import annotations -from typing import Tuple, Dict, Union, List +from typing import Dict, List, Tuple, Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd import xarray as xr - from jax.tree_util import register_pytree_node_class -from .....components.data.monitor_data import MonitorDataType, FieldData, PermittivityData +from .....components.data.monitor_data import FieldData, MonitorDataType, PermittivityData from .....components.data.sim_data import SimulationData -from .....components.source import PointDipole, GaussianPulse +from .....components.source import GaussianPulse, PointDipole from .....log import log - from ..base import JaxObject -from ..simulation import JaxSimulation, JaxInfo -from .monitor_data import JaxMonitorDataType, JAX_MONITOR_DATA_MAP +from ..simulation import JaxInfo, JaxSimulation +from .monitor_data import JAX_MONITOR_DATA_MAP, JaxMonitorDataType @register_pytree_node_class diff --git a/tidy3d/plugins/adjoint/components/geometry.py b/tidy3d/plugins/adjoint/components/geometry.py index df9e02e3d5..d4aa0351f1 100644 --- a/tidy3d/plugins/adjoint/components/geometry.py +++ b/tidy3d/plugins/adjoint/components/geometry.py @@ -3,35 +3,33 @@ from __future__ import annotations from abc import ABC -from typing import Tuple, Union, Dict, List -from joblib import Parallel, delayed +from typing import Dict, List, Tuple, Union -import pydantic.v1 as pd -import numpy as np -import xarray as xr -from jax.tree_util import register_pytree_node_class import jax import jax.numpy as jnp +import numpy as np +import pydantic.v1 as pd import shapely +import xarray as xr +from jax.tree_util import register_pytree_node_class +from joblib import Parallel, delayed from ....components.base import cached_property -from ....components.types import Bound, Coordinate2D # , annotate_type -from ....components.geometry.base import Geometry, Box, GeometryGroup +from ....components.data.data_array import ScalarFieldDataArray +from ....components.data.monitor_data import FieldData, PermittivityData +from ....components.geometry.base import Box, Geometry, GeometryGroup from ....components.geometry.polyslab import ( - PolySlab, - _IS_CLOSE_RTOL, _COMPLEX_POLYSLAB_DIVISIONS_WARN, + _IS_CLOSE_RTOL, + PolySlab, ) -from ....components.data.monitor_data import FieldData, PermittivityData -from ....components.data.data_array import ScalarFieldDataArray from ....components.monitor import FieldMonitor, PermittivityMonitor -from ....components.types import ArrayFloat2D -from ....constants import fp_eps, MICROMETER +from ....components.types import ArrayFloat2D, Bound, Coordinate2D # , annotate_type +from ....constants import MICROMETER, fp_eps from ....exceptions import AdjointError from ....log import log from ...polyslab import ComplexPolySlab - -from .base import JaxObject, WEB_ADJOINT_MESSAGE +from .base import WEB_ADJOINT_MESSAGE, JaxObject from .types import JaxFloat # number of integration points per unit wavelength in material diff --git a/tidy3d/plugins/adjoint/components/medium.py b/tidy3d/plugins/adjoint/components/medium.py index ad1790058e..cfaa237230 100644 --- a/tidy3d/plugins/adjoint/components/medium.py +++ b/tidy3d/plugins/adjoint/components/medium.py @@ -1,26 +1,24 @@ """Defines jax-compatible mediums.""" from __future__ import annotations -from typing import Dict, Tuple, Union, Callable, Optional from abc import ABC +from typing import Callable, Dict, Optional, Tuple, Union -import pydantic.v1 as pd import numpy as np -from jax.tree_util import register_pytree_node_class +import pydantic.v1 as pd import xarray as xr +from jax.tree_util import register_pytree_node_class -from ....components.types import Bound, Literal -from ....components.medium import Medium, AnisotropicMedium, CustomMedium -from ....components.geometry.base import Geometry from ....components.data.monitor_data import FieldData -from ....exceptions import SetupError +from ....components.geometry.base import Geometry +from ....components.medium import AnisotropicMedium, CustomMedium, Medium +from ....components.types import Bound, Literal from ....constants import CONDUCTIVITY - -from .base import JaxObject, WEB_ADJOINT_MESSAGE -from .types import JaxFloat +from ....exceptions import SetupError +from .base import WEB_ADJOINT_MESSAGE, JaxObject from .data.data_array import JaxDataArray from .data.dataset import JaxPermittivityDataset - +from .types import JaxFloat # number of integration points per unit wavelength in material PTS_PER_WVL_INTEGRATION = 20 diff --git a/tidy3d/plugins/adjoint/components/simulation.py b/tidy3d/plugins/adjoint/components/simulation.py index ddd87b9c08..93088536d4 100644 --- a/tidy3d/plugins/adjoint/components/simulation.py +++ b/tidy3d/plugins/adjoint/components/simulation.py @@ -2,39 +2,40 @@ from __future__ import annotations -from typing import Tuple, Union, List, Dict, Literal -from joblib import Parallel, delayed - +from typing import Dict, List, Literal, Tuple, Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd import xarray as xr - from jax.tree_util import register_pytree_node_class +from joblib import Parallel, delayed -from ....log import log -from ....components.base import cached_property, Tidy3dBaseModel, skip_if_fields_missing -from ....components.monitor import FieldMonitor, PermittivityMonitor -from ....components.monitor import ModeMonitor, DiffractionMonitor, Monitor -from ....components.simulation import Simulation -from ....components.subpixel_spec import SubpixelSpec, Staircasing +from ....components.base import Tidy3dBaseModel, cached_property, skip_if_fields_missing from ....components.data.monitor_data import FieldData, PermittivityData -from ....components.structure import Structure +from ....components.geometry.base import Box from ....components.medium import AbstractMedium +from ....components.monitor import ( + DiffractionMonitor, + FieldMonitor, + ModeMonitor, + Monitor, + PermittivityMonitor, +) +from ....components.simulation import Simulation +from ....components.structure import Structure +from ....components.subpixel_spec import Staircasing, SubpixelSpec from ....components.types import Ax, annotate_type -from ....components.geometry.base import Box from ....constants import HERTZ, SECOND from ....exceptions import AdjointError - -from .base import JaxObject, WEB_ADJOINT_MESSAGE +from ....log import log +from .base import WEB_ADJOINT_MESSAGE, JaxObject +from .geometry import JaxGeometryGroup, JaxPolySlab from .structure import ( JaxStructure, - JaxStructureType, - JaxStructureStaticMedium, JaxStructureStaticGeometry, + JaxStructureStaticMedium, + JaxStructureType, ) -from .geometry import JaxPolySlab, JaxGeometryGroup - # bandwidth of adjoint source in units of freq0 if no `fwidth_adjoint`, and one output freq FWIDTH_FACTOR = 1.0 / 10 diff --git a/tidy3d/plugins/adjoint/components/structure.py b/tidy3d/plugins/adjoint/components/structure.py index 8f28afe0e0..3de6305549 100644 --- a/tidy3d/plugins/adjoint/components/structure.py +++ b/tidy3d/plugins/adjoint/components/structure.py @@ -1,23 +1,22 @@ """Defines a jax-compatible structure and its conversion to a gradient monitor.""" from __future__ import annotations -from typing import List, Union, Dict +from typing import Dict, List, Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd from jax.tree_util import register_pytree_node_class -from ....constants import C_0 -from ....components.structure import Structure -from ....components.monitor import FieldMonitor from ....components.data.monitor_data import FieldData, PermittivityData -from ....components.types import Bound, TYPE_TAG_STR -from ....components.medium import MediumType from ....components.geometry.utils import GeometryType - +from ....components.medium import MediumType +from ....components.monitor import FieldMonitor +from ....components.structure import Structure +from ....components.types import TYPE_TAG_STR, Bound +from ....constants import C_0 from .base import JaxObject -from .medium import JaxMediumType, JAX_MEDIUM_MAP -from .geometry import JaxGeometryType, JAX_GEOMETRY_MAP, JaxBox +from .geometry import JAX_GEOMETRY_MAP, JaxBox, JaxGeometryType +from .medium import JAX_MEDIUM_MAP, JaxMediumType GEO_MED_MAPPINGS = dict(geometry=JAX_GEOMETRY_MAP, medium=JAX_MEDIUM_MAP) diff --git a/tidy3d/plugins/adjoint/components/types.py b/tidy3d/plugins/adjoint/components/types.py index 3224d3dbff..7875696628 100644 --- a/tidy3d/plugins/adjoint/components/types.py +++ b/tidy3d/plugins/adjoint/components/types.py @@ -1,9 +1,8 @@ """Special types and validators used by adjoint plugin.""" -from typing import Union, Any +from typing import Any, Union import numpy as np - # special handling if we cant import the JVPTracer in the future (so it doesn't break tidy3d). try: from jax.interpreters.ad import JVPTracer diff --git a/tidy3d/plugins/adjoint/utils/filter.py b/tidy3d/plugins/adjoint/utils/filter.py index 98017a0a9d..ecb820357c 100644 --- a/tidy3d/plugins/adjoint/utils/filter.py +++ b/tidy3d/plugins/adjoint/utils/filter.py @@ -1,10 +1,10 @@ """Spatial filtering Functions for adjoint plugin.""" from abc import ABC, abstractmethod -import pydantic.v1 as pd -import numpy as np import jax.numpy as jnp import jax.scipy as jsp +import numpy as np +import pydantic.v1 as pd from ....components.base import Tidy3dBaseModel from ....constants import MICROMETER diff --git a/tidy3d/plugins/adjoint/utils/penalty.py b/tidy3d/plugins/adjoint/utils/penalty.py index febb690e55..2440fefd3d 100644 --- a/tidy3d/plugins/adjoint/utils/penalty.py +++ b/tidy3d/plugins/adjoint/utils/penalty.py @@ -1,14 +1,14 @@ """Penalty Functions for adjoint plugin.""" from abc import ABC, abstractmethod -import pydantic.v1 as pd import jax.numpy as jnp +import pydantic.v1 as pd from ....components.base import Tidy3dBaseModel from ....components.types import ArrayFloat2D from ....constants import MICROMETER from ....log import log -from .filter import ConicFilter, BinaryProjector +from .filter import BinaryProjector, ConicFilter # Radius of Curvature Calculation diff --git a/tidy3d/plugins/adjoint/web.py b/tidy3d/plugins/adjoint/web.py index a3e2213316..7a21b8fe41 100644 --- a/tidy3d/plugins/adjoint/web.py +++ b/tidy3d/plugins/adjoint/web.py @@ -1,25 +1,24 @@ """Adjoint-specific webapi.""" -from typing import Tuple, Dict, List -from functools import partial import tempfile +from functools import partial +from typing import Dict, List, Tuple import pydantic.v1 as pd from jax import custom_vjp from jax.tree_util import register_pytree_node_class -from ...components.simulation import Simulation -from ...components.data.sim_data import SimulationData +from tidy3d.web.api.asynchronous import run_async as web_run_async from tidy3d.web.api.webapi import run as web_run from tidy3d.web.api.webapi import wait_for_connection from tidy3d.web.core.s3utils import download_file, upload_file -from tidy3d.web.api.asynchronous import run_async as web_run_async -from ...web.api.container import BatchData, DEFAULT_DATA_DIR, Job, Batch -from ...components.types import Literal +from ...components.data.sim_data import SimulationData +from ...components.simulation import Simulation +from ...components.types import Literal +from ...web.api.container import DEFAULT_DATA_DIR, Batch, BatchData, Job from .components.base import JaxObject -from .components.simulation import JaxSimulation, JaxInfo, NUM_PROC_LOCAL from .components.data.sim_data import JaxSimulationData - +from .components.simulation import NUM_PROC_LOCAL, JaxInfo, JaxSimulation # file names and paths for server side adjoint SIM_VJP_FILE = "output/jax_sim_vjp.hdf5" diff --git a/tidy3d/plugins/autograd/functions.py b/tidy3d/plugins/autograd/functions.py index c33a380e24..e6392935ac 100644 --- a/tidy3d/plugins/autograd/functions.py +++ b/tidy3d/plugins/autograd/functions.py @@ -1,4 +1,4 @@ -from typing import Iterable, Union, Tuple, Literal, List +from typing import Iterable, List, Literal, Tuple, Union import autograd.numpy as np from autograd.scipy.signal import convolve as convolve_ag diff --git a/tidy3d/plugins/autograd/invdes/__init__.py b/tidy3d/plugins/autograd/invdes/__init__.py index 4474351595..865e3f0a7d 100644 --- a/tidy3d/plugins/autograd/invdes/__init__.py +++ b/tidy3d/plugins/autograd/invdes/__init__.py @@ -1,5 +1,5 @@ -from .filters import make_filter, make_conic_filter, make_circular_filter -from .misc import grey_indicator, get_kernel_size_px +from .filters import make_circular_filter, make_conic_filter, make_filter +from .misc import get_kernel_size_px, grey_indicator from .parametrizations import make_filter_and_project from .penalties import make_curvature_penalty, make_erosion_dilation_penalty from .projections import ramp_projection, tanh_projection diff --git a/tidy3d/plugins/autograd/invdes/filters.py b/tidy3d/plugins/autograd/invdes/filters.py index 4219547fab..af63099923 100644 --- a/tidy3d/plugins/autograd/invdes/filters.py +++ b/tidy3d/plugins/autograd/invdes/filters.py @@ -1,5 +1,5 @@ -from typing import Tuple, Union from functools import partial +from typing import Tuple, Union import numpy as np diff --git a/tidy3d/plugins/autograd/invdes/parametrizations.py b/tidy3d/plugins/autograd/invdes/parametrizations.py index c41fbaf10a..5365236a39 100644 --- a/tidy3d/plugins/autograd/invdes/parametrizations.py +++ b/tidy3d/plugins/autograd/invdes/parametrizations.py @@ -2,9 +2,9 @@ import autograd.numpy as np +from ..types import KernelType, PaddingType from .filters import make_filter from .projections import tanh_projection -from ..types import KernelType, PaddingType def make_filter_and_project( diff --git a/tidy3d/plugins/autograd/invdes/penalties.py b/tidy3d/plugins/autograd/invdes/penalties.py index e0768ec063..879e04ba11 100644 --- a/tidy3d/plugins/autograd/invdes/penalties.py +++ b/tidy3d/plugins/autograd/invdes/penalties.py @@ -4,8 +4,8 @@ from tidy3d.components.types import ArrayFloat2D -from .parametrizations import make_filter_and_project from ..types import PaddingType +from .parametrizations import make_filter_and_project def make_erosion_dilation_penalty( diff --git a/tidy3d/plugins/autograd/utilities.py b/tidy3d/plugins/autograd/utilities.py index 95bb943d30..f6988b6a65 100644 --- a/tidy3d/plugins/autograd/utilities.py +++ b/tidy3d/plugins/autograd/utilities.py @@ -1,5 +1,5 @@ from functools import reduce -from typing import Tuple, Callable, Iterable, Union +from typing import Callable, Iterable, Tuple, Union import numpy as np diff --git a/tidy3d/plugins/design/__init__.py b/tidy3d/plugins/design/__init__.py index 369fe58ab0..afc5808cef 100644 --- a/tidy3d/plugins/design/__init__.py +++ b/tidy3d/plugins/design/__init__.py @@ -1,7 +1,7 @@ """Imports for parameter sweep.""" -from .parameter import ParameterAny, ParameterFloat, ParameterInt from .design import DesignSpace -from .method import MethodMonteCarlo, MethodGrid, MethodRandom, MethodRandomCustom +from .method import MethodGrid, MethodMonteCarlo, MethodRandom, MethodRandomCustom +from .parameter import ParameterAny, ParameterFloat, ParameterInt from .result import Result __all__ = [ diff --git a/tidy3d/plugins/design/design.py b/tidy3d/plugins/design/design.py index 22ca62db7c..5c83690866 100644 --- a/tidy3d/plugins/design/design.py +++ b/tidy3d/plugins/design/design.py @@ -1,16 +1,15 @@ """Defines design space specification for tidy3d.""" from __future__ import annotations -from typing import Tuple, Callable, Dict, Any, List, Union import inspect +from typing import Any, Callable, Dict, List, Tuple, Union import pydantic.v1 as pd from ...components.base import Tidy3dBaseModel, cached_property -from ...components.simulation import Simulation from ...components.data.sim_data import SimulationData +from ...components.simulation import Simulation from ...web.api.container import BatchData - from .method import MethodType from .parameter import ParameterType from .result import Result diff --git a/tidy3d/plugins/design/method.py b/tidy3d/plugins/design/method.py index 4c72e8dcb8..48b674551c 100644 --- a/tidy3d/plugins/design/method.py +++ b/tidy3d/plugins/design/method.py @@ -1,20 +1,18 @@ """Defines the methods used for parameter sweep.""" -from typing import Union, Tuple, Dict, Any, Callable from abc import ABC, abstractmethod +from typing import Any, Callable, Dict, Tuple, Union import numpy as np import pydantic.v1 as pd import scipy.stats.qmc as qmc +from ... import web from ...components.base import Tidy3dBaseModel from ...components.simulation import Simulation from ...log import log -from ... import web from ...web.api.container import BatchData - from .parameter import ParameterType - DEFAULT_MONTE_CARLO_SAMPLER_TYPE = qmc.LatinHypercube diff --git a/tidy3d/plugins/design/parameter.py b/tidy3d/plugins/design/parameter.py index c102919831..0a33353e3f 100644 --- a/tidy3d/plugins/design/parameter.py +++ b/tidy3d/plugins/design/parameter.py @@ -1,8 +1,8 @@ """Defines the dimensions of the parameter sweep and their properties.""" from __future__ import annotations -from typing import Tuple, Any, Union, List from abc import ABC, abstractmethod +from typing import Any, List, Tuple, Union import numpy as np import pydantic.v1 as pd diff --git a/tidy3d/plugins/design/result.py b/tidy3d/plugins/design/result.py index 40b69e485f..c1c4583d34 100644 --- a/tidy3d/plugins/design/result.py +++ b/tidy3d/plugins/design/result.py @@ -1,11 +1,11 @@ """Defines parameter sweeping utilities for tidy3d.""" from __future__ import annotations -from typing import Tuple, Dict, Any, List +from typing import Any, Dict, List, Tuple -import pydantic.v1 as pd import numpy as np import pandas +import pydantic.v1 as pd from ...components.base import Tidy3dBaseModel, cached_property from ...web.api.container import BatchData diff --git a/tidy3d/plugins/dispersion/__init__.py b/tidy3d/plugins/dispersion/__init__.py index fc16dff27b..d1354eaa87 100644 --- a/tidy3d/plugins/dispersion/__init__.py +++ b/tidy3d/plugins/dispersion/__init__.py @@ -1,8 +1,8 @@ """ Imports from dispersion fitter plugin. """ from .fit import DispersionFitter +from .fit_fast import AdvancedFastFitterParam, FastDispersionFitter from .web import AdvancedFitterParam, StableDispersionFitter -from .fit_fast import FastDispersionFitter, AdvancedFastFitterParam __all__ = [ "DispersionFitter", diff --git a/tidy3d/plugins/dispersion/fit.py b/tidy3d/plugins/dispersion/fit.py index 9604c983ba..e67939ef2c 100644 --- a/tidy3d/plugins/dispersion/fit.py +++ b/tidy3d/plugins/dispersion/fit.py @@ -2,25 +2,25 @@ """ from __future__ import annotations -from typing import Tuple, List, Optional -import csv import codecs -import requests +import csv +from typing import List, Optional, Tuple -import scipy.optimize as opt import numpy as np -from rich.progress import Progress +import requests +import scipy.optimize as opt from pydantic.v1 import Field, validator +from rich.progress import Progress -from ...log import log, get_logging_console -from ...components.base import Tidy3dBaseModel, cached_property -from ...components.base import skip_if_fields_missing -from ...components.medium import PoleResidue, AbstractMedium +from tidy3d.web.core.environment import Env + +from ...components.base import Tidy3dBaseModel, cached_property, skip_if_fields_missing +from ...components.medium import AbstractMedium, PoleResidue +from ...components.types import ArrayFloat1D, Ax from ...components.viz import add_ax_if_none -from ...components.types import Ax, ArrayFloat1D from ...constants import C_0, HBAR, MICROMETER -from ...exceptions import ValidationError, WebError, SetupError -from tidy3d.web.core.environment import Env +from ...exceptions import SetupError, ValidationError, WebError +from ...log import get_logging_console, log class DispersionFitter(Tidy3dBaseModel): diff --git a/tidy3d/plugins/dispersion/fit_fast.py b/tidy3d/plugins/dispersion/fit_fast.py index 9432b0aa70..a143b3d1bf 100644 --- a/tidy3d/plugins/dispersion/fit_fast.py +++ b/tidy3d/plugins/dispersion/fit_fast.py @@ -1,20 +1,21 @@ """Fit PoleResidue Dispersion models to optical NK data""" from __future__ import annotations -from typing import Tuple, Optional + +from typing import Optional, Tuple import numpy as np -from rich.progress import Progress -from pydantic.v1 import Field, validator, PositiveInt, NonNegativeFloat, PositiveFloat import scipy +from pydantic.v1 import Field, NonNegativeFloat, PositiveFloat, PositiveInt, validator +from rich.progress import Progress -from .fit import DispersionFitter -from ...log import log, get_logging_console from ...components.base import Tidy3dBaseModel, cached_property, skip_if_fields_missing -from ...components.medium import PoleResidue, LOSS_CHECK_MIN, LOSS_CHECK_MAX, LOSS_CHECK_NUM -from ...components.types import ArrayFloat1D, ArrayComplex1D, ArrayFloat2D, ArrayComplex2D -from ...exceptions import ValidationError +from ...components.medium import LOSS_CHECK_MAX, LOSS_CHECK_MIN, LOSS_CHECK_NUM, PoleResidue +from ...components.types import ArrayComplex1D, ArrayComplex2D, ArrayFloat1D, ArrayFloat2D from ...constants import C_0 +from ...exceptions import ValidationError +from ...log import get_logging_console, log +from .fit import DispersionFitter # numerical tolerance for pole relocation for fast fitter TOL = 1e-8 diff --git a/tidy3d/plugins/dispersion/web.py b/tidy3d/plugins/dispersion/web.py index ba703f7b63..275ff076e7 100644 --- a/tidy3d/plugins/dispersion/web.py +++ b/tidy3d/plugins/dispersion/web.py @@ -3,24 +3,24 @@ from __future__ import annotations import ssl -from typing import Tuple, Optional from enum import Enum -import requests +from typing import Optional, Tuple + import pydantic.v1 as pydantic -from pydantic.v1 import PositiveInt, NonNegativeFloat, PositiveFloat, Field, validator +import requests +from pydantic.v1 import Field, NonNegativeFloat, PositiveFloat, PositiveInt, validator -from ...log import log -from ...components.base import Tidy3dBaseModel, skip_if_fields_missing -from ...components.types import Literal -from ...components.medium import PoleResidue -from ...constants import MICROMETER, HERTZ -from ...exceptions import WebError, Tidy3dError, SetupError -from tidy3d.web.core.http_util import get_headers from tidy3d.web.core.environment import Env +from tidy3d.web.core.http_util import get_headers +from ...components.base import Tidy3dBaseModel, skip_if_fields_missing +from ...components.medium import PoleResidue +from ...components.types import Literal +from ...constants import HERTZ, MICROMETER +from ...exceptions import SetupError, Tidy3dError, WebError +from ...log import log from .fit import DispersionFitter - BOUND_MAX_FACTOR = 10 URL_ENV = { diff --git a/tidy3d/plugins/invdes/__init__.py b/tidy3d/plugins/invdes/__init__.py index 7b590e3dbd..cb20ffef0f 100644 --- a/tidy3d/plugins/invdes/__init__.py +++ b/tidy3d/plugins/invdes/__init__.py @@ -1,13 +1,12 @@ # imports from tidy3d.plugins.invdes as tdi +from . import utils from .design import InverseDesign, InverseDesignMulti - -from .transformation import FilterProject +from .optimizer import AdamOptimizer from .penalty import ErosionDilationPenalty from .region import TopologyDesignRegion -from .optimizer import AdamOptimizer from .result import InverseDesignResult -from . import utils +from .transformation import FilterProject __all__ = ( "InverseDesign", diff --git a/tidy3d/plugins/invdes/design.py b/tidy3d/plugins/invdes/design.py index 1d49b0a380..ab5a4074be 100644 --- a/tidy3d/plugins/invdes/design.py +++ b/tidy3d/plugins/invdes/design.py @@ -1,10 +1,10 @@ # container for everything defining the inverse design -import pydantic.v1 as pd -import typing import abc +import typing import autograd.numpy as anp +import pydantic.v1 as pd import tidy3d as td import tidy3d.web as web @@ -14,7 +14,6 @@ from .region import DesignRegionType from .validators import check_pixel_size - PostProcessFnType = typing.Callable[[td.SimulationData], float] diff --git a/tidy3d/plugins/invdes/optimizer.py b/tidy3d/plugins/invdes/optimizer.py index 42967a1404..27fd994e6c 100644 --- a/tidy3d/plugins/invdes/optimizer.py +++ b/tidy3d/plugins/invdes/optimizer.py @@ -1,14 +1,13 @@ # specification for running the optimizer import abc -from copy import deepcopy import typing +from copy import deepcopy -import pydantic.v1 as pd - -import numpy as np -import autograd.numpy as anp import autograd as ag +import autograd.numpy as anp +import numpy as np +import pydantic.v1 as pd import tidy3d as td diff --git a/tidy3d/plugins/invdes/penalty.py b/tidy3d/plugins/invdes/penalty.py index aab4342db3..73a20a6683 100644 --- a/tidy3d/plugins/invdes/penalty.py +++ b/tidy3d/plugins/invdes/penalty.py @@ -1,13 +1,13 @@ # define penalties applied to parameters from design region -import typing import abc +import typing -import pydantic.v1 as pd import autograd.numpy as anp +import pydantic.v1 as pd from tidy3d.constants import MICROMETER -from tidy3d.plugins.autograd.invdes import make_erosion_dilation_penalty, get_kernel_size_px +from tidy3d.plugins.autograd.invdes import get_kernel_size_px, make_erosion_dilation_penalty from .base import InvdesBaseModel diff --git a/tidy3d/plugins/invdes/region.py b/tidy3d/plugins/invdes/region.py index fa7401969f..680c9d7c17 100644 --- a/tidy3d/plugins/invdes/region.py +++ b/tidy3d/plugins/invdes/region.py @@ -10,7 +10,6 @@ import tidy3d as td from tidy3d.components.types import Coordinate, Size - from .base import InvdesBaseModel from .penalty import PenaltyType from .transformation import TransformationType diff --git a/tidy3d/plugins/invdes/result.py b/tidy3d/plugins/invdes/result.py index 52fa402c79..86e5fcd015 100644 --- a/tidy3d/plugins/invdes/result.py +++ b/tidy3d/plugins/invdes/result.py @@ -1,9 +1,9 @@ # convenient container for the output of the inverse design (specifically the history) import typing -import numpy as np import matplotlib.pyplot as plt +import numpy as np import pydantic.v1 as pd import tidy3d as td @@ -12,7 +12,6 @@ from .base import InvdesBaseModel from .design import InverseDesignType - # TODO: implement more convenience methods for exporting to figures? diff --git a/tidy3d/plugins/invdes/transformation.py b/tidy3d/plugins/invdes/transformation.py index 49725f98da..df61ce370c 100644 --- a/tidy3d/plugins/invdes/transformation.py +++ b/tidy3d/plugins/invdes/transformation.py @@ -1,14 +1,14 @@ # transformations applied to design region -import typing import abc +import typing import autograd.numpy as anp import pydantic.v1 as pd import tidy3d as td -from tidy3d.plugins.autograd.invdes import make_filter_and_project, get_kernel_size_px from tidy3d.plugins.autograd.functions import threshold +from tidy3d.plugins.autograd.invdes import get_kernel_size_px, make_filter_and_project from .base import InvdesBaseModel diff --git a/tidy3d/plugins/invdes/utils.py b/tidy3d/plugins/invdes/utils.py index 0ff2fa1f3c..3e3e1fd0af 100644 --- a/tidy3d/plugins/invdes/utils.py +++ b/tidy3d/plugins/invdes/utils.py @@ -4,12 +4,11 @@ import typing -import tidy3d as td - import autograd.numpy as anp - import xarray as xr +import tidy3d as td + def make_array(arr: typing.Any) -> anp.ndarray: """Turn something into a ``anp.ndarray``.""" diff --git a/tidy3d/plugins/invdes/validators.py b/tidy3d/plugins/invdes/validators.py index b1bf089c39..957b37d05f 100644 --- a/tidy3d/plugins/invdes/validators.py +++ b/tidy3d/plugins/invdes/validators.py @@ -1,7 +1,9 @@ # validator utilities for invdes plugin import typing + import pydantic.v1 as pd + import tidy3d as td # warn if pixel size is > PIXEL_SIZE_WARNING_THRESHOLD * (minimum wavelength in material) diff --git a/tidy3d/plugins/microwave/__init__.py b/tidy3d/plugins/microwave/__init__.py index 4ef62182a6..bbd24fe85a 100644 --- a/tidy3d/plugins/microwave/__init__.py +++ b/tidy3d/plugins/microwave/__init__.py @@ -1,17 +1,17 @@ """ Imports from microwave plugin. """ -from .path_integrals import ( - AxisAlignedPathIntegral, - VoltageIntegralAxisAligned, - CurrentIntegralAxisAligned, -) +from . import models from .custom_path_integrals import ( + CustomCurrentIntegral2D, CustomPathIntegral2D, CustomVoltageIntegral2D, - CustomCurrentIntegral2D, ) from .impedance_calculator import ImpedanceCalculator -from . import models +from .path_integrals import ( + AxisAlignedPathIntegral, + CurrentIntegralAxisAligned, + VoltageIntegralAxisAligned, +) __all__ = [ "AxisAlignedPathIntegral", diff --git a/tidy3d/plugins/microwave/custom_path_integrals.py b/tidy3d/plugins/microwave/custom_path_integrals.py index 21c0d9eeb5..14946b7f94 100644 --- a/tidy3d/plugins/microwave/custom_path_integrals.py +++ b/tidy3d/plugins/microwave/custom_path_integrals.py @@ -2,20 +2,19 @@ from __future__ import annotations -import pydantic.v1 as pd +from typing import Literal + import numpy as np +import pydantic.v1 as pd import xarray as xr -from typing import Literal - -from ...constants import MICROMETER, fp_eps -from ...components.data.monitor_data import FieldData, FieldTimeData, ModeSolverData -from ...components.data.data_array import FreqDataArray, TimeDataArray, FreqModeDataArray from ...components.base import cached_property -from ...components.types import Axis, ArrayFloat2D +from ...components.data.data_array import FreqDataArray, FreqModeDataArray, TimeDataArray +from ...components.data.monitor_data import FieldData, FieldTimeData, ModeSolverData +from ...components.types import ArrayFloat2D, Axis +from ...constants import MICROMETER, fp_eps from ...exceptions import DataError, SetupError - -from .path_integrals import AbstractAxesRH, MonitorDataTypes, IntegralResultTypes +from .path_integrals import AbstractAxesRH, IntegralResultTypes, MonitorDataTypes FieldParameter = Literal["E", "H"] diff --git a/tidy3d/plugins/microwave/impedance_calculator.py b/tidy3d/plugins/microwave/impedance_calculator.py index 6a579edb13..430108a2dc 100644 --- a/tidy3d/plugins/microwave/impedance_calculator.py +++ b/tidy3d/plugins/microwave/impedance_calculator.py @@ -2,18 +2,21 @@ from __future__ import annotations +from typing import Optional, Union -import pydantic.v1 as pd import numpy as np -from typing import Optional, Union -from ...components.data.monitor_data import FieldData, FieldTimeData, ModeSolverData +import pydantic.v1 as pd from ...components.base import Tidy3dBaseModel +from ...components.data.monitor_data import FieldData, FieldTimeData, ModeSolverData from ...exceptions import DataError, ValidationError - -from .path_integrals import VoltageIntegralAxisAligned, CurrentIntegralAxisAligned -from .path_integrals import MonitorDataTypes, IntegralResultTypes -from .custom_path_integrals import CustomVoltageIntegral2D, CustomCurrentIntegral2D +from .custom_path_integrals import CustomCurrentIntegral2D, CustomVoltageIntegral2D +from .path_integrals import ( + CurrentIntegralAxisAligned, + IntegralResultTypes, + MonitorDataTypes, + VoltageIntegralAxisAligned, +) VoltageIntegralTypes = Union[VoltageIntegralAxisAligned, CustomVoltageIntegral2D] CurrentIntegralTypes = Union[CurrentIntegralAxisAligned, CustomCurrentIntegral2D] diff --git a/tidy3d/plugins/microwave/models/__init__.py b/tidy3d/plugins/microwave/models/__init__.py index 7a233440e4..301db1125e 100644 --- a/tidy3d/plugins/microwave/models/__init__.py +++ b/tidy3d/plugins/microwave/models/__init__.py @@ -1,7 +1,6 @@ """ Imports for transmission line models.""" -from . import microstrip -from . import coupled_microstrip +from . import coupled_microstrip, microstrip __all__ = [ microstrip, diff --git a/tidy3d/plugins/microwave/models/coupled_microstrip.py b/tidy3d/plugins/microwave/models/coupled_microstrip.py index 4da2e9a5c2..85de223cfd 100644 --- a/tidy3d/plugins/microwave/models/coupled_microstrip.py +++ b/tidy3d/plugins/microwave/models/coupled_microstrip.py @@ -8,6 +8,7 @@ """ import numpy as np + from . import microstrip diff --git a/tidy3d/plugins/microwave/path_integrals.py b/tidy3d/plugins/microwave/path_integrals.py index 27bb34c72e..bfd05acc92 100644 --- a/tidy3d/plugins/microwave/path_integrals.py +++ b/tidy3d/plugins/microwave/path_integrals.py @@ -2,24 +2,26 @@ from __future__ import annotations -import pydantic.v1 as pd -import numpy as np - from abc import ABC, abstractmethod from typing import Union -from ...components.data.monitor_data import FieldData, FieldTimeData, ModeSolverData +import numpy as np +import pydantic.v1 as pd + +from ...components.base import Tidy3dBaseModel, cached_property from ...components.data.data_array import ( + FreqDataArray, + FreqModeDataArray, ScalarFieldDataArray, ScalarFieldTimeDataArray, ScalarModeFieldDataArray, + TimeDataArray, ) -from ...components.data.data_array import FreqDataArray, TimeDataArray, FreqModeDataArray -from ...components.base import cached_property, Tidy3dBaseModel -from ...components.types import Axis, Direction +from ...components.data.monitor_data import FieldData, FieldTimeData, ModeSolverData from ...components.geometry.base import Box +from ...components.types import Axis, Direction from ...components.validators import assert_line, assert_plane -from ...exceptions import Tidy3dError, DataError +from ...exceptions import DataError, Tidy3dError MonitorDataTypes = Union[FieldData, FieldTimeData, ModeSolverData] EMScalarFieldType = Union[ScalarFieldDataArray, ScalarFieldTimeDataArray, ScalarModeFieldDataArray] diff --git a/tidy3d/plugins/mode/mode_solver.py b/tidy3d/plugins/mode/mode_solver.py index f4be8b5e92..593c18312f 100644 --- a/tidy3d/plugins/mode/mode_solver.py +++ b/tidy3d/plugins/mode/mode_solver.py @@ -3,33 +3,47 @@ """ from __future__ import annotations -from typing import List, Tuple, Dict + from math import isclose +from typing import Dict, List, Tuple import numpy as np import pydantic.v1 as pydantic import xarray as xr -from ...log import log from ...components.base import Tidy3dBaseModel, cached_property, skip_if_fields_missing -from ...components.boundary import PECBoundary, BoundarySpec, Boundary, PML, StablePML, Absorber +from ...components.boundary import PML, Absorber, Boundary, BoundarySpec, PECBoundary, StablePML +from ...components.data.data_array import ( + FreqModeDataArray, + ModeIndexDataArray, + ScalarModeFieldDataArray, +) +from ...components.data.monitor_data import ModeSolverData +from ...components.data.sim_data import SimulationData from ...components.geometry.base import Box -from ...components.simulation import Simulation from ...components.grid.grid import Grid -from ...components.mode import ModeSpec -from ...components.monitor import ModeSolverMonitor, ModeMonitor from ...components.medium import FullyAnisotropicMedium +from ...components.mode import ModeSpec +from ...components.monitor import ModeMonitor, ModeSolverMonitor +from ...components.simulation import Simulation from ...components.source import ModeSource, SourceTime -from ...components.types import Direction, FreqArray, Ax, Literal, Axis, Symmetry, PlotScale -from ...components.types import ArrayComplex3D, ArrayComplex4D, ArrayFloat1D, EpsSpecType -from ...components.data.data_array import ModeIndexDataArray, ScalarModeFieldDataArray -from ...components.data.data_array import FreqModeDataArray -from ...components.data.sim_data import SimulationData -from ...components.data.monitor_data import ModeSolverData - +from ...components.types import ( + ArrayComplex3D, + ArrayComplex4D, + ArrayFloat1D, + Ax, + Axis, + Direction, + EpsSpecType, + FreqArray, + Literal, + PlotScale, + Symmetry, +) from ...components.validators import validate_freqs_min, validate_freqs_not_empty -from ...exceptions import ValidationError, SetupError from ...constants import C_0 +from ...exceptions import SetupError, ValidationError +from ...log import log # Importing the local solver may not work if e.g. scipy is not installed IMPORT_ERROR_MSG = """Could not import local solver, 'ModeSolver' objects can still be constructed diff --git a/tidy3d/plugins/mode/solver.py b/tidy3d/plugins/mode/solver.py index 423c49b502..42884463a3 100644 --- a/tidy3d/plugins/mode/solver.py +++ b/tidy3d/plugins/mode/solver.py @@ -5,12 +5,12 @@ import scipy.sparse as sp import scipy.sparse.linalg as spl -from ...components.types import Numpy, ModeSolverType, EpsSpecType from ...components.base import Tidy3dBaseModel -from ...constants import ETA_0, C_0, fp_eps, pec_val +from ...components.types import EpsSpecType, ModeSolverType, Numpy +from ...constants import C_0, ETA_0, fp_eps, pec_val from .derivatives import create_d_matrices as d_mats from .derivatives import create_s_matrices as s_mats -from .transforms import radial_transform, angled_transform +from .transforms import angled_transform, radial_transform # Consider vec to be complex if norm(vec.imag)/norm(vec) > TOL_COMPLEX TOL_COMPLEX = fp_eps diff --git a/tidy3d/plugins/resonance/resonance.py b/tidy3d/plugins/resonance/resonance.py index e96c0b7f10..4dc3a4e647 100644 --- a/tidy3d/plugins/resonance/resonance.py +++ b/tidy3d/plugins/resonance/resonance.py @@ -1,23 +1,21 @@ """Find resonances in time series data """ -from typing import Tuple, List, Union from functools import partial +from typing import List, Tuple, Union import numpy as np import scipy.linalg import xarray as xr - from pydantic.v1 import Field, NonNegativeFloat, PositiveInt, validator -from ...log import log from ...components.base import Tidy3dBaseModel -from ...components.types import ArrayFloat1D, ArrayComplex1D, ArrayComplex2D, ArrayComplex3D from ...components.data.data_array import ScalarFieldTimeDataArray from ...components.data.monitor_data import FieldTimeData +from ...components.types import ArrayComplex1D, ArrayComplex2D, ArrayComplex3D, ArrayFloat1D from ...constants import HERTZ from ...exceptions import SetupError, ValidationError - +from ...log import log INIT_NUM_FREQS = 200 diff --git a/tidy3d/plugins/smatrix/__init__.py b/tidy3d/plugins/smatrix/__init__.py index 51c797cace..10a23cd3d2 100644 --- a/tidy3d/plugins/smatrix/__init__.py +++ b/tidy3d/plugins/smatrix/__init__.py @@ -1,11 +1,10 @@ """ Imports from scattering matrix plugin. """ -from .ports.modal import Port +from .component_modelers.modal import AbstractComponentModeler, ComponentModeler, ModalPortDataArray +from .component_modelers.terminal import LumpedPortDataArray, TerminalComponentModeler from .ports.coaxial_lumped import CoaxialLumpedPort +from .ports.modal import Port from .ports.rectangular_lumped import LumpedPort -from .component_modelers.modal import AbstractComponentModeler -from .component_modelers.modal import ComponentModeler, ModalPortDataArray -from .component_modelers.terminal import TerminalComponentModeler, LumpedPortDataArray __all__ = [ "AbstractComponentModeler", diff --git a/tidy3d/plugins/smatrix/component_modelers/base.py b/tidy3d/plugins/smatrix/component_modelers/base.py index 048266bd20..f61b0b1a06 100644 --- a/tidy3d/plugins/smatrix/component_modelers/base.py +++ b/tidy3d/plugins/smatrix/component_modelers/base.py @@ -1,22 +1,22 @@ """Base class for generating an S matrix automatically from tidy3d simulations and port definitions.""" from __future__ import annotations -from typing import Tuple, Dict, Union + +import json import os from abc import ABC, abstractmethod -import json +from typing import Dict, Tuple, Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from ....constants import HERTZ -from ....components.simulation import Simulation +from ....components.base import Tidy3dBaseModel, cached_property from ....components.data.data_array import DataArray +from ....components.simulation import Simulation from ....components.types import Complex, FreqArray -from ....components.base import Tidy3dBaseModel, cached_property +from ....constants import HERTZ from ....exceptions import SetupError, Tidy3dKeyError from ....log import log -from ....web.api.container import BatchData, Batch - +from ....web.api.container import Batch, BatchData from ..ports.modal import Port from ..ports.rectangular_lumped import LumpedPort diff --git a/tidy3d/plugins/smatrix/component_modelers/modal.py b/tidy3d/plugins/smatrix/component_modelers/modal.py index f771962412..094dd4f6ad 100644 --- a/tidy3d/plugins/smatrix/component_modelers/modal.py +++ b/tidy3d/plugins/smatrix/component_modelers/modal.py @@ -3,24 +3,22 @@ # "ModalPort" to explicitly differentiate these from "TerminalComponentModeler" and "LumpedPort". from __future__ import annotations -from typing import List, Tuple, Optional, Dict +from typing import Dict, List, Optional, Tuple -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from ....components.simulation import Simulation -from ....components.monitor import ModeMonitor -from ....components.source import ModeSource, GaussianPulse +from ....components.base import cached_property from ....components.data.sim_data import SimulationData +from ....components.monitor import ModeMonitor +from ....components.simulation import Simulation +from ....components.source import GaussianPulse, ModeSource from ....components.types import Ax, Complex from ....components.viz import add_ax_if_none, equal_aspect -from ....components.base import cached_property from ....exceptions import SetupError from ....web.api.container import BatchData - -from .base import AbstractComponentModeler, FWIDTH_FRAC from ..ports.modal import ModalPortDataArray, Port - +from .base import FWIDTH_FRAC, AbstractComponentModeler MatrixIndex = Tuple[str, pd.NonNegativeInt] # the 'i' in S_ij Element = Tuple[MatrixIndex, MatrixIndex] # the 'ij' in S_ij diff --git a/tidy3d/plugins/smatrix/component_modelers/terminal.py b/tidy3d/plugins/smatrix/component_modelers/terminal.py index 3c838777a6..8b074ec9f8 100644 --- a/tidy3d/plugins/smatrix/component_modelers/terminal.py +++ b/tidy3d/plugins/smatrix/component_modelers/terminal.py @@ -2,26 +2,25 @@ from __future__ import annotations -from typing import Tuple, Dict, Union +from typing import Dict, Tuple, Union -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from ....constants import C_0, fp_eps -from ....components.simulation import Simulation -from ....components.geometry.utils_2d import snap_coordinate_to_grid +from ....components.base import cached_property from ....components.data.sim_data import SimulationData +from ....components.geometry.utils_2d import snap_coordinate_to_grid +from ....components.simulation import Simulation from ....components.source import GaussianPulse from ....components.types import Ax from ....components.viz import add_ax_if_none, equal_aspect -from ....components.base import cached_property +from ....constants import C_0, fp_eps from ....exceptions import ValidationError from ....web.api.container import BatchData - -from .base import AbstractComponentModeler, FWIDTH_FRAC from ..ports.base_lumped import LumpedPortDataArray -from ..ports.rectangular_lumped import LumpedPort from ..ports.coaxial_lumped import CoaxialLumpedPort +from ..ports.rectangular_lumped import LumpedPort +from .base import FWIDTH_FRAC, AbstractComponentModeler class TerminalComponentModeler(AbstractComponentModeler): diff --git a/tidy3d/plugins/smatrix/ports/base_lumped.py b/tidy3d/plugins/smatrix/ports/base_lumped.py index 8ed4d95c74..a353fcc8bf 100644 --- a/tidy3d/plugins/smatrix/ports/base_lumped.py +++ b/tidy3d/plugins/smatrix/ports/base_lumped.py @@ -1,20 +1,19 @@ """Class and custom data array for representing a scattering matrix port based on lumped circuit elements.""" -import pydantic.v1 as pd -from typing import Optional from abc import ABC, abstractmethod +from typing import Optional + +import pydantic.v1 as pd -from ....constants import OHM -from ....components.types import Complex, FreqArray from ....components.base import Tidy3dBaseModel, cached_property +from ....components.data.data_array import DataArray, FreqDataArray +from ....components.data.sim_data import SimulationData from ....components.grid.grid import Grid, YeeGrid from ....components.lumped_element import AbstractLumpedResistor from ....components.monitor import FieldMonitor - -from ....components.data.sim_data import SimulationData -from ....components.source import UniformCurrentSource, GaussianPulse - -from ....components.data.data_array import DataArray, FreqDataArray +from ....components.source import GaussianPulse, UniformCurrentSource +from ....components.types import Complex, FreqArray +from ....constants import OHM DEFAULT_PORT_NUM_CELLS = 3 DEFAULT_REFERENCE_IMPEDANCE = 50 diff --git a/tidy3d/plugins/smatrix/ports/coaxial_lumped.py b/tidy3d/plugins/smatrix/ports/coaxial_lumped.py index f309eb16fd..c4c01a430c 100644 --- a/tidy3d/plugins/smatrix/ports/coaxial_lumped.py +++ b/tidy3d/plugins/smatrix/ports/coaxial_lumped.py @@ -1,24 +1,23 @@ """Lumped port specialization with an annuluar geometry for exciting coaxial ports.""" -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from ....constants import MICROMETER +from ....components.base import cached_property +from ....components.data.data_array import FreqDataArray, ScalarFieldDataArray +from ....components.data.dataset import FieldDataset +from ....components.data.sim_data import SimulationData from ....components.geometry.base import Box, Geometry from ....components.geometry.utils_2d import increment_float -from ....components.types import FreqArray, Axis, Coordinate, Direction, Size -from ....components.base import cached_property from ....components.grid.grid import Grid, YeeGrid from ....components.lumped_element import CoaxialLumpedResistor from ....components.monitor import FieldMonitor -from ....components.data.sim_data import SimulationData from ....components.source import CustomCurrentSource, GaussianPulse +from ....components.types import Axis, Coordinate, Direction, FreqArray, Size from ....components.validators import skip_if_fields_missing -from ....components.data.data_array import FreqDataArray, ScalarFieldDataArray -from ....components.data.dataset import FieldDataset +from ....constants import MICROMETER from ....exceptions import SetupError, ValidationError - -from ...microwave import VoltageIntegralAxisAligned, CustomCurrentIntegral2D +from ...microwave import CustomCurrentIntegral2D, VoltageIntegralAxisAligned from ...microwave.path_integrals import AbstractAxesRH from .base_lumped import AbstractLumpedPort diff --git a/tidy3d/plugins/smatrix/ports/modal.py b/tidy3d/plugins/smatrix/ports/modal.py index da50b3f1eb..b5f434fd0c 100644 --- a/tidy3d/plugins/smatrix/ports/modal.py +++ b/tidy3d/plugins/smatrix/ports/modal.py @@ -1,10 +1,10 @@ """Class and custom data array for representing a scattering matrix port based on waveguide modes.""" import pydantic.v1 as pd +from ....components.data.data_array import DataArray from ....components.geometry.base import Box from ....components.mode import ModeSpec from ....components.types import Direction -from ....components.data.data_array import DataArray class ModalPortDataArray(DataArray): diff --git a/tidy3d/plugins/smatrix/ports/rectangular_lumped.py b/tidy3d/plugins/smatrix/ports/rectangular_lumped.py index da82c6306f..9594a4b8a8 100644 --- a/tidy3d/plugins/smatrix/ports/rectangular_lumped.py +++ b/tidy3d/plugins/smatrix/ports/rectangular_lumped.py @@ -1,24 +1,22 @@ """Lumped port specialization with a rectangular geometry.""" -import pydantic.v1 as pd import numpy as np +import pydantic.v1 as pd -from ....constants import fp_eps +from ....components.base import cached_property +from ....components.data.data_array import FreqDataArray +from ....components.data.sim_data import SimulationData from ....components.geometry.base import Box from ....components.geometry.utils_2d import increment_float -from ....components.types import FreqArray, Axis -from ....components.base import cached_property from ....components.grid.grid import Grid, YeeGrid from ....components.lumped_element import LumpedResistor from ....components.monitor import FieldMonitor -from ....components.data.sim_data import SimulationData -from ....components.source import UniformCurrentSource, GaussianPulse +from ....components.source import GaussianPulse, UniformCurrentSource +from ....components.types import Axis, FreqArray from ....components.validators import assert_plane -from ....components.data.data_array import FreqDataArray +from ....constants import fp_eps from ....exceptions import SetupError, ValidationError - -from ...microwave import VoltageIntegralAxisAligned, CurrentIntegralAxisAligned - +from ...microwave import CurrentIntegralAxisAligned, VoltageIntegralAxisAligned from .base_lumped import AbstractLumpedPort diff --git a/tidy3d/plugins/smatrix/smatrix.py b/tidy3d/plugins/smatrix/smatrix.py index fd77d1de7f..bb2e6d576a 100644 --- a/tidy3d/plugins/smatrix/smatrix.py +++ b/tidy3d/plugins/smatrix/smatrix.py @@ -1,6 +1,6 @@ # backwards compatibility support for ``from tidy3d.plugins.smatrix.smatrix import `` -from .ports.modal import Port from .component_modelers.modal import ComponentModeler +from .ports.modal import Port __all__ = ["Port", "ComponentModeler"] diff --git a/tidy3d/plugins/waveguide/rectangular_dielectric.py b/tidy3d/plugins/waveguide/rectangular_dielectric.py index 373215d1ef..c3ab6bfd57 100644 --- a/tidy3d/plugins/waveguide/rectangular_dielectric.py +++ b/tidy3d/plugins/waveguide/rectangular_dielectric.py @@ -1,31 +1,28 @@ """Rectangular dielectric waveguide utilities.""" -from typing import List, Any, Union, Tuple -from typing_extensions import Annotated +from typing import Any, List, Tuple, Union import numpy -from matplotlib import pyplot import pydantic.v1 as pydantic +from matplotlib import pyplot +from typing_extensions import Annotated from ...components.base import Tidy3dBaseModel, cached_property, skip_if_fields_missing from ...components.boundary import BoundarySpec, Periodic -from ...components.data.data_array import ModeIndexDataArray, FreqModeDataArray +from ...components.data.data_array import FreqModeDataArray, ModeIndexDataArray from ...components.geometry.base import Box from ...components.geometry.polyslab import PolySlab from ...components.grid.grid_spec import GridSpec from ...components.medium import Medium, MediumType from ...components.mode import ModeSpec from ...components.simulation import Simulation -from ...components.viz import add_ax_if_none - -from ...components.source import ModeSource, GaussianPulse +from ...components.source import GaussianPulse, ModeSource from ...components.structure import Structure -from ...components.types import ArrayFloat1D, Ax, Axis, Coordinate, Literal, Size1D -from ...components.types import TYPE_TAG_STR -from ...constants import C_0, inf, MICROMETER, RADIAN +from ...components.types import TYPE_TAG_STR, ArrayFloat1D, Ax, Axis, Coordinate, Literal, Size1D +from ...components.viz import add_ax_if_none +from ...constants import C_0, MICROMETER, RADIAN, inf from ...exceptions import Tidy3dError, ValidationError from ...log import log - from ..mode.mode_solver import ModeSolver AnnotatedMedium = Annotated[MediumType, pydantic.Field(discriminator=TYPE_TAG_STR)] diff --git a/tidy3d/updater.py b/tidy3d/updater.py index 6e07eeb7cd..2aecc01f60 100644 --- a/tidy3d/updater.py +++ b/tidy3d/updater.py @@ -1,18 +1,17 @@ """Utilities for converting between tidy3d versions.""" from __future__ import annotations -from typing import Dict, Callable -import json import functools +import json +from typing import Callable, Dict -import yaml import pydantic.v1 as pd +import yaml +from .components.base import Tidy3dBaseModel +from .exceptions import FileError, SetupError from .log import log from .version import __version__ -from .exceptions import FileError, SetupError -from .components.base import Tidy3dBaseModel - """Storing version numbers.""" diff --git a/tidy3d/web/__init__.py b/tidy3d/web/__init__.py index c3798e461c..9268a24a04 100644 --- a/tidy3d/web/__init__.py +++ b/tidy3d/web/__init__.py @@ -1,41 +1,38 @@ # ruff: noqa: E402 """ imports interfaces for interacting with server """ -from .core import core_config -from ..log import log, get_logging_console +from ..log import get_logging_console, log from ..version import __version__ +from .core import core_config # set logger to tidy3d.log before it's invoked in other imports core_config.set_config(log, get_logging_console(), __version__) -from .api.container import Job, Batch, BatchData -from .cli.migrate import migrate -from .cli.app import configure_fn as configure +# from .api.asynchronous import run_async # NOTE: we use autograd one now (see below) +# autograd compatible wrappers for run and run_async +from .api.autograd.autograd import run, run_async +from .api.container import Batch, BatchData, Job from .api.webapi import ( - # run, # NOTE: use autograd one now (see below) - upload, - get_info, - start, - monitor, + abort, delete, + delete_old, download, - load, + download_json, + download_log, estimate_cost, - abort, + get_info, get_tasks, - delete_old, - download_log, - download_json, + load, load_simulation, + monitor, real_cost, + start, test, + # run, # NOTE: use autograd one now (see below) + upload, ) from .cli import tidy3d_cli - -# from .api.asynchronous import run_async # NOTE: we use autograd one now (see below) - -# autograd compatible wrappers for run and run_async -from .api.autograd.autograd import run -from .api.autograd.autograd import run_async +from .cli.app import configure_fn as configure +from .cli.migrate import migrate migrate() diff --git a/tidy3d/web/api/asynchronous.py b/tidy3d/web/api/asynchronous.py index ffa84c860a..f7a2168a26 100644 --- a/tidy3d/web/api/asynchronous.py +++ b/tidy3d/web/api/asynchronous.py @@ -1,9 +1,9 @@ """Interface to run several jobs in batch using simplified syntax.""" from typing import Dict, List -from .container import DEFAULT_DATA_DIR, BatchData, Batch -from .tidy3d_stub import SimulationType from ...log import log +from .container import DEFAULT_DATA_DIR, Batch, BatchData +from .tidy3d_stub import SimulationType def run_async( diff --git a/tidy3d/web/api/autograd/autograd.py b/tidy3d/web/api/autograd/autograd.py index 6ac16a015a..66ad1c03b8 100644 --- a/tidy3d/web/api/autograd/autograd.py +++ b/tidy3d/web/api/autograd/autograd.py @@ -1,21 +1,20 @@ # autograd wrapper for web functions -import tidy3d as td -from tidy3d.components.autograd import primitive, defvjp, AutogradFieldMap, get_static -import typing import traceback +import typing import numpy as np from autograd.builtins import dict as dict_ag -from ..webapi import run as run_webapi -from ..asynchronous import run_async as run_async_webapi +import tidy3d as td +from tidy3d.components.autograd import AutogradFieldMap, defvjp, get_static, primitive + from ..asynchronous import DEFAULT_DATA_DIR +from ..asynchronous import run_async as run_async_webapi from ..container import BatchData -from ..tidy3d_stub import SimulationType, SimulationDataType - -from .utils import split_list, split_data_list, get_derivative_maps - +from ..tidy3d_stub import SimulationDataType, SimulationType +from ..webapi import run as run_webapi +from .utils import get_derivative_maps, split_data_list, split_list # keys for data into auxiliary dictionary AUX_KEY_SIM_DATA_ORIGINAL = "sim_data" diff --git a/tidy3d/web/api/connect_util.py b/tidy3d/web/api/connect_util.py index 1f0f4d585c..e3e3297eba 100644 --- a/tidy3d/web/api/connect_util.py +++ b/tidy3d/web/api/connect_util.py @@ -1,12 +1,14 @@ """connect util for webapi.""" -from functools import wraps import time +from functools import wraps + from requests import ReadTimeout from requests.exceptions import ConnectionError as ConnErr from requests.exceptions import JSONDecodeError -from ...exceptions import WebError from urllib3.exceptions import NewConnectionError + +from ...exceptions import WebError from ...log import log # number of seconds to keep re-trying connection before erroring diff --git a/tidy3d/web/api/container.py b/tidy3d/web/api/container.py index 61556083da..12d3491e34 100644 --- a/tidy3d/web/api/container.py +++ b/tidy3d/web/api/container.py @@ -1,26 +1,25 @@ """higher level wrappers for webapi functions for individual (Job) and batch (Batch) tasks.""" from __future__ import annotations +import concurrent +import json import os -from abc import ABC -from typing import Dict, Tuple, Optional import time -import json +from abc import ABC from concurrent.futures import ThreadPoolExecutor -import concurrent +from typing import Dict, Optional, Tuple -from rich.progress import Progress import pydantic.v1 as pd +from rich.progress import Progress -from .tidy3d_stub import SimulationType, SimulationDataType -from ..api import webapi as web -from ..core.task_info import TaskInfo, RunInfo -from ..core.constants import TaskId, TaskName from ...components.base import Tidy3dBaseModel, cached_property from ...components.types import annotate_type -from ...log import log, get_logging_console - from ...exceptions import DataError +from ...log import get_logging_console, log +from ..api import webapi as web +from ..core.constants import TaskId, TaskName +from ..core.task_info import RunInfo, TaskInfo +from .tidy3d_stub import SimulationDataType, SimulationType # Max # of workers for parallel upload / download: above 10, performance is same but with warnings DEFAULT_NUM_WORKERS = 10 diff --git a/tidy3d/web/api/material_fitter.py b/tidy3d/web/api/material_fitter.py index d9670543ad..893663a9f7 100644 --- a/tidy3d/web/api/material_fitter.py +++ b/tidy3d/web/api/material_fitter.py @@ -10,8 +10,8 @@ import numpy as np import requests from pydantic.v1 import BaseModel, Field -from ...plugins.dispersion import DispersionFitter +from ...plugins.dispersion import DispersionFitter from ..core.http_util import http from ..core.types import Submittable diff --git a/tidy3d/web/api/material_libray.py b/tidy3d/web/api/material_libray.py index d36a87f27e..3b9e397f2c 100644 --- a/tidy3d/web/api/material_libray.py +++ b/tidy3d/web/api/material_libray.py @@ -6,8 +6,8 @@ from typing import List, Optional from pydantic.v1 import Field, parse_obj_as, validator -from ...components.medium import MediumType +from ...components.medium import MediumType from ..core.http_util import http from ..core.types import Queryable diff --git a/tidy3d/web/api/mode.py b/tidy3d/web/api/mode.py index b6fb8a2980..cd52e69c70 100644 --- a/tidy3d/web/api/mode.py +++ b/tidy3d/web/api/mode.py @@ -1,37 +1,34 @@ """Web API for mode solver""" from __future__ import annotations -from typing import Optional, Callable -from datetime import datetime import os import pathlib import tempfile import time -from joblib import Parallel, delayed +from datetime import datetime +from typing import Callable, List, Optional import pydantic.v1 as pydantic from botocore.exceptions import ClientError - -from typing import List +from joblib import Parallel, delayed from rich.progress import Progress -from ..core.environment import Env -from ...components.simulation import Simulation from ...components.data.monitor_data import ModeSolverData from ...components.medium import AbstractCustomMedium +from ...components.simulation import Simulation from ...components.types import Literal from ...exceptions import WebError -from ...log import log, get_logging_console +from ...log import get_logging_console, log +from ...plugins.mode.mode_solver import MODE_MONITOR_NAME, ModeSolver +from ...version import __version__ from ..core.core_config import get_logger_console +from ..core.environment import Env from ..core.http_util import http from ..core.s3utils import download_file, download_gz_file, upload_file from ..core.task_core import Folder from ..core.types import ResourceLifecycle, Submittable -from ...plugins.mode.mode_solver import ModeSolver, MODE_MONITOR_NAME -from ...version import __version__ - SIMULATION_JSON = "simulation.json" SIM_FILE_HDF5_GZ = "simulation.hdf5.gz" MODESOLVER_API = "tidy3d/modesolver/py" diff --git a/tidy3d/web/api/tidy3d_stub.py b/tidy3d/web/api/tidy3d_stub.py index 24cc25d537..3f36c5062c 100644 --- a/tidy3d/web/api/tidy3d_stub.py +++ b/tidy3d/web/api/tidy3d_stub.py @@ -2,28 +2,28 @@ from __future__ import annotations import json -from typing import Union, Callable, List +from typing import Callable, List, Union import pydantic.v1 as pd from pydantic.v1 import BaseModel +from ... import log +from ...components.base import _get_valid_extension +from ...components.data.monitor_data import ModeSolverData +from ...components.data.sim_data import SimulationData +from ...components.eme.data.sim_data import EMESimulationData +from ...components.eme.simulation import EMESimulation +from ...components.heat.data.sim_data import HeatSimulationData +from ...components.heat.simulation import HeatSimulation +from ...components.simulation import Simulation +from ...plugins.mode.mode_solver import ModeSolver from ..core.file_util import ( - read_simulation_from_json, read_simulation_from_hdf5, read_simulation_from_hdf5_gz, + read_simulation_from_json, ) from ..core.stub import TaskStub, TaskStubData -from ... import log -from ...components.base import _get_valid_extension -from ...components.data.sim_data import SimulationData -from ...components.data.monitor_data import ModeSolverData from ..core.types import TaskType -from ...components.simulation import Simulation -from ...plugins.mode.mode_solver import ModeSolver -from ...components.heat.simulation import HeatSimulation -from ...components.heat.data.sim_data import HeatSimulationData -from ...components.eme.simulation import EMESimulation -from ...components.eme.data.sim_data import EMESimulationData SimulationType = Union[Simulation, HeatSimulation, EMESimulation] SimulationDataType = Union[SimulationData, HeatSimulationData, EMESimulationData] diff --git a/tidy3d/web/api/webapi.py b/tidy3d/web/api/webapi.py index 7e77613ddd..59443d590b 100644 --- a/tidy3d/web/api/webapi.py +++ b/tidy3d/web/api/webapi.py @@ -3,25 +3,26 @@ import os import time from datetime import datetime, timedelta -from typing import List, Dict, Callable -from requests import HTTPError +from typing import Callable, Dict, List + import pytz +from requests import HTTPError from rich.progress import Progress -from .tidy3d_stub import Tidy3dStub, Tidy3dStubData, SimulationType, SimulationDataType +from ...components.types import Literal +from ...exceptions import WebError +from ...log import get_logging_console, log +from ..core.constants import SIM_FILE_HDF5, TaskId +from ..core.environment import Env +from ..core.task_core import Folder, SimulationTask +from ..core.task_info import ChargeType, TaskInfo from .connect_util import ( - wait_for_connection, REFRESH_TIME, - get_time_steps_str, get_grid_points_str, + get_time_steps_str, + wait_for_connection, ) -from ..core.environment import Env -from ..core.constants import SIM_FILE_HDF5, TaskId -from ..core.task_core import SimulationTask, Folder -from ..core.task_info import TaskInfo, ChargeType -from ...components.types import Literal -from ...log import log, get_logging_console -from ...exceptions import WebError +from .tidy3d_stub import SimulationDataType, SimulationType, Tidy3dStub, Tidy3dStubData # time between checking run status RUN_REFRESH_TIME = 1.0 diff --git a/tidy3d/web/cli/app.py b/tidy3d/web/cli/app.py index 1f2f87b7dc..615dc758ed 100644 --- a/tidy3d/web/cli/app.py +++ b/tidy3d/web/cli/app.py @@ -9,9 +9,9 @@ import requests import toml -from ..cli.constants import TIDY3D_DIR, CONFIG_FILE, CREDENTIAL_FILE +from ..cli.constants import CONFIG_FILE, CREDENTIAL_FILE, TIDY3D_DIR from ..cli.migrate import migrate -from ..core.constants import KEY_APIKEY, HEADER_APIKEY +from ..core.constants import HEADER_APIKEY, KEY_APIKEY from ..core.environment import Env from .develop.index import develop diff --git a/tidy3d/web/cli/develop/__init__.py b/tidy3d/web/cli/develop/__init__.py index 3b5e17eda5..022b3049fa 100644 --- a/tidy3d/web/cli/develop/__init__.py +++ b/tidy3d/web/cli/develop/__init__.py @@ -8,34 +8,31 @@ replace_in_files_command, ) -# Import from tests.py -from .tests import test_options, test_in_environment_command - +# Import from index.py +from .index import develop # Import from install.py from .install import ( activate_correct_poetry_python, configure_submodules, - verify_pandoc_is_installed_and_version_less_than_3, - verify_pipx_is_installed, - verify_poetry_is_installed, - verify_sphinx_is_installed, get_install_directory_command, install_development_environment, install_in_poetry, uninstall_development_environment, update_submodules_remote, verify_development_environment, + verify_pandoc_is_installed_and_version_less_than_3, + verify_pipx_is_installed, + verify_poetry_is_installed, + verify_sphinx_is_installed, ) - from .packaging import benchmark_timing_operations, benchmark_timing_operations_command -# Import from utils.py -from .utils import get_install_directory, echo_and_run_subprocess, echo_and_check_subprocess - +# Import from tests.py +from .tests import test_in_environment_command, test_options -# Import from index.py -from .index import develop +# Import from utils.py +from .utils import echo_and_check_subprocess, echo_and_run_subprocess, get_install_directory __all__ = [ "benchmark_timing_operations", diff --git a/tidy3d/web/cli/develop/documentation.py b/tidy3d/web/cli/develop/documentation.py index 2d49383644..5535d961ad 100644 --- a/tidy3d/web/cli/develop/documentation.py +++ b/tidy3d/web/cli/develop/documentation.py @@ -12,10 +12,12 @@ poetry run tidy3d develop convert-all-markdown-to-rst """ -import click import json import os from typing import Optional + +import click + from .index import develop from .utils import echo_and_check_subprocess, get_install_directory diff --git a/tidy3d/web/cli/develop/packaging.py b/tidy3d/web/cli/develop/packaging.py index 395ad57503..58280c1aee 100644 --- a/tidy3d/web/cli/develop/packaging.py +++ b/tidy3d/web/cli/develop/packaging.py @@ -7,10 +7,11 @@ """ import pathlib +import subprocess +from pathlib import Path import click -from pathlib import Path -import subprocess + from .index import develop from .utils import echo_and_check_subprocess diff --git a/tidy3d/web/cli/develop/tests.py b/tidy3d/web/cli/develop/tests.py index dd2d15bd2a..4022643882 100644 --- a/tidy3d/web/cli/develop/tests.py +++ b/tidy3d/web/cli/develop/tests.py @@ -4,9 +4,10 @@ """ import click -from .utils import echo_and_run_subprocess + from .index import develop from .install import install_in_poetry +from .utils import echo_and_run_subprocess __all__ = [ "test_options", diff --git a/tidy3d/web/cli/develop/utils.py b/tidy3d/web/cli/develop/utils.py index 9749ebad03..c826c13a49 100644 --- a/tidy3d/web/cli/develop/utils.py +++ b/tidy3d/web/cli/develop/utils.py @@ -4,6 +4,7 @@ import pathlib import subprocess + import tidy3d __all__ = [ diff --git a/tidy3d/web/cli/migrate.py b/tidy3d/web/cli/migrate.py index 9b31c071a5..5289250a3f 100644 --- a/tidy3d/web/cli/migrate.py +++ b/tidy3d/web/cli/migrate.py @@ -6,9 +6,9 @@ import requests import toml -from .constants import CONFIG_FILE, CREDENTIAL_FILE, TIDY3D_DIR -from ..core.constants import KEY_APIKEY, HEADER_APPLICATION, HEADER_APPLICATION_VALUE +from ..core.constants import HEADER_APPLICATION, HEADER_APPLICATION_VALUE, KEY_APIKEY from ..core.environment import Env +from .constants import CONFIG_FILE, CREDENTIAL_FILE, TIDY3D_DIR def migrate() -> bool: diff --git a/tidy3d/web/core/environment.py b/tidy3d/web/core/environment.py index e5797ce830..0597f3e93e 100644 --- a/tidy3d/web/core/environment.py +++ b/tidy3d/web/core/environment.py @@ -1,9 +1,10 @@ """Environment Setup.""" import os -from .core_config import get_logger +import ssl from pydantic.v1 import BaseSettings, Field -import ssl + +from .core_config import get_logger class EnvironmentConfig(BaseSettings): diff --git a/tidy3d/web/core/http_util.py b/tidy3d/web/core/http_util.py index 9beb557848..986ef5de59 100644 --- a/tidy3d/web/core/http_util.py +++ b/tidy3d/web/core/http_util.py @@ -1,31 +1,30 @@ """Http connection pool and authentication management.""" import os -from functools import wraps from enum import Enum +from functools import wraps +from os.path import expanduser from typing import Dict import requests +import toml from requests.adapters import HTTPAdapter from urllib3.util.ssl_ import create_urllib3_context -import toml +from . import core_config from .constants import ( - SIMCLOUD_APIKEY, - KEY_APIKEY, HEADER_APIKEY, - HEADER_VERSION, - HEADER_SOURCE, - HEADER_USER_AGENT, HEADER_APPLICATION, - HEADER_SOURCE_VALUE, HEADER_APPLICATION_VALUE, + HEADER_SOURCE, + HEADER_SOURCE_VALUE, + HEADER_USER_AGENT, + HEADER_VERSION, + KEY_APIKEY, + SIMCLOUD_APIKEY, ) - from .environment import Env from .exceptions import WebError -from os.path import expanduser -from . import core_config REINITIALIZED = False diff --git a/tidy3d/web/core/s3utils.py b/tidy3d/web/core/s3utils.py index 5d629ce2e7..a563523c26 100644 --- a/tidy3d/web/core/s3utils.py +++ b/tidy3d/web/core/s3utils.py @@ -1,9 +1,8 @@ """handles filesystem, storage """ import os -import tempfile - import pathlib +import tempfile import urllib from datetime import datetime from enum import Enum @@ -12,13 +11,20 @@ import boto3 from boto3.s3.transfer import TransferConfig from pydantic.v1 import BaseModel, Field -from rich.progress import TextColumn, Progress, BarColumn, DownloadColumn -from rich.progress import TransferSpeedColumn, TimeRemainingColumn -from .http_util import http -from .file_util import extract_gzip_file -from .environment import Env +from rich.progress import ( + BarColumn, + DownloadColumn, + Progress, + TextColumn, + TimeRemainingColumn, + TransferSpeedColumn, +) + from .core_config import get_logger_console +from .environment import Env from .exceptions import WebError +from .file_util import extract_gzip_file +from .http_util import http class _UserCredential(BaseModel): diff --git a/tidy3d/web/core/task_core.py b/tidy3d/web/core/task_core.py index a1541c2d75..d46e5686cb 100644 --- a/tidy3d/web/core/task_core.py +++ b/tidy3d/web/core/task_core.py @@ -5,25 +5,23 @@ import pathlib import tempfile from datetime import datetime -from typing import List, Optional, Callable, Tuple +from typing import Callable, List, Optional, Tuple + import pydantic.v1 as pd -from pydantic.v1 import Extra, Field, parse_obj_as from botocore.exceptions import ClientError +from pydantic.v1 import Extra, Field, parse_obj_as from . import http_util +from .cache import FOLDER_CACHE +from .constants import SIM_FILE_HDF5_GZ, SIM_LOG_FILE, SIMULATION_DATA_HDF5, SIMULATION_DATA_HDF5_GZ from .core_config import get_logger_console from .environment import Env from .exceptions import WebError - -from .cache import FOLDER_CACHE +from .file_util import read_simulation_from_hdf5 from .http_util import http from .s3utils import download_file, download_gz_file, upload_file from .stub import TaskStub -from .types import Queryable, ResourceLifecycle, Submittable -from .types import Tidy3DResource - -from .constants import SIM_FILE_HDF5_GZ, SIMULATION_DATA_HDF5, SIMULATION_DATA_HDF5_GZ, SIM_LOG_FILE -from .file_util import read_simulation_from_hdf5 +from .types import Queryable, ResourceLifecycle, Submittable, Tidy3DResource class Folder(Tidy3DResource, Queryable, extra=Extra.allow): diff --git a/tidy3d/web/core/task_info.py b/tidy3d/web/core/task_info.py index f1714db3a6..4337727949 100644 --- a/tidy3d/web/core/task_info.py +++ b/tidy3d/web/core/task_info.py @@ -1,7 +1,7 @@ """ Defnes information about a task """ +from abc import ABC from datetime import datetime from enum import Enum -from abc import ABC from typing import Optional import pydantic.v1 as pydantic diff --git a/tidy3d/web/core/types.py b/tidy3d/web/core/types.py index 1615775d9f..436fb9f56a 100644 --- a/tidy3d/web/core/types.py +++ b/tidy3d/web/core/types.py @@ -2,9 +2,9 @@ from __future__ import annotations from abc import ABC, abstractmethod +from enum import Enum from pydantic.v1 import BaseModel -from enum import Enum class Tidy3DResource(BaseModel, ABC):