tidy3d 2.11.0.dev0__tar.gz → 2.11.0.dev1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/PKG-INFO +10 -4
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/pyproject.toml +17 -3
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/__init__.py +24 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/autograd/derivative_utils.py +308 -48
- tidy3d-2.11.0.dev1/tidy3d/components/autograd/source_factory.py +122 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/autograd/utils.py +14 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/base.py +26 -11
- tidy3d-2.11.0.dev1/tidy3d/components/base_sim/data/monitor_data.py +125 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/beam.py +17 -4
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/data_array.py +153 -4
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/dataset.py +95 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/monitor_data.py +250 -98
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/sim_data.py +51 -32
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/unstructured/base.py +420 -169
- tidy3d-2.11.0.dev1/tidy3d/components/data/unstructured/surface.py +491 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/unstructured/tetrahedral.py +61 -3
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/unstructured/triangular.py +24 -13
- tidy3d-2.11.0.dev1/tidy3d/components/diffraction.py +189 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/base.py +1 -7
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/utils_2d.py +0 -8
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/grid/grid.py +15 -9
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/material/multi_physics.py +1 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/material/tcad/charge.py +6 -5
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/medium.py +65 -155
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode/mode_solver.py +13 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode_spec.py +26 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/monitor.py +175 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/scene.py +5 -9
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/simulation.py +148 -93
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/source/base.py +27 -3
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/source/current.py +88 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/source/field.py +94 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/source/time.py +2 -8
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/structure.py +1 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/bandgap.py +12 -11
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/bandgap_energy.py +2 -2
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/boundary/charge.py +1 -1
- tidy3d-2.11.0.dev1/tidy3d/components/tcad/data/monitor_data/abstract.py +75 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/data/monitor_data/charge.py +16 -4
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/data/sim_data.py +54 -5
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/effective_DOS.py +1 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/generation_recombination.py +2 -2
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/mobility.py +4 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/monitors/charge.py +2 -2
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/monitors/heat.py +5 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/simulation/heat_charge.py +6 -12
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/__init__.py +2 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/base.py +24 -6
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/monitor.py +10 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/monitor_data.py +4 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/viz/__init__.py +10 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/viz/axes_utils.py +137 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/serializer.py +0 -3
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/constants.py +6 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/packaging.py +26 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/README.md +1 -6
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/region.py +8 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/klayout/drc/README.md +3 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/klayout/util.py +31 -1
- tidy3d-2.11.0.dev1/tidy3d/plugins/microwave/rf_material_library.py +1376 -0
- tidy3d-2.11.0.dev1/tidy3d/plugins/microwave/rf_material_reference.py +146 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/run.py +44 -12
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/updater.py +34 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/version.py +1 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/asynchronous.py +6 -1
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/autograd/autograd.py +365 -98
- tidy3d-2.11.0.dev1/tidy3d/web/api/autograd/backward.py +731 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/autograd/engine.py +7 -4
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/autograd/forward.py +1 -1
- tidy3d-2.11.0.dev1/tidy3d/web/api/autograd/types.py +193 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/autograd/utils.py +34 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/container.py +32 -13
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/run.py +7 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/webapi.py +19 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cache.py +1 -6
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/task_core.py +14 -1
- tidy3d-2.11.0.dev0/tidy3d/components/base_sim/data/monitor_data.py +0 -26
- tidy3d-2.11.0.dev0/tidy3d/components/tcad/data/monitor_data/abstract.py +0 -145
- tidy3d-2.11.0.dev0/tidy3d/plugins/microwave/rf_material_library.py +0 -255
- tidy3d-2.11.0.dev0/tidy3d/plugins/microwave/rf_material_reference.py +0 -43
- tidy3d-2.11.0.dev0/tidy3d/web/api/autograd/backward.py +0 -487
- tidy3d-2.11.0.dev0/tidy3d/web/api/autograd/types.py +0 -47
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/LICENSE +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/__main__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/_runtime.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/compat.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/apodization.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/autograd/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/autograd/boxes.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/autograd/field_map.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/autograd/functions.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/autograd/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/base_sim/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/base_sim/data/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/base_sim/data/sim_data.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/base_sim/monitor.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/base_sim/simulation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/base_sim/source.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/bc_placement.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/boundary.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/index.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/unstructured/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/validators.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/data/zbf.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/dispersion_fitter.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/docstrings.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/eme/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/eme/data/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/eme/data/dataset.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/eme/data/monitor_data.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/eme/data/sim_data.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/eme/grid.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/eme/monitor.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/eme/simulation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/eme/sweep.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/field_projection.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/file_util.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/frequencies.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/frequency_extrapolation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/bound_ops.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/float_utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/mesh.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/polyslab.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/primitives.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/triangulation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/geometry/utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/grid/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/grid/corner_finder.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/grid/grid_spec.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/grid/mesher.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/index.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/lumped_element.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/material/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/material/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/material/solver_types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/material/tcad/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/material/tcad/heat.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/material/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/base.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/data/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/data/data_array.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/data/dataset.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/data/monitor_data.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/formulas/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/formulas/circuit_parameters.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/impedance_calculator.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/mode_spec.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/monitor.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/factory.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/integrals/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/integrals/auto.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/integrals/base.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/integrals/current.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/integrals/voltage.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/mode_plane_analyzer.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/specs/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/specs/base.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/specs/current.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/specs/impedance.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/specs/voltage.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/path_integrals/viz.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/microwave/time.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode/LICENSE +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode/data/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode/data/sim_data.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode/derivatives.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode/simulation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode/solver.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/mode/transforms.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/nonlinear.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/parameter_perturbation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/run_time_spec.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/source/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/source/frame.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/source/freq_range.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/source/utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/spice/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/spice/analysis/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/spice/analysis/ac.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/spice/analysis/dc.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/spice/sources/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/spice/sources/ac.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/spice/sources/dc.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/spice/sources/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/spice/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/subpixel_spec.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/analysis/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/analysis/heat_simulation_type.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/boundary/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/boundary/abstract.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/boundary/heat.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/boundary/specification.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/data/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/data/monitor_data/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/data/monitor_data/heat.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/data/monitor_data/mesh.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/data/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/doping.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/grid.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/mesher.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/monitors/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/monitors/abstract.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/monitors/mesh.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/simulation/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/simulation/heat.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/source/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/source/abstract.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/source/coupled.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/source/heat.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/tcad/viz.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/time.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/time_modulation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/transformation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/mode_spec.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/simulation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/third_party.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/time.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/types/workflow.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/validators.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/viz/descartes.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/viz/flex_color_palettes.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/viz/flex_style.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/viz/plot_params.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/viz/plot_sim_3d.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/viz/styles.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/components/viz/visualization_spec.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/deprecations.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/legacy.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/loader.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/manager.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/migrations.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/profiles.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/registry.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/schema_utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/config/sections.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/exceptions.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/log.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/material_library/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/material_library/material_library.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/material_library/material_reference.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/material_library/parametric_materials.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/material_library/util.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/constants.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/differential_operators.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/functions.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/invdes/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/invdes/filters.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/invdes/misc.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/invdes/parametrizations.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/invdes/penalties.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/invdes/projections.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/invdes/symmetries.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/primitives/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/primitives/interpolate.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/primitives/misc.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/autograd/utilities.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/design/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/design/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/design/design.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/design/method.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/design/parameter.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/design/result.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/dispersion/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/dispersion/fit.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/dispersion/fit_fast.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/dispersion/fit_web.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/dispersion/web.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/expressions/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/expressions/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/expressions/base.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/expressions/functions.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/expressions/metrics.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/expressions/operators.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/expressions/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/expressions/variables.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/base.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/design.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/initialization.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/optimizer.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/penalty.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/result.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/transformation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/invdes/validators.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/klayout/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/klayout/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/klayout/drc/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/klayout/drc/defaults.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/klayout/drc/drc.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/klayout/drc/results.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/array_factor.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/auto_path_integrals.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/custom_path_integrals.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/impedance_calculator.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/lobe_measurer.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/models/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/models/coupled_microstrip.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/models/microstrip.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/path_integrals.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/microwave/viz.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/mode/LICENSE +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/mode/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/mode/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/mode/mode_solver.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/mode/web.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/polyslab/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/polyslab/polyslab.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/pytorch/README.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/pytorch/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/pytorch/wrapper.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/resonance/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/resonance/resonance.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/analysis/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/analysis/antenna.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/analysis/modal.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/analysis/terminal.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/component_modelers/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/component_modelers/base.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/component_modelers/modal.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/component_modelers/terminal.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/component_modelers/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/data/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/data/base.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/data/data_array.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/data/modal.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/data/terminal.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/data/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/ports/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/ports/base.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/ports/base_lumped.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/ports/base_terminal.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/ports/coaxial_lumped.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/ports/modal.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/ports/rectangular_lumped.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/ports/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/ports/wave.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/smatrix/utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/waveguide/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/plugins/waveguide/rectangular_dielectric.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/rf.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/style.mplstyle +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/autograd/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/autograd/constants.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/autograd/io_utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/cacert.pem +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/connect_util.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/material_fitter.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/material_library.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/mode.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/states.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/api/tidy3d_stub.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/app.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/cache.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/config.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/constants.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/develop/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/develop/documentation.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/develop/index.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/develop/install.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/develop/packaging.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/develop/tests.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/develop/utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/cli/readme.md +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/common.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/__init__.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/account.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/cache.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/constants.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/core_config.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/environment.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/exceptions.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/file_util.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/http_util.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/s3utils.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/stub.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/task_info.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/core/types.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/environment.py +0 -0
- {tidy3d-2.11.0.dev0 → tidy3d-2.11.0.dev1}/tidy3d/web/tests/conftest.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tidy3d
|
|
3
|
-
Version: 2.11.0.
|
|
3
|
+
Version: 2.11.0.dev1
|
|
4
4
|
Summary: A fast FDTD solver
|
|
5
5
|
License: LGPLv2+
|
|
6
6
|
License-File: LICENSE
|
|
@@ -22,6 +22,7 @@ Provides-Extra: extras
|
|
|
22
22
|
Provides-Extra: gdstk
|
|
23
23
|
Provides-Extra: heatcharge
|
|
24
24
|
Provides-Extra: pytorch
|
|
25
|
+
Provides-Extra: pyvista
|
|
25
26
|
Provides-Extra: ruff
|
|
26
27
|
Provides-Extra: scikit-rf
|
|
27
28
|
Provides-Extra: tests
|
|
@@ -52,13 +53,14 @@ Requires-Dist: matplotlib (>=3.10.0,<4.0.0)
|
|
|
52
53
|
Requires-Dist: memory_profiler (>=0.61.0,<0.62.0) ; extra == "dev"
|
|
53
54
|
Requires-Dist: mypy (==1.13.0) ; extra == "dev"
|
|
54
55
|
Requires-Dist: myst-parser (>=4.0.1,<5.0.0) ; extra == "dev" or extra == "docs"
|
|
55
|
-
Requires-Dist: nbconvert (>=7.
|
|
56
|
+
Requires-Dist: nbconvert (>=7.17.0,<8.0.0) ; extra == "dev" or extra == "docs"
|
|
56
57
|
Requires-Dist: nbdime (>=4.0.2,<5.0.0) ; extra == "dev" or extra == "docs"
|
|
57
58
|
Requires-Dist: nbsphinx (>=0.8.7,<0.10.0) ; extra == "dev" or extra == "docs"
|
|
58
59
|
Requires-Dist: networkx (>=2.6.3,<3.0.0) ; extra == "dev" or extra == "trimesh"
|
|
59
60
|
Requires-Dist: numpy (>=2.2.6,<2.5.0)
|
|
60
61
|
Requires-Dist: openpyxl (>=3.1.5,<4.0.0) ; extra == "dev" or extra == "docs"
|
|
61
62
|
Requires-Dist: optax (>=0.2.2,<0.3.0) ; extra == "dev" or extra == "docs"
|
|
63
|
+
Requires-Dist: orbax-checkpoint (<0.11.33) ; extra == "dev" or extra == "tests" or extra == "docs"
|
|
62
64
|
Requires-Dist: pandas (>=2.2,<3.0)
|
|
63
65
|
Requires-Dist: pre-commit (>=4,<5) ; extra == "dev" or extra == "tests"
|
|
64
66
|
Requires-Dist: psutil (>=7.2.1,<8.0.0) ; extra == "dev" or extra == "tests"
|
|
@@ -76,6 +78,7 @@ Requires-Dist: pytest-env (>=1.1.5,<2.0.0) ; extra == "dev" or extra == "tests"
|
|
|
76
78
|
Requires-Dist: pytest-testmon (>=2.1.3,<3.0.0) ; extra == "dev" or extra == "tests"
|
|
77
79
|
Requires-Dist: pytest-timeout (>=2.4.0,<3.0.0) ; extra == "dev" or extra == "tests"
|
|
78
80
|
Requires-Dist: pytest-xdist (>=3.6.1,<4.0.0) ; extra == "dev" or extra == "tests"
|
|
81
|
+
Requires-Dist: pyvista (>=0.45,<0.47.0) ; extra == "dev" or extra == "pyvista"
|
|
79
82
|
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
|
80
83
|
Requires-Dist: responses (>=0.25.8,<0.26.0)
|
|
81
84
|
Requires-Dist: rich (>=13.0,<14.0)
|
|
@@ -95,7 +98,7 @@ Requires-Dist: sphinx-notfound-page (>=1.1.0,<2.0.0) ; extra == "dev" or extra =
|
|
|
95
98
|
Requires-Dist: sphinx-sitemap (>=2.5.1,<3.0.0) ; extra == "dev" or extra == "docs"
|
|
96
99
|
Requires-Dist: sphinx-tabs (>=3.4.7,<4.0.0) ; extra == "dev" or extra == "docs"
|
|
97
100
|
Requires-Dist: sphinxemoji (>=0.3.2,<0.4.0) ; extra == "dev" or extra == "docs"
|
|
98
|
-
Requires-Dist: tidy3d-extras (==2.11.0.
|
|
101
|
+
Requires-Dist: tidy3d-extras (==2.11.0.dev1) ; extra == "extras"
|
|
99
102
|
Requires-Dist: tmm (>=0.2.0,<0.3.0) ; extra == "dev" or extra == "docs"
|
|
100
103
|
Requires-Dist: toml (>=0.10.2,<0.11.0)
|
|
101
104
|
Requires-Dist: tomlkit (>=0.13.2,<0.14.0)
|
|
@@ -103,9 +106,12 @@ Requires-Dist: torch (>=2.2.0,<3.0.0) ; (sys_platform != "darwin") and (extra ==
|
|
|
103
106
|
Requires-Dist: torch (>=2.2.0,<3.0.0) ; (sys_platform == "darwin") and (extra == "dev" or extra == "pytorch")
|
|
104
107
|
Requires-Dist: towncrier (>=25.8.0,<26.0.0) ; extra == "dev"
|
|
105
108
|
Requires-Dist: tox (>=4.33.0,<5.0.0) ; extra == "dev"
|
|
109
|
+
Requires-Dist: trame (>=3.0.0,<4.0.0) ; extra == "dev" or extra == "pyvista"
|
|
110
|
+
Requires-Dist: trame-vtk (>=2.0.0,<3.0.0) ; extra == "dev" or extra == "pyvista"
|
|
111
|
+
Requires-Dist: trame-vuetify (>=2.0.0,<3.0.0) ; extra == "dev" or extra == "pyvista"
|
|
106
112
|
Requires-Dist: trimesh (>=4.6,<5.0.0) ; extra == "dev" or extra == "tests" or extra == "trimesh" or extra == "heatcharge"
|
|
107
113
|
Requires-Dist: typing-extensions (>=4.15.0,<5.0.0)
|
|
108
|
-
Requires-Dist: vtk (>=9.2.6,<10.0.0) ; extra == "dev" or extra == "vtk" or extra == "heatcharge"
|
|
114
|
+
Requires-Dist: vtk (>=9.2.6,<10.0.0) ; extra == "dev" or extra == "vtk" or extra == "pyvista" or extra == "heatcharge"
|
|
109
115
|
Requires-Dist: xarray (>=2023.8,<2026.0.0)
|
|
110
116
|
Requires-Dist: zizmor (>=1.20.0,<2.0.0) ; extra == "dev"
|
|
111
117
|
Project-URL: Bug Tracker, https://github.com/flexcompute/tidy3d/issues
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "tidy3d"
|
|
3
|
-
version = "2.11.0.
|
|
3
|
+
version = "2.11.0.dev1"
|
|
4
4
|
description = "A fast FDTD solver"
|
|
5
5
|
authors = ["Tyler Hughes <tyler@flexcompute.com>"]
|
|
6
6
|
license = "LGPLv2+"
|
|
@@ -100,7 +100,7 @@ trimesh = { version = ">=4.6,<5.0.0", optional = true }
|
|
|
100
100
|
# docs
|
|
101
101
|
jupyter = { version = "^1.1.1", optional = true }
|
|
102
102
|
jinja2 = { version = ">=3.1.2,<4.0.0", optional = true }
|
|
103
|
-
nbconvert = { version = ">=7.
|
|
103
|
+
nbconvert = { version = ">=7.17.0,<8.0.0", optional = true }
|
|
104
104
|
sphinx = { version = ">=6,<9.0.0", optional = true }
|
|
105
105
|
nbsphinx = { version = ">=0.8.7,<0.10.0", optional = true }
|
|
106
106
|
sphinx-copybutton = { version = ">=0.5.2,<0.6.0", optional = true }
|
|
@@ -119,12 +119,17 @@ myst-parser = { version = "^4.0.1", optional = true }
|
|
|
119
119
|
optax = { version = ">=0.2.2,<0.3.0", optional = true }
|
|
120
120
|
signac = { version = "^2.3.0", optional = true }
|
|
121
121
|
flax = { version = ">=0.8.2,<0.13", optional = true }
|
|
122
|
+
orbax-checkpoint = { version = "<0.11.33", optional = true }
|
|
122
123
|
sax = { version = "^0.11", optional = true }
|
|
123
124
|
vtk = { version = ">=9.2.6,<10.0.0", optional = true }
|
|
125
|
+
pyvista = { version = ">=0.45,<0.47.0", optional = true }
|
|
126
|
+
trame = { version = ">=3.0.0,<4.0.0", optional = true }
|
|
127
|
+
trame-vtk = { version = ">=2.0.0,<3.0.0", optional = true }
|
|
128
|
+
trame-vuetify = { version = ">=2.0.0,<3.0.0", optional = true }
|
|
124
129
|
sphinxemoji = { version = "^0.3.2", optional = true }
|
|
125
130
|
cma = { version = "^4.4.1", optional = true }
|
|
126
131
|
openpyxl = { version = "^3.1.5", optional = true }
|
|
127
|
-
tidy3d-extras = { version = "2.11.0.
|
|
132
|
+
tidy3d-extras = { version = "2.11.0.dev1", optional = true }
|
|
128
133
|
|
|
129
134
|
[tool.poetry.extras]
|
|
130
135
|
dev = [
|
|
@@ -147,6 +152,7 @@ dev = [
|
|
|
147
152
|
'nbsphinx',
|
|
148
153
|
'networkx',
|
|
149
154
|
'optax',
|
|
155
|
+
'orbax-checkpoint',
|
|
150
156
|
'psutil',
|
|
151
157
|
'pre-commit',
|
|
152
158
|
'pydata-sphinx-theme',
|
|
@@ -178,6 +184,10 @@ dev = [
|
|
|
178
184
|
'trimesh',
|
|
179
185
|
'scikit-rf',
|
|
180
186
|
'vtk',
|
|
187
|
+
'pyvista',
|
|
188
|
+
'trame',
|
|
189
|
+
'trame-vtk',
|
|
190
|
+
'trame-vuetify',
|
|
181
191
|
'cma',
|
|
182
192
|
'diff-cover',
|
|
183
193
|
'openpyxl',
|
|
@@ -185,6 +195,7 @@ dev = [
|
|
|
185
195
|
'libcst',
|
|
186
196
|
]
|
|
187
197
|
tests = [
|
|
198
|
+
'orbax-checkpoint',
|
|
188
199
|
'psutil',
|
|
189
200
|
'pre-commit',
|
|
190
201
|
'pylint',
|
|
@@ -197,6 +208,7 @@ tests = [
|
|
|
197
208
|
'trimesh'
|
|
198
209
|
]
|
|
199
210
|
docs = [
|
|
211
|
+
'orbax-checkpoint',
|
|
200
212
|
"jupyter",
|
|
201
213
|
"jinja2",
|
|
202
214
|
"nbconvert",
|
|
@@ -229,6 +241,7 @@ gdstk = ["gdstk"]
|
|
|
229
241
|
scikit-rf = ["scikit-rf"]
|
|
230
242
|
trimesh = ["trimesh", "networkx", "rtree"]
|
|
231
243
|
vtk = ["vtk"]
|
|
244
|
+
pyvista = ["pyvista", "vtk", "trame", "trame-vtk", "trame-vuetify"]
|
|
232
245
|
ruff = ["ruff"]
|
|
233
246
|
heatcharge = ["trimesh", "vtk"]
|
|
234
247
|
# plugins with extra deps
|
|
@@ -369,6 +382,7 @@ env = ["MPLBACKEND=Agg", "OMP_NUM_THREADS=1", "TIDY3D_MICROWAVE__SUPPRESS_RF_LIC
|
|
|
369
382
|
doctest_optionflags = "NORMALIZE_WHITESPACE ELLIPSIS"
|
|
370
383
|
norecursedirs = [
|
|
371
384
|
"tests/_test_local",
|
|
385
|
+
"tests/_integration",
|
|
372
386
|
"tests/test_cli",
|
|
373
387
|
"tests/_test_data",
|
|
374
388
|
"tests/_test_notebooks",
|
|
@@ -138,7 +138,6 @@ from tidy3d.components.tcad.types import (
|
|
|
138
138
|
|
|
139
139
|
from .components.apodization import ApodizationSpec
|
|
140
140
|
|
|
141
|
-
# boundary placement for other solvers
|
|
142
141
|
# boundary placement for other solvers
|
|
143
142
|
from .components.bc_placement import (
|
|
144
143
|
MediumMediumInterface,
|
|
@@ -201,7 +200,14 @@ from .components.data.data_array import (
|
|
|
201
200
|
GroupIndexDataArray,
|
|
202
201
|
HeatDataArray,
|
|
203
202
|
IndexedDataArray,
|
|
203
|
+
IndexedFieldDataArray,
|
|
204
|
+
IndexedFieldTimeDataArray,
|
|
204
205
|
IndexedFieldVoltageDataArray,
|
|
206
|
+
IndexedFreqDataArray,
|
|
207
|
+
IndexedSurfaceFieldDataArray,
|
|
208
|
+
IndexedSurfaceFieldTimeDataArray,
|
|
209
|
+
IndexedSurfaceFreqDataArray,
|
|
210
|
+
IndexedSurfaceTimeDataArray,
|
|
205
211
|
IndexedTimeDataArray,
|
|
206
212
|
IndexedVoltageDataArray,
|
|
207
213
|
ModeAmpsDataArray,
|
|
@@ -239,8 +245,11 @@ from .components.data.monitor_data import (
|
|
|
239
245
|
ModeData,
|
|
240
246
|
ModeSolverData,
|
|
241
247
|
PermittivityData,
|
|
248
|
+
SurfaceFieldData,
|
|
249
|
+
SurfaceFieldTimeData,
|
|
242
250
|
)
|
|
243
251
|
from .components.data.sim_data import DATA_TYPE_MAP, SimulationData
|
|
252
|
+
from .components.data.unstructured.surface import TriangularSurfaceDataset
|
|
244
253
|
from .components.data.utils import (
|
|
245
254
|
TetrahedralGridDataset,
|
|
246
255
|
TriangularGridDataset,
|
|
@@ -391,6 +400,8 @@ from .components.monitor import (
|
|
|
391
400
|
ModeSolverMonitor,
|
|
392
401
|
Monitor,
|
|
393
402
|
PermittivityMonitor,
|
|
403
|
+
SurfaceFieldMonitor,
|
|
404
|
+
SurfaceFieldTimeMonitor,
|
|
394
405
|
)
|
|
395
406
|
|
|
396
407
|
# nonlinear
|
|
@@ -722,7 +733,14 @@ __all__ = [
|
|
|
722
733
|
"ImpedanceCalculator",
|
|
723
734
|
"IndexPerturbation",
|
|
724
735
|
"IndexedDataArray",
|
|
736
|
+
"IndexedFieldDataArray",
|
|
737
|
+
"IndexedFieldTimeDataArray",
|
|
725
738
|
"IndexedFieldVoltageDataArray",
|
|
739
|
+
"IndexedFreqDataArray",
|
|
740
|
+
"IndexedSurfaceFieldDataArray",
|
|
741
|
+
"IndexedSurfaceFieldTimeDataArray",
|
|
742
|
+
"IndexedSurfaceFreqDataArray",
|
|
743
|
+
"IndexedSurfaceTimeDataArray",
|
|
726
744
|
"IndexedTimeDataArray",
|
|
727
745
|
"IndexedVoltageDataArray",
|
|
728
746
|
"InsulatingBC",
|
|
@@ -851,6 +869,10 @@ __all__ = [
|
|
|
851
869
|
"StructureSimulationBoundary",
|
|
852
870
|
"StructureStructureInterface",
|
|
853
871
|
"SubpixelSpec",
|
|
872
|
+
"SurfaceFieldData",
|
|
873
|
+
"SurfaceFieldMonitor",
|
|
874
|
+
"SurfaceFieldTimeData",
|
|
875
|
+
"SurfaceFieldTimeMonitor",
|
|
854
876
|
"SurfaceImpedance",
|
|
855
877
|
"SurfaceImpedanceFitterParam",
|
|
856
878
|
"TemperatureBC",
|
|
@@ -861,6 +883,7 @@ __all__ = [
|
|
|
861
883
|
"Transformed",
|
|
862
884
|
"TriangleMesh",
|
|
863
885
|
"TriangularGridDataset",
|
|
886
|
+
"TriangularSurfaceDataset",
|
|
864
887
|
"TwoPhotonAbsorption",
|
|
865
888
|
"UniformCurrentSource",
|
|
866
889
|
"UniformGrid",
|
|
@@ -10,8 +10,9 @@ from typing import TYPE_CHECKING, Any, Optional
|
|
|
10
10
|
import numpy as np
|
|
11
11
|
from numpy.typing import NDArray
|
|
12
12
|
|
|
13
|
-
from tidy3d.components.data.data_array import ScalarFieldDataArray
|
|
13
|
+
from tidy3d.components.data.data_array import ScalarFieldDataArray, SpatialDataArray
|
|
14
14
|
from tidy3d.components.data.utils import _zeros_like
|
|
15
|
+
from tidy3d.components.grid.grid import _compute_1d_cell_sizes
|
|
15
16
|
from tidy3d.components.types import ArrayLike, Bound
|
|
16
17
|
from tidy3d.config import config
|
|
17
18
|
from tidy3d.constants import C_0, EPSILON_0, LARGE_NUMBER, MU_0
|
|
@@ -34,6 +35,7 @@ PermittivityData = dict[str, ScalarFieldDataArray]
|
|
|
34
35
|
EpsType = ScalarFieldDataArray
|
|
35
36
|
ArrayFloat = NDArray[np.floating]
|
|
36
37
|
ArrayComplex = NDArray[np.complexfloating]
|
|
38
|
+
TRANSPOSE_INTERP_COORDINATE_TOLERANCE = 1e-12
|
|
37
39
|
|
|
38
40
|
|
|
39
41
|
class LazyInterpolator:
|
|
@@ -101,19 +103,6 @@ class DerivativeInfo:
|
|
|
101
103
|
Dataset of relative permittivity values along all three dimensions.
|
|
102
104
|
Used for automatically computing permittivity inside or outside of a simple geometry."""
|
|
103
105
|
|
|
104
|
-
eps_in: EpsType | None
|
|
105
|
-
"""Permittivity inside the Structure.
|
|
106
|
-
Computed only when structure.medium.is_custom is False. Contains the simulation
|
|
107
|
-
permittivity inside the structure when the simulation background medium is set to
|
|
108
|
-
the structure medium and all structures after the current structure are kept. Should
|
|
109
|
-
be used as the inside permittivity for shape derivative computations."""
|
|
110
|
-
|
|
111
|
-
eps_out: EpsType
|
|
112
|
-
"""Permittivity outside the Structure.
|
|
113
|
-
Contains the simulation permittivity outside the structure when the current structure
|
|
114
|
-
is removed from the structure list. Should be used as the outside permittivity for
|
|
115
|
-
shape derivative computations."""
|
|
116
|
-
|
|
117
106
|
bounds: Bound
|
|
118
107
|
"""Geometry bounds.
|
|
119
108
|
Bounds corresponding to the structure, used in Medium calculations."""
|
|
@@ -137,6 +126,19 @@ class DerivativeInfo:
|
|
|
137
126
|
|
|
138
127
|
# Optional fields with defaults
|
|
139
128
|
|
|
129
|
+
eps_in: Optional[EpsType] = None
|
|
130
|
+
"""Permittivity inside the Structure.
|
|
131
|
+
Computed only when structure.medium.is_custom is False. Contains the simulation
|
|
132
|
+
permittivity inside the structure when the simulation background medium is set to
|
|
133
|
+
the structure medium and all structures after the current structure are kept. Should
|
|
134
|
+
be used as the inside permittivity for shape derivative computations."""
|
|
135
|
+
|
|
136
|
+
eps_out: Optional[EpsType] = None
|
|
137
|
+
"""Permittivity outside the Structure.
|
|
138
|
+
Contains the simulation permittivity outside the structure when the current structure
|
|
139
|
+
is removed from the structure list. Should be used as the outside permittivity for
|
|
140
|
+
shape derivative computations."""
|
|
141
|
+
|
|
140
142
|
H_der_map: Optional[FieldDataDict] = None
|
|
141
143
|
"""Magnetic field gradient map.
|
|
142
144
|
Dataset where the field components ("Hx", "Hy", "Hz") store the multiplication
|
|
@@ -196,34 +198,6 @@ class DerivativeInfo:
|
|
|
196
198
|
return coords
|
|
197
199
|
return np.nan_to_num(coords, posinf=LARGE_NUMBER, neginf=-LARGE_NUMBER)
|
|
198
200
|
|
|
199
|
-
@staticmethod
|
|
200
|
-
def _evaluate_with_interpolators(
|
|
201
|
-
interpolators: dict[str, Callable[[ArrayFloat], ArrayComplex]],
|
|
202
|
-
coords: ArrayFloat,
|
|
203
|
-
) -> dict[str, ArrayComplex]:
|
|
204
|
-
"""Evaluate field components at coordinates using cached interpolators.
|
|
205
|
-
|
|
206
|
-
Parameters
|
|
207
|
-
----------
|
|
208
|
-
interpolators : dict
|
|
209
|
-
Dictionary mapping field component names to ``RegularGridInterpolator`` objects.
|
|
210
|
-
coords : np.ndarray
|
|
211
|
-
Spatial coordinates (N, 3) where fields are evaluated.
|
|
212
|
-
|
|
213
|
-
Returns
|
|
214
|
-
-------
|
|
215
|
-
dict[str, np.ndarray]
|
|
216
|
-
Dictionary mapping component names to field values at coordinates.
|
|
217
|
-
"""
|
|
218
|
-
auto_cfg = config.adjoint
|
|
219
|
-
float_dtype = auto_cfg.gradient_dtype_float
|
|
220
|
-
complex_dtype = auto_cfg.gradient_dtype_complex
|
|
221
|
-
|
|
222
|
-
coords = DerivativeInfo._nan_to_num_if_needed(coords)
|
|
223
|
-
if coords.dtype != float_dtype and coords.dtype != complex_dtype:
|
|
224
|
-
coords = coords.astype(float_dtype, copy=False)
|
|
225
|
-
return {name: interp(coords) for name, interp in interpolators.items()}
|
|
226
|
-
|
|
227
201
|
def create_interpolators(self, dtype: Optional[np.dtype[Any]] = None) -> dict[str, Any]:
|
|
228
202
|
"""Create interpolators for field components and permittivity data.
|
|
229
203
|
|
|
@@ -411,6 +385,14 @@ class DerivativeInfo:
|
|
|
411
385
|
"Please create interpolators using 'create_interpolators()' first."
|
|
412
386
|
)
|
|
413
387
|
|
|
388
|
+
if self.eps_in is None or self.eps_out is None:
|
|
389
|
+
raise ValueError(
|
|
390
|
+
"Missing permittivity data for geometry gradients: both "
|
|
391
|
+
"'eps_in' and 'eps_out' must be provided."
|
|
392
|
+
)
|
|
393
|
+
eps_in = self.eps_in
|
|
394
|
+
eps_out = self.eps_out
|
|
395
|
+
|
|
414
396
|
# In all paths below, we need to have computed the gradient integration for a
|
|
415
397
|
# dielectric-dielectric interface.
|
|
416
398
|
vjps_dielectric = self._evaluate_dielectric_gradient_at_points(
|
|
@@ -419,8 +401,8 @@ class DerivativeInfo:
|
|
|
419
401
|
perps1,
|
|
420
402
|
perps2,
|
|
421
403
|
interpolators,
|
|
422
|
-
|
|
423
|
-
|
|
404
|
+
eps_in,
|
|
405
|
+
eps_out,
|
|
424
406
|
)
|
|
425
407
|
|
|
426
408
|
if self.is_medium_pec:
|
|
@@ -433,7 +415,7 @@ class DerivativeInfo:
|
|
|
433
415
|
mask_pec = self._detect_pec_gradient_points(
|
|
434
416
|
spatial_coords,
|
|
435
417
|
normals,
|
|
436
|
-
|
|
418
|
+
eps_in,
|
|
437
419
|
interpolators["eps_data"],
|
|
438
420
|
is_outside=False,
|
|
439
421
|
)
|
|
@@ -445,7 +427,7 @@ class DerivativeInfo:
|
|
|
445
427
|
perps1,
|
|
446
428
|
perps2,
|
|
447
429
|
interpolators,
|
|
448
|
-
("eps_out",
|
|
430
|
+
("eps_out", eps_out),
|
|
449
431
|
is_outside=True,
|
|
450
432
|
)
|
|
451
433
|
|
|
@@ -460,7 +442,7 @@ class DerivativeInfo:
|
|
|
460
442
|
mask_pec = self._detect_pec_gradient_points(
|
|
461
443
|
spatial_coords,
|
|
462
444
|
normals,
|
|
463
|
-
|
|
445
|
+
eps_out,
|
|
464
446
|
interpolators["eps_data"],
|
|
465
447
|
is_outside=True,
|
|
466
448
|
)
|
|
@@ -473,7 +455,7 @@ class DerivativeInfo:
|
|
|
473
455
|
perps1,
|
|
474
456
|
perps2,
|
|
475
457
|
interpolators,
|
|
476
|
-
("eps_in",
|
|
458
|
+
("eps_in", eps_in),
|
|
477
459
|
is_outside=False,
|
|
478
460
|
)
|
|
479
461
|
|
|
@@ -1103,7 +1085,285 @@ def integrate_within_bounds(arr: xr.DataArray, dims: list[str], bounds: Bound) -
|
|
|
1103
1085
|
return _arr.integrate(coord=dims_integrate)
|
|
1104
1086
|
|
|
1105
1087
|
|
|
1088
|
+
def compute_spatial_weights(
|
|
1089
|
+
arr: SpatialDataArray, dims: tuple[str, ...] = ("x", "y", "z")
|
|
1090
|
+
) -> SpatialDataArray:
|
|
1091
|
+
"""Compute cell-size weights for spatial coordinates.
|
|
1092
|
+
|
|
1093
|
+
Parameters
|
|
1094
|
+
----------
|
|
1095
|
+
arr : SpatialDataArray
|
|
1096
|
+
Data array providing spatial coordinates.
|
|
1097
|
+
dims : tuple[str, ...]
|
|
1098
|
+
Spatial dimension names to include in the weights.
|
|
1099
|
+
|
|
1100
|
+
Returns
|
|
1101
|
+
-------
|
|
1102
|
+
SpatialDataArray
|
|
1103
|
+
DataArray of weights broadcastable to ``arr``.
|
|
1104
|
+
"""
|
|
1105
|
+
|
|
1106
|
+
weight_dims = []
|
|
1107
|
+
weight_arrays = []
|
|
1108
|
+
for dim in dims:
|
|
1109
|
+
if dim not in arr.coords:
|
|
1110
|
+
continue
|
|
1111
|
+
coord = np.asarray(arr.coords[dim].data)
|
|
1112
|
+
if coord.size <= 1:
|
|
1113
|
+
continue
|
|
1114
|
+
weight_dims.append(dim)
|
|
1115
|
+
weight_arrays.append(_compute_1d_cell_sizes(coord))
|
|
1116
|
+
|
|
1117
|
+
if not weight_dims:
|
|
1118
|
+
return SpatialDataArray(1.0)
|
|
1119
|
+
|
|
1120
|
+
weights = np.ix_(*weight_arrays)
|
|
1121
|
+
weights_data = weights[0]
|
|
1122
|
+
for weight_array in weights[1:]:
|
|
1123
|
+
weights_data = weights_data * weight_array
|
|
1124
|
+
|
|
1125
|
+
coords = {dim: np.asarray(arr.coords[dim].data) for dim in weight_dims}
|
|
1126
|
+
return SpatialDataArray(weights_data, coords=coords, dims=tuple(weight_dims))
|
|
1127
|
+
|
|
1128
|
+
|
|
1129
|
+
def transpose_interp_axis(
|
|
1130
|
+
field_values: np.ndarray,
|
|
1131
|
+
field_coords_1d: np.ndarray,
|
|
1132
|
+
param_coords_1d: np.ndarray,
|
|
1133
|
+
*,
|
|
1134
|
+
method: str = "linear",
|
|
1135
|
+
coordinate_tolerance: float = TRANSPOSE_INTERP_COORDINATE_TOLERANCE,
|
|
1136
|
+
) -> np.ndarray:
|
|
1137
|
+
"""Transpose (adjoint) of 1D interpolation along one axis."""
|
|
1138
|
+
if param_coords_1d.size == 1:
|
|
1139
|
+
return field_values.sum(axis=0, keepdims=True)
|
|
1140
|
+
if np.any(param_coords_1d[1:] < param_coords_1d[:-1]):
|
|
1141
|
+
raise ValueError("Spatial coordinates must be sorted before computing derivatives.")
|
|
1142
|
+
if method not in ("linear", "nearest"):
|
|
1143
|
+
raise ValueError(f"Unsupported interpolation method: {method!r}.")
|
|
1144
|
+
|
|
1145
|
+
param_coords_1d = np.asarray(param_coords_1d, dtype=float)
|
|
1146
|
+
n_param = param_coords_1d.size
|
|
1147
|
+
n_field = field_values.shape[0]
|
|
1148
|
+
field_values_2d = field_values.reshape(n_field, -1)
|
|
1149
|
+
|
|
1150
|
+
field_coords = np.asarray(field_coords_1d, dtype=float)
|
|
1151
|
+
if coordinate_tolerance > 0.0:
|
|
1152
|
+
field_coords = np.clip(
|
|
1153
|
+
field_coords,
|
|
1154
|
+
param_coords_1d[0] - coordinate_tolerance,
|
|
1155
|
+
param_coords_1d[-1] + coordinate_tolerance,
|
|
1156
|
+
)
|
|
1157
|
+
|
|
1158
|
+
if method == "nearest":
|
|
1159
|
+
param_midpoints = (param_coords_1d[1:] + param_coords_1d[:-1]) / 2.0
|
|
1160
|
+
param_index_nearest = np.searchsorted(param_midpoints, field_coords)
|
|
1161
|
+
param_values_2d = np.zeros((n_param, field_values_2d.shape[1]), dtype=field_values.dtype)
|
|
1162
|
+
np.add.at(param_values_2d, param_index_nearest, field_values_2d)
|
|
1163
|
+
return param_values_2d.reshape((n_param,) + field_values.shape[1:])
|
|
1164
|
+
|
|
1165
|
+
param_index_upper = np.searchsorted(param_coords_1d, field_coords, side="right")
|
|
1166
|
+
param_index_upper = np.clip(param_index_upper, 1, n_param - 1)
|
|
1167
|
+
param_index_lower = param_index_upper - 1
|
|
1168
|
+
|
|
1169
|
+
segment_width = param_coords_1d[param_index_upper] - param_coords_1d[param_index_lower]
|
|
1170
|
+
segment_width = np.where(segment_width == 0, 1.0, segment_width)
|
|
1171
|
+
frac_upper = (field_coords - param_coords_1d[param_index_lower]) / segment_width
|
|
1172
|
+
frac_upper = np.clip(frac_upper, 0.0, 1.0)
|
|
1173
|
+
|
|
1174
|
+
w_lower = (1.0 - frac_upper)[:, None]
|
|
1175
|
+
w_upper = frac_upper[:, None]
|
|
1176
|
+
|
|
1177
|
+
param_values_2d = np.zeros((n_param, field_values_2d.shape[1]), dtype=field_values.dtype)
|
|
1178
|
+
np.add.at(param_values_2d, param_index_lower, field_values_2d * w_lower)
|
|
1179
|
+
np.add.at(param_values_2d, param_index_upper, field_values_2d * w_upper)
|
|
1180
|
+
|
|
1181
|
+
return param_values_2d.reshape((n_param,) + field_values.shape[1:])
|
|
1182
|
+
|
|
1183
|
+
|
|
1184
|
+
def bounds_slice(
|
|
1185
|
+
axis: NDArray,
|
|
1186
|
+
vmin: float,
|
|
1187
|
+
vmax: float,
|
|
1188
|
+
*,
|
|
1189
|
+
name: str,
|
|
1190
|
+
warning_context: str,
|
|
1191
|
+
) -> slice:
|
|
1192
|
+
"""Compute a robust crop slice on a 1D axis."""
|
|
1193
|
+
axis = np.asarray(axis, dtype=float)
|
|
1194
|
+
n = axis.size
|
|
1195
|
+
|
|
1196
|
+
vmin_tol = vmin - TRANSPOSE_INTERP_COORDINATE_TOLERANCE
|
|
1197
|
+
vmax_tol = vmax + TRANSPOSE_INTERP_COORDINATE_TOLERANCE
|
|
1198
|
+
|
|
1199
|
+
i0 = int(np.searchsorted(axis, vmin_tol, side="left"))
|
|
1200
|
+
i1 = int(np.searchsorted(axis, vmax_tol, side="right"))
|
|
1201
|
+
if i1 <= i0 and n:
|
|
1202
|
+
old = (i0, i1)
|
|
1203
|
+
if i1 < n:
|
|
1204
|
+
i1 = i0 + 1
|
|
1205
|
+
elif i0 > 0:
|
|
1206
|
+
i0 = i1 - 1
|
|
1207
|
+
log.warning(
|
|
1208
|
+
f"Empty bounds crop on '{name}' while computing {warning_context}: "
|
|
1209
|
+
f"bounds=[{vmin_tol!r}, {vmax_tol!r}], "
|
|
1210
|
+
f"grid=[{axis[0]!r}, {axis[-1]!r}] -> indices {old}; using ({i0}, {i1}).",
|
|
1211
|
+
log_once=True,
|
|
1212
|
+
)
|
|
1213
|
+
return slice(i0, i1)
|
|
1214
|
+
|
|
1215
|
+
|
|
1216
|
+
def transpose_interp_field_to_dataset(
|
|
1217
|
+
adjoint_field: SpatialDataArray,
|
|
1218
|
+
dataset_field: SpatialDataArray,
|
|
1219
|
+
*,
|
|
1220
|
+
center: tuple[float, float, float],
|
|
1221
|
+
method: str | dict[str, str] = "linear",
|
|
1222
|
+
) -> SpatialDataArray:
|
|
1223
|
+
"""Accumulate adjoint fields onto dataset coordinates using adjoint interpolation."""
|
|
1224
|
+
|
|
1225
|
+
allowed_methods = ("linear", "nearest")
|
|
1226
|
+
if isinstance(method, str):
|
|
1227
|
+
method_by_dim = dict.fromkeys("xyz", method)
|
|
1228
|
+
elif isinstance(method, dict):
|
|
1229
|
+
invalid_dims = set(method) - set("xyz")
|
|
1230
|
+
if invalid_dims:
|
|
1231
|
+
raise ValueError(
|
|
1232
|
+
f"Unsupported interpolation axis keys: {sorted(invalid_dims)!r}. "
|
|
1233
|
+
"Expected subset of ('x', 'y', 'z')."
|
|
1234
|
+
)
|
|
1235
|
+
method_by_dim = {dim: method.get(dim, "linear") for dim in "xyz"}
|
|
1236
|
+
else:
|
|
1237
|
+
raise TypeError("Interpolation method must be a string or a dict keyed by 'x', 'y', 'z'.")
|
|
1238
|
+
for dim, interp_method in method_by_dim.items():
|
|
1239
|
+
if interp_method not in allowed_methods:
|
|
1240
|
+
raise ValueError(
|
|
1241
|
+
f"Unsupported interpolation method {interp_method!r} for axis '{dim}'."
|
|
1242
|
+
)
|
|
1243
|
+
|
|
1244
|
+
def _align_freq(field: SpatialDataArray, target: SpatialDataArray) -> SpatialDataArray:
|
|
1245
|
+
target_freqs = np.asarray(target.coords["f"].data)
|
|
1246
|
+
if target_freqs.size == 1:
|
|
1247
|
+
# Source datasets are single-frequency by construction. When adjoint
|
|
1248
|
+
# fields carry multiple frequencies, gradients must accumulate all
|
|
1249
|
+
# frequency contributions onto that single source-frequency slot.
|
|
1250
|
+
# Any source-spectrum weighting has already been applied upstream
|
|
1251
|
+
# to the adjoint fields in ``_process_source_gradients``.
|
|
1252
|
+
summed = field.sum(dim="f")
|
|
1253
|
+
summed = summed.expand_dims({"f": target_freqs}, axis=-1)
|
|
1254
|
+
return summed.transpose(*field.dims)
|
|
1255
|
+
source_freqs = np.asarray(field.coords["f"].data)
|
|
1256
|
+
if target_freqs.size == source_freqs.size and np.allclose(
|
|
1257
|
+
target_freqs, source_freqs, rtol=1e-12, atol=0.0
|
|
1258
|
+
):
|
|
1259
|
+
return field
|
|
1260
|
+
freq_interp_method = "nearest" if source_freqs.size <= 1 else "linear"
|
|
1261
|
+
return field.interp(
|
|
1262
|
+
{"f": target_freqs},
|
|
1263
|
+
method=freq_interp_method,
|
|
1264
|
+
kwargs={"bounds_error": False, "fill_value": 0.0},
|
|
1265
|
+
).fillna(0.0)
|
|
1266
|
+
|
|
1267
|
+
def _interp_axis(
|
|
1268
|
+
arr: np.ndarray,
|
|
1269
|
+
axis: int,
|
|
1270
|
+
field_axis: np.ndarray,
|
|
1271
|
+
param_axis: np.ndarray,
|
|
1272
|
+
interp_method: str,
|
|
1273
|
+
) -> np.ndarray:
|
|
1274
|
+
moved = np.moveaxis(arr, axis, 0)
|
|
1275
|
+
moved = transpose_interp_axis(
|
|
1276
|
+
moved,
|
|
1277
|
+
field_axis,
|
|
1278
|
+
param_axis,
|
|
1279
|
+
method=interp_method,
|
|
1280
|
+
)
|
|
1281
|
+
return np.moveaxis(moved, 0, axis)
|
|
1282
|
+
|
|
1283
|
+
dataset_field_sorted = dataset_field._spatially_sorted
|
|
1284
|
+
center = tuple(get_static(val) for val in center)
|
|
1285
|
+
aligned = _align_freq(adjoint_field, dataset_field_sorted)
|
|
1286
|
+
weights = compute_spatial_weights(aligned, dims=tuple("xyz"))
|
|
1287
|
+
if weights.size > 1:
|
|
1288
|
+
weights = weights.transpose(*weights.dims)
|
|
1289
|
+
weighted = aligned * weights
|
|
1290
|
+
|
|
1291
|
+
field_coords = {
|
|
1292
|
+
dim: np.asarray(weighted.coords[dim].data) for dim in weighted.dims if dim in "xyz"
|
|
1293
|
+
}
|
|
1294
|
+
param_coords = {}
|
|
1295
|
+
for axis, dim in enumerate("xyz"):
|
|
1296
|
+
if dim in dataset_field_sorted.coords:
|
|
1297
|
+
param_coords[dim] = np.asarray(dataset_field_sorted.coords[dim].data) + center[axis]
|
|
1298
|
+
|
|
1299
|
+
crop_slices = {}
|
|
1300
|
+
for dim in "xyz":
|
|
1301
|
+
if dim not in field_coords or dim not in param_coords:
|
|
1302
|
+
continue
|
|
1303
|
+
param_axis = param_coords[dim]
|
|
1304
|
+
vmin = float(np.min(param_axis))
|
|
1305
|
+
vmax = float(np.max(param_axis))
|
|
1306
|
+
crop_slices[dim] = bounds_slice(
|
|
1307
|
+
field_coords[dim],
|
|
1308
|
+
vmin,
|
|
1309
|
+
vmax,
|
|
1310
|
+
name=dim,
|
|
1311
|
+
warning_context="source gradients (adjoint field grid -> source dataset)",
|
|
1312
|
+
)
|
|
1313
|
+
|
|
1314
|
+
if crop_slices:
|
|
1315
|
+
weighted = weighted.isel(**crop_slices)
|
|
1316
|
+
field_coords = {
|
|
1317
|
+
dim: np.asarray(weighted.coords[dim].data) for dim in weighted.dims if dim in "xyz"
|
|
1318
|
+
}
|
|
1319
|
+
|
|
1320
|
+
values = np.asarray(weighted.data)
|
|
1321
|
+
dims = list(weighted.dims)
|
|
1322
|
+
for dim in "xyz":
|
|
1323
|
+
if dim not in field_coords or dim not in param_coords:
|
|
1324
|
+
continue
|
|
1325
|
+
axis_index = dims.index(dim)
|
|
1326
|
+
values = _interp_axis(
|
|
1327
|
+
values,
|
|
1328
|
+
axis_index,
|
|
1329
|
+
field_coords[dim],
|
|
1330
|
+
param_coords[dim],
|
|
1331
|
+
method_by_dim[dim],
|
|
1332
|
+
)
|
|
1333
|
+
|
|
1334
|
+
out_coords = {
|
|
1335
|
+
dim: np.asarray(dataset_field_sorted.coords[dim].data) for dim in dataset_field_sorted.dims
|
|
1336
|
+
}
|
|
1337
|
+
result = SpatialDataArray(values, coords=out_coords, dims=tuple(dims))
|
|
1338
|
+
if tuple(dims) != tuple(dataset_field_sorted.dims):
|
|
1339
|
+
result = result.transpose(*dataset_field_sorted.dims)
|
|
1340
|
+
|
|
1341
|
+
needs_restore_order = any(
|
|
1342
|
+
dim in dataset_field.coords
|
|
1343
|
+
and not np.array_equal(
|
|
1344
|
+
np.asarray(dataset_field.coords[dim].data),
|
|
1345
|
+
np.asarray(dataset_field_sorted.coords[dim].data),
|
|
1346
|
+
)
|
|
1347
|
+
for dim in "xyz"
|
|
1348
|
+
)
|
|
1349
|
+
if needs_restore_order:
|
|
1350
|
+
selection = {}
|
|
1351
|
+
for dim in "xyz":
|
|
1352
|
+
if dim in dataset_field.coords:
|
|
1353
|
+
selection[dim] = np.asarray(dataset_field.coords[dim].data)
|
|
1354
|
+
if selection:
|
|
1355
|
+
result = result.sel(selection)
|
|
1356
|
+
|
|
1357
|
+
if tuple(result.dims) != tuple(dataset_field.dims):
|
|
1358
|
+
result = result.transpose(*dataset_field.dims)
|
|
1359
|
+
return result
|
|
1360
|
+
|
|
1361
|
+
|
|
1106
1362
|
__all__ = [
|
|
1107
1363
|
"DerivativeInfo",
|
|
1364
|
+
"bounds_slice",
|
|
1365
|
+
"compute_spatial_weights",
|
|
1108
1366
|
"integrate_within_bounds",
|
|
1367
|
+
"transpose_interp_axis",
|
|
1368
|
+
"transpose_interp_field_to_dataset",
|
|
1109
1369
|
]
|