flexcompute-core 0.0.1.dev0__py3-none-any.whl → 0.0.1.dev2__py3-none-any.whl
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.
- flexcompute/core/_migration/__init__.py +1 -0
- flexcompute/core/_migration/em/__init__.py +1 -0
- flexcompute/core/_migration/em/numerical/README.md +109 -0
- flexcompute/core/_migration/em/numerical/__init__.py +1 -0
- flexcompute/core/_migration/em/numerical/raw/__init__.py +1 -0
- flexcompute/core/_migration/em/numerical/raw/diffraction.py +55 -0
- flexcompute/core/_migration/em/numerical/raw/field_data.py +204 -0
- flexcompute/core/_migration/em/numerical/raw/grid.py +149 -0
- flexcompute/core/_migration/em/numerical/raw/medium.py +97 -0
- flexcompute/core/_migration/em/numerical/raw/microwave.py +25 -0
- flexcompute/core/_migration/em/numerical/raw/mode.py +107 -0
- flexcompute/core/_migration/em/numerical/raw/source_normalization.py +31 -0
- flexcompute/core/_migration/em/numerical/raw/source_time.py +89 -0
- flexcompute/core/_migration/em/numerical/raw/symmetry.py +18 -0
- flexcompute/core/_migration/em/numerical/schema/__init__.py +1 -0
- flexcompute/core/_migration/em/numerical/schema/field_data.py +84 -0
- flexcompute/core/_migration/em/numerical/schema/solver_diagnostics.py +85 -0
- flexcompute/core/_migration/em/numerical/schema/source_time.py +51 -0
- flexcompute/core/_migration/em/schema/__init__.py +1 -0
- flexcompute/core/_migration/em/schema/preprocess/cache.py +136 -0
- flexcompute/core/_migration/em/schema/preprocess/config.json +3 -0
- flexcompute/core/_migration/em/schema/preprocess/config.py +44 -0
- flexcompute/core/_migration/em/schema/preprocess/custom_medium.py +817 -0
- flexcompute/core/_migration/em/schema/preprocess/dipole_emission.py +28 -0
- flexcompute/core/_migration/em/schema/preprocess/mode.py +128 -0
- flexcompute/core/_migration/em/schema/preprocess/simulation.py +608 -0
- flexcompute/core/_migration/em/schema/preprocess/subgrid.py +510 -0
- flexcompute/core/_migration/em/schema/preprocess/subpixel.py +68 -0
- flexcompute/core/_migration/em/schema/preprocess/utils.py +213 -0
- flexcompute/core/_migration/em/schema/tidy3d/README.md +59 -0
- flexcompute/core/_migration/em/schema/tidy3d/__init__.py +1082 -0
- flexcompute/core/_migration/em/schema/tidy3d/__main__.py +99 -0
- flexcompute/core/_migration/em/schema/tidy3d/_runtime.py +12 -0
- flexcompute/core/_migration/em/schema/tidy3d/_testing/__init__.py +17 -0
- flexcompute/core/_migration/em/schema/tidy3d/_testing/synthetic_monitor_data.py +710 -0
- flexcompute/core/_migration/em/schema/tidy3d/compat.py +30 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/README.md +233 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/apodization.py +107 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/__init__.py +42 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/boxes.py +162 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/derivative_utils.py +1635 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/field_map.py +83 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/flux_monitor.py +76 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/functions.py +289 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/monitor_names.py +25 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/parallel_adjoint_bases.py +348 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/path_utils.py +157 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/point_consumption.py +410 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/sample_sets.py +1024 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/snapping.py +180 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/source_factory.py +521 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/spacing.py +352 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/types.py +193 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/autograd/utils.py +136 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/base.py +2293 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/data/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/data/monitor_data.py +130 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/data/sim_data.py +243 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/monitor.py +102 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/simulation.py +729 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/source.py +30 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/bc_placement.py +121 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/beam.py +1259 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/boundary.py +1776 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/README.md +158 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/data_array.py +2750 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/dataset.py +1363 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/em_fields.py +59 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/index.py +117 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/README.md +13 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/__init__.py +164 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/_constants.py +15 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/_types.py +29 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/_utils.py +70 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/base.py +369 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/__init__.py +27 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_algebra.py +523 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_grid.py +367 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_io.py +300 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_metrics.py +258 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/data.py +390 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/diagnostic.py +334 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/dipole.py +79 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/electromagnetic.py +92 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/point_cloud.py +133 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/surface.py +229 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/time.py +193 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/flux.py +131 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/__init__.py +16 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/data.py +989 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/overlap.py +133 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/solver.py +405 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/time.py +67 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/__init__.py +22 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/_types.py +30 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/angle.py +224 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/base.py +322 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/cartesian.py +161 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/diffraction.py +363 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/directivity.py +451 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/kspace.py +133 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/optical_generation.py +327 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/point_cloud.py +151 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/sim_data.py +2090 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/base.py +2753 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/surface.py +502 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/tetrahedral.py +460 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/triangular.py +955 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/utils.py +464 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/validators.py +86 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/data/zbf.py +156 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/diffraction.py +256 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/dispersion_fitter.py +1051 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/docstrings.py +298 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/dataset.py +522 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/monitor_data.py +203 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/sim_data.py +1230 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/stage.py +225 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/grid.py +950 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/monitor.py +425 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/simulation.py +2498 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/eme/sweep.py +180 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/README.md +248 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/__init__.py +7 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/approximate_angle.py +193 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/approximate_paired.py +399 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/common.py +880 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/exact.py +970 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/projector.py +1292 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/file_util.py +107 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/frequencies.py +564 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/frequency_extrapolation.py +86 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/__init__.py +82 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/abstract_primitives.py +419 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/array.py +414 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/box.py +1193 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/clip_operation.py +528 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/constants.py +9 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/core.py +719 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/gds.py +437 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/geometry_group.py +401 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/operators.py +153 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/plotting.py +515 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/transformed.py +365 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/transforms.py +309 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/utils.py +104 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/bound_ops.py +71 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/contour_conversion.py +797 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/float_utils.py +31 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/mesh.py +1568 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/polyslab.py +3817 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/primitives.py +1480 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/triangulation.py +84 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/utils.py +1099 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/utils_2d.py +372 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/geometry/vertex_utils.py +59 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/corner_finder.py +715 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid.py +925 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/__init__.py +193 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/constants.py +50 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/__init__.py +16 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/auto.py +494 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/base.py +251 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/manual.py +302 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/__init__.py +5 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/construction.py +291 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/edges.py +277 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/gaps.py +526 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/inplane.py +524 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/model.py +369 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/properties.py +81 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/__init__.py +5 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/entities.py +335 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/factories.py +170 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/generation.py +669 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/localization.py +59 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/localization_helpers.py +136 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/model.py +241 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/sizing.py +128 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/mesher.py +1638 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/grid/yee_areas.py +31 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/index.py +210 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/lumped_element.py +2297 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/material/README.md +3 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/material/__init__.py +1 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/material/multi_physics.py +221 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/material/solver_types.py +22 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/material/tcad/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/material/tcad/charge.py +456 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/material/tcad/heat.py +426 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/material/tensor_rotation.py +198 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/material/types.py +26 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/README.md +16 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/__init__.py +179 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/_rebuild.py +53 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/abstract_custom.py +461 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/anisotropic.py +670 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/base.py +988 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/__init__.py +27 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/anisotropic.py +277 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/dispersive.py +1504 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/isotropic.py +1149 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/debye.py +222 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/drude.py +188 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/isotropic.py +438 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/lorentz.py +317 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/lossy_metal.py +275 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/medium_types.py +74 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/perturbation.py +480 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/pole_residue.py +827 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/roughness.py +260 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/sellmeier.py +274 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/medium/two_d.py +468 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/base.py +9 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/data_array.py +52 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/dataset.py +202 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/monitor_data.py +790 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/formulas/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/formulas/circuit_parameters.py +179 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/impedance_calculator.py +205 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/mode_spec.py +368 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/monitor.py +94 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/factory.py +223 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/auto.py +91 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/base.py +244 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/current.py +335 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/voltage.py +99 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/mode_plane_analyzer.py +445 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/base.py +274 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/current.py +434 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/impedance.py +189 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/voltage.py +235 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/types.py +18 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/viz.py +56 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/source.py +79 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/time.py +355 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/microwave/types.py +9 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/LICENSE +25 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/data/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/data/sim_data.py +335 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/derivatives.py +294 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/geometry.py +122 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/mode_solver.py +3310 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/simulation.py +723 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/solver.py +1388 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/transforms.py +131 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode/validation.py +155 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/mode_spec.py +1038 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/monitor.py +3116 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/nonlinear.py +422 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/parameter_perturbation.py +1797 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/run_time_spec.py +42 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/scene.py +2141 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/README.md +67 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/__init__.py +81 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/adjoint.py +218 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/boundaries.py +789 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/constants.py +32 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/construction.py +418 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/export.py +357 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/grid.py +833 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/materials.py +648 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/mode_integration.py +514 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/model.py +1332 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/monitors.py +919 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/rf_integration.py +123 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/runtime.py +414 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/sources.py +568 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/tfsf.py +998 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/visualization.py +835 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/simulation/yee.py +258 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/source/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/source/adjoint_helpers.py +272 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/source/base.py +241 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/source/current.py +424 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/source/field.py +1650 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/source/frame.py +25 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/source/freq_range.py +230 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/source/time.py +682 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/source/utils.py +36 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/spice/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/spice/analysis/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/spice/analysis/ac.py +101 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/spice/analysis/dc.py +298 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/ac.py +61 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/dc.py +166 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/types.py +7 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/spice/types.py +17 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/structure.py +1396 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/subpixel_spec.py +224 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/analysis/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/analysis/heat_simulation_type.py +177 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/bandgap.py +151 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/abstract.py +11 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/charge.py +152 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/heat.py +339 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/specification.py +53 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/abstract.py +391 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/charge.py +738 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/heat.py +67 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/mesh.py +70 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/sim_data.py +852 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/types.py +31 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/doping.py +433 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/doping_utils.py +329 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/effective_DOS.py +130 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/generation_recombination.py +839 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/grid.py +750 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/mesher.py +41 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/mobility.py +531 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/abstract.py +61 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/charge.py +225 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/heat.py +27 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/mesh.py +35 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/simulation/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/simulation/heat.py +60 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/simulation/heat_charge.py +3778 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/abstract.py +49 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/coupled.py +32 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/heat.py +52 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/types.py +103 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/tcad/viz.py +17 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/thin_lens.py +149 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/time.py +208 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/time_modulation.py +328 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/transformation.py +221 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/__init__.py +141 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/base.py +334 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/mode_spec.py +11 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/monitor.py +67 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/monitor_data.py +88 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/simulation.py +49 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/third_party.py +18 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/time.py +27 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/utils.py +103 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/types/workflow.py +22 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/validators.py +719 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/__init__.py +110 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/axes_utils.py +413 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/descartes.py +113 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/flex_color_palettes.py +3306 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/flex_style.py +46 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/layout.py +101 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/plot_params.py +95 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/plot_sim_3d.py +218 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/styles.py +49 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/viz/visualization_spec.py +87 -0
- flexcompute/core/_migration/em/schema/tidy3d/components/workflow.py +372 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/README.md +96 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/__init__.py +183 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/deprecations.py +95 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/loader.py +852 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/manager.py +617 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/migrations.py +290 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/profiles.py +64 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/registry.py +83 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/schema_utils.py +27 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/sections.py +739 -0
- flexcompute/core/_migration/em/schema/tidy3d/config/serializer.py +145 -0
- flexcompute/core/_migration/em/schema/tidy3d/constants.py +360 -0
- flexcompute/core/_migration/em/schema/tidy3d/exceptions.py +84 -0
- flexcompute/core/_migration/em/schema/tidy3d/log.py +540 -0
- flexcompute/core/_migration/em/schema/tidy3d/material_library/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/material_library/material_library.py +2991 -0
- flexcompute/core/_migration/em/schema/tidy3d/material_library/material_reference.py +231 -0
- flexcompute/core/_migration/em/schema/tidy3d/material_library/parametric_materials.py +412 -0
- flexcompute/core/_migration/em/schema/tidy3d/material_library/util.py +272 -0
- flexcompute/core/_migration/em/schema/tidy3d/packaging.py +251 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/__init__.py +1 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/README.md +302 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/__init__.py +99 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/constants.py +4 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/differential_operators.py +78 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/functions.py +884 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/__init__.py +43 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/filters.py +326 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/misc.py +29 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/parametrizations.py +393 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/penalties.py +268 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/projections.py +190 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/symmetries.py +236 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/optimizers.py +335 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/primitives/__init__.py +6 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/primitives/interpolate.py +847 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/primitives/misc.py +139 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/types.py +6 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/utilities.py +262 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/design/README.md +148 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/design/__init__.py +29 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/design/design.py +783 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/design/method.py +1071 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/design/parameter.py +222 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/design/result.py +504 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/README.md +16 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/__init__.py +29 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/constants.py +9 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/data.py +108 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/data_array.py +66 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/study.py +890 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/dispersion/__init__.py +16 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/dispersion/fit.py +797 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/dispersion/fit_fast.py +193 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/README.md +308 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/__init__.py +68 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/base.py +209 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/functions.py +171 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/metrics.py +140 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/operators.py +178 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/types.py +68 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/variables.py +96 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/README.md +515 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/__init__.py +60 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/base.py +10 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/contours.py +71 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/design.py +429 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/initialization.py +139 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/optimizer.py +231 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/penalty.py +115 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/polyslab_set.py +509 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/region.py +397 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/result.py +170 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/self_intersection.py +302 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/transformation.py +101 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/utils.py +75 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/validators.py +80 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/README.md +10 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/__init__.py +18 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/README.md +43 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/__init__.py +22 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/defaults.py +9 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/drc.py +233 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/results.py +503 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/util.py +13 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/__init__.py +82 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/array_factor.py +1350 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/auto_path_integrals.py +11 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/custom_path_integrals.py +35 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/impedance_calculator.py +15 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/lobe_measurer.py +356 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/models/__init__.py +10 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/models/coupled_microstrip.py +105 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/models/microstrip.py +152 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/path_integrals.py +23 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/rf_material_library.py +1380 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/rf_material_reference.py +148 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/viz.py +39 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/LICENSE +25 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/README.md +1 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/__init__.py +7 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/mode_solver.py +17 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/polyslab/__init__.py +7 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/polyslab/polyslab.py +77 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/pytorch/README.md +54 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/pytorch/__init__.py +5 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/pytorch/wrapper.py +33 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/resonance/__init__.py +7 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/resonance/resonance.py +450 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/__init__.py +92 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/antenna.py +133 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/modal.py +120 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/terminal.py +465 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/base.py +418 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/modal.py +401 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/terminal.py +2560 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/types.py +6 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/viz.py +111 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/base.py +82 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/data_array.py +83 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/modal.py +54 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/terminal.py +753 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/types.py +10 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/__init__.py +0 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/base.py +28 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/base_lumped.py +267 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/base_terminal.py +66 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/coaxial_lumped.py +467 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/modal.py +274 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/rectangular_lumped.py +629 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/tilted_lumped.py +706 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/types.py +30 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/wave.py +1631 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/run.py +176 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/types.py +20 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/utils.py +469 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/waveguide/__init__.py +7 -0
- flexcompute/core/_migration/em/schema/tidy3d/plugins/waveguide/rectangular_dielectric.py +1181 -0
- flexcompute/core/_migration/em/schema/tidy3d/rf.py +269 -0
- flexcompute/core/_migration/em/schema/tidy3d/style.mplstyle +1 -0
- flexcompute/core/_migration/em/schema/tidy3d/system.py +12 -0
- flexcompute/core/_migration/em/schema/tidy3d/updater.py +381 -0
- flexcompute/core/_migration/em/schema/tidy3d/version.py +3 -0
- flexcompute/core/_migration/em/validation/__init__.py +5 -0
- flexcompute/core/_migration/em/validation/report.py +28 -0
- flexcompute/core/config/__init__.py +20 -0
- flexcompute/core/config/app.py +102 -0
- flexcompute/core/config/env.py +52 -0
- flexcompute/core/config/loader.py +826 -0
- flexcompute/core/config/manager.py +325 -0
- flexcompute/core/config/registry.py +81 -0
- flexcompute/core/config/sections.py +41 -0
- flexcompute/core/config/serializer.py +152 -0
- flexcompute_core-0.0.1.dev2.dist-info/METADATA +59 -0
- flexcompute_core-0.0.1.dev2.dist-info/RECORD +530 -0
- flexcompute_core-0.0.1.dev0.dist-info/METADATA +0 -21
- flexcompute_core-0.0.1.dev0.dist-info/RECORD +0 -5
- {flexcompute_core-0.0.1.dev0.dist-info → flexcompute_core-0.0.1.dev2.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Temporary migration-only namespace for the first flexcompute development release."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Temporary migrated EM contracts for the first flexcompute development release."""
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# flexcompute.core._migration.em.numerical
|
|
2
|
+
|
|
3
|
+
`flexcompute.core._migration.em.numerical` owns portable numerical kernels and
|
|
4
|
+
deterministic schema-level EM conventions shared across packages. These are the
|
|
5
|
+
formulas, sign conventions, and result interpretations that would otherwise be
|
|
6
|
+
duplicated across runtime consumers.
|
|
7
|
+
|
|
8
|
+
```mermaid
|
|
9
|
+
flowchart TD
|
|
10
|
+
Public["public tidy3d"]
|
|
11
|
+
Solver["em_solver"]
|
|
12
|
+
Schema["flexcompute.core._migration.em.schema"]
|
|
13
|
+
Adapter["flexcompute.core._migration.em.numerical.schema"]
|
|
14
|
+
Raw["flexcompute.core._migration.em.numerical.raw"]
|
|
15
|
+
|
|
16
|
+
Public --> Raw
|
|
17
|
+
Solver --> Raw
|
|
18
|
+
Schema --> Raw
|
|
19
|
+
Schema --> Adapter
|
|
20
|
+
Adapter --> Raw
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Paths below are relative to this directory unless they begin with `flex/` or
|
|
24
|
+
`src/`.
|
|
25
|
+
|
|
26
|
+
## Layers
|
|
27
|
+
|
|
28
|
+
| Layer | Primary input | May import |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| `raw` | arrays, scalars, simple typed payloads | third-party array libraries only |
|
|
31
|
+
| `schema` | `flexcompute.core._migration.em.schema` model instances | `flexcompute.core._migration.em.schema` and `raw` |
|
|
32
|
+
|
|
33
|
+
A schema adapter unpacks a model into keyword scalars once, then delegates the
|
|
34
|
+
arithmetic: `schema/source_time.py:10-23` against the keyword-only raw
|
|
35
|
+
signature it calls at `raw/source_time.py:10-22`.
|
|
36
|
+
|
|
37
|
+
The split is contract-enforced, and the enforcement is deliberately asymmetric.
|
|
38
|
+
|
|
39
|
+
| Contract | Asserts |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| `migrated-em-raw-numerical` | `numerical.raw` imports none of `tidy3d`, `flexcompute.rf`, `tidy3d_extras`, `flexcompute.core._migration.em.schema`, `em_solver` |
|
|
42
|
+
| `flexcompute-core` | `flexcompute.core._migration.em` imports no public product and no runtime consumer; `flexcompute.core._migration.em.schema` is allowed within the package |
|
|
43
|
+
|
|
44
|
+
Both live in `flex/utils/repository-tests/compute/.importlinter` and are checked
|
|
45
|
+
by import-linter across the whole EM import graph, so a breach is reported
|
|
46
|
+
wherever the import is written rather than only when this package's own tests
|
|
47
|
+
run.
|
|
48
|
+
|
|
49
|
+
## Consumers
|
|
50
|
+
|
|
51
|
+
| Consumer | Entry point | Example |
|
|
52
|
+
| --- | --- | --- |
|
|
53
|
+
| public Tidy3D | `raw` | `flex/public/tidy3d/tidy3d/components/source/time.py:249` |
|
|
54
|
+
| `flexcompute.core._migration.em.schema` | `raw`, or `schema` where a model must be unpacked | `flex/public/flexcompute-core/src/flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data.py:78-82`; `flex/public/flexcompute-core/src/flexcompute/core/_migration/em/schema/tidy3d/components/source/time.py:13` |
|
|
55
|
+
| `em_solver` | `raw` | in `src/Tidy3DCore/em-solver/em_solver/`: `eme_kernels.py:9`, `setup.py:25`, `point_cloud.py:13` |
|
|
56
|
+
|
|
57
|
+
Public Tidy3D calls `raw` directly instead of owning a public adapter
|
|
58
|
+
namespace. Only `flexcompute.core._migration.em.schema` has an adapter layer, and only where a schema
|
|
59
|
+
model has to be unpacked first.
|
|
60
|
+
|
|
61
|
+
## Conventions owned here
|
|
62
|
+
|
|
63
|
+
| Convention | Kernel | Behavior |
|
|
64
|
+
| --- | --- | --- |
|
|
65
|
+
| power and Poynting | `raw/field_data.py:14-17`, `:33-46` | `0.5 * E x H*`, complex. The kernels conjugate but do not take the real part. |
|
|
66
|
+
| planar monitor flux correction | `schema/field_data.py` | Preserves the centered Yee-grid flux convention after fields are interpolated to the exact monitor plane. |
|
|
67
|
+
| colocated integration | `raw/mode.py:10-16` | `colocate=None` means `True`; `colocate` and `use_colocated_integration` combine with OR, not AND. Resolver at `:19-31`: an explicit argument wins, otherwise any colocated monitor makes the call colocated. |
|
|
68
|
+
| snap margin | `raw/microwave.py:8-11` | `(2, 2, 2)` when field data is colocated, `(0, 0, 0)` otherwise, keeping automatic current paths off interpolated H fields near metal surfaces (call site and reason: `flex/public/flexcompute-core/src/flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/mode_plane_analyzer.py:60-62`). |
|
|
69
|
+
| current sign | `raw/microwave.py:14-17` | Opposite the voltage polarity, because current flows from the plus to the minus terminal (`flex/public/flexcompute-core/src/flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/auto.py:79-84`). The voltage integral takes the polarity unchanged at `:63`. |
|
|
70
|
+
| FDTD result diagnostics | `schema/solver_diagnostics.py` | Maps schema simulation context and solver completion flags to shared warning messages without owning logging. |
|
|
71
|
+
|
|
72
|
+
Read the kernel when the exact behavior matters; this table routes, it does not
|
|
73
|
+
restate.
|
|
74
|
+
|
|
75
|
+
## What stays out of raw
|
|
76
|
+
|
|
77
|
+
`raw` owns conventions duplicated in Python across public Tidy3D,
|
|
78
|
+
`flexcompute.core._migration.em.schema`, and `em_solver`. A source family whose evaluation is owned by
|
|
79
|
+
a native runtime is not duplicated Python convention, so its wrapper stays at
|
|
80
|
+
the runtime boundary instead.
|
|
81
|
+
|
|
82
|
+
`BroadbandPulse` is the worked example. Public Tidy3D delegates pulse
|
|
83
|
+
evaluation to the extras native extension at
|
|
84
|
+
`flex/public/tidy3d/tidy3d/components/source/time.py:681-692`; the schema class
|
|
85
|
+
raises `SetupError` at
|
|
86
|
+
`flex/public/flexcompute-core/src/flexcompute/core/_migration/em/schema/tidy3d/components/source/time.py:649-655`.
|
|
87
|
+
There is no shared Python kernel between the two, and moving runtime-owned
|
|
88
|
+
implementation detail into `raw` would cost `raw` its product-neutrality.
|
|
89
|
+
|
|
90
|
+
## Validation
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
uv run --project flex/public/flexcompute-core pytest flex/public/flexcompute-core/tests/_migration/em
|
|
94
|
+
|
|
95
|
+
# The layer split is an import contract, so it needs the whole EM graph rather
|
|
96
|
+
# than this package alone. From a full checkout:
|
|
97
|
+
PYTHONPATH=flex/utils/repository-tests/compute \
|
|
98
|
+
python3 -m repository_tests.compute.import_boundaries
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
The contract runner exits 2 in a narrow worktree that does not contain every
|
|
102
|
+
package root, so run it from a full checkout or let CI run it.
|
|
103
|
+
|
|
104
|
+
| Test or contract | Covers |
|
|
105
|
+
| --- | --- |
|
|
106
|
+
| the `migrated-em` and `migrated-em-raw-numerical` contracts | the layer split |
|
|
107
|
+
| `flex/public/flexcompute-core/tests/_migration/em/test_shared_numerical_kernels.py` | the conventions above, at `:25` (power and overlap signs and conjugation), `:280` (mode sorting and colocation), `:315` (path-integral sign and margin) |
|
|
108
|
+
| `flex/public/flexcompute-core/tests/_migration/em/test_shared_numerical_mirrors.py` | the same behavior at the consumer and schema-wrapper level, mirroring the equivalent public Tidy3D client tests |
|
|
109
|
+
| `flex/public/flexcompute-core/tests/_migration/em/test_schema_field_data_numerics.py` | planar field-monitor flux correction and its deliberate no-op cases |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Shared numerical kernels and schema-facing numerical adapters for EM packages."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Product-neutral shared numerical kernels."""
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""Shared diffraction-order numerical kernels."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
COS_THETA_THRESH = 1e-5
|
|
10
|
+
C_0 = 2.99792458e14
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def shifted_orders(orders: tuple[int, ...], bloch_vec: float | np.ndarray) -> np.ndarray:
|
|
14
|
+
"""Return diffraction orders shifted by the Bloch vector."""
|
|
15
|
+
|
|
16
|
+
return bloch_vec + np.atleast_2d(orders).T
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def reciprocal_coords_from_epsilon(
|
|
20
|
+
orders: Any,
|
|
21
|
+
*,
|
|
22
|
+
size: float,
|
|
23
|
+
bloch_vec: float | np.ndarray,
|
|
24
|
+
frequency: float,
|
|
25
|
+
epsilon: complex,
|
|
26
|
+
) -> np.ndarray:
|
|
27
|
+
"""Return normalized reciprocal coordinates from order, Bloch, and epsilon data."""
|
|
28
|
+
|
|
29
|
+
if size == 0:
|
|
30
|
+
return np.atleast_2d(0)
|
|
31
|
+
order_tuple = tuple(int(order) for order in np.atleast_1d(orders))
|
|
32
|
+
bloch_array = shifted_orders(order_tuple, bloch_vec)
|
|
33
|
+
return bloch_array / size * C_0 / frequency / np.real(np.sqrt(epsilon))
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def amplitude_norm(theta_data: np.ndarray, eta: np.ndarray | complex) -> np.ndarray:
|
|
37
|
+
"""Return diffraction amplitude normalization."""
|
|
38
|
+
|
|
39
|
+
cos_theta = np.cos(np.nan_to_num(theta_data))
|
|
40
|
+
cos_theta[cos_theta <= COS_THETA_THRESH] = np.inf
|
|
41
|
+
return 1.0 / np.sqrt(2.0 * np.asarray(eta)) / np.sqrt(cos_theta)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def angle_is_propagating(angle_theta: float) -> bool:
|
|
45
|
+
"""Return whether a diffraction angle is valid for a propagating order."""
|
|
46
|
+
|
|
47
|
+
return bool(np.isfinite(angle_theta) and np.cos(angle_theta) > COS_THETA_THRESH)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def bloch_vec_at_freq(bloch_vec: float | np.ndarray, freq_index: int) -> float:
|
|
51
|
+
"""Return scalar Bloch vector for a monitor frequency index."""
|
|
52
|
+
|
|
53
|
+
if np.ndim(bloch_vec) == 0:
|
|
54
|
+
return float(bloch_vec)
|
|
55
|
+
return float(np.asarray(bloch_vec)[freq_index])
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"""Shared field-data numerical kernels."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
OUTER_DOT_BLOCK_TARGET_BYTES = 64 * 1024**2
|
|
10
|
+
OUTER_DOT_BLOCK_MIN_SIZE = 8
|
|
11
|
+
OUTER_DOT_BLOCK_MAX_SIZE = 64
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def complex_poynting(e1: Any, e2: Any, h1: Any, h2: Any) -> Any:
|
|
15
|
+
"""Return the complex time-averaged Poynting component ``0.5 E x H*``."""
|
|
16
|
+
|
|
17
|
+
return 0.5 * (e1 * h2.conj() - e2 * h1.conj())
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def instantaneous_power_flow(
|
|
21
|
+
E: tuple[np.ndarray, np.ndarray],
|
|
22
|
+
H: tuple[np.ndarray, np.ndarray],
|
|
23
|
+
dS: tuple[np.ndarray, np.ndarray],
|
|
24
|
+
) -> np.ndarray:
|
|
25
|
+
"""Compute instantaneous power flow for real fields."""
|
|
26
|
+
|
|
27
|
+
dS_EuHv, dS_EvHu = dS
|
|
28
|
+
Eu, Ev = E
|
|
29
|
+
Hu, Hv = H
|
|
30
|
+
return np.sum((Eu * Hv) * dS_EuHv - (Ev * Hu) * dS_EvHu, axis=(-2, -1))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def complex_power_flow(
|
|
34
|
+
E: tuple[np.ndarray, np.ndarray],
|
|
35
|
+
H: tuple[np.ndarray, np.ndarray],
|
|
36
|
+
dS: tuple[np.ndarray, np.ndarray],
|
|
37
|
+
) -> np.ndarray:
|
|
38
|
+
"""Compute ``0.5 * E x H*`` integrated with Yee-grid area elements."""
|
|
39
|
+
|
|
40
|
+
dS_EuHv, dS_EvHu = dS
|
|
41
|
+
Eu, Ev = E
|
|
42
|
+
Hu, Hv = H
|
|
43
|
+
return 0.5 * np.sum(
|
|
44
|
+
(Eu * np.conj(Hv)) * dS_EuHv - (Ev * np.conj(Hu)) * dS_EvHu,
|
|
45
|
+
axis=(-2, -1),
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def dot(
|
|
50
|
+
E1: tuple[np.ndarray, np.ndarray],
|
|
51
|
+
H1: tuple[np.ndarray, np.ndarray],
|
|
52
|
+
E2: tuple[np.ndarray, np.ndarray],
|
|
53
|
+
H2: tuple[np.ndarray, np.ndarray],
|
|
54
|
+
dS: tuple[np.ndarray, np.ndarray],
|
|
55
|
+
conjugate: bool = False,
|
|
56
|
+
bidirectional: bool = True,
|
|
57
|
+
) -> np.ndarray:
|
|
58
|
+
"""Compute the modal overlap integral."""
|
|
59
|
+
|
|
60
|
+
dS_EuHv, dS_EvHu = dS
|
|
61
|
+
E1u, E1v = E1
|
|
62
|
+
H1u, H1v = H1
|
|
63
|
+
E2u, E2v = E2
|
|
64
|
+
H2u, H2v = H2
|
|
65
|
+
|
|
66
|
+
dS_EuHv_flat = np.asarray(dS_EuHv).reshape(-1)
|
|
67
|
+
dS_EvHu_flat = np.asarray(dS_EvHu).reshape(-1)
|
|
68
|
+
|
|
69
|
+
if bidirectional:
|
|
70
|
+
term_specs = (
|
|
71
|
+
(0.25, E1u, H2v, dS_EuHv_flat),
|
|
72
|
+
(0.25, H1v, E2u, dS_EuHv_flat),
|
|
73
|
+
(-0.25, E1v, H2u, dS_EvHu_flat),
|
|
74
|
+
(-0.25, H1u, E2v, dS_EvHu_flat),
|
|
75
|
+
)
|
|
76
|
+
else:
|
|
77
|
+
term_specs = (
|
|
78
|
+
(0.5, E1u, H2v, dS_EuHv_flat),
|
|
79
|
+
(-0.5, E1v, H2u, dS_EvHu_flat),
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
batch_shape = np.broadcast_shapes(
|
|
83
|
+
*(left.shape[:-2] for _, left, _, _ in term_specs),
|
|
84
|
+
*(right.shape[:-2] for _, _, right, _ in term_specs),
|
|
85
|
+
)
|
|
86
|
+
dtype = np.result_type(
|
|
87
|
+
*(a.dtype for _, a, _, _ in term_specs),
|
|
88
|
+
*(a.dtype for _, _, a, _ in term_specs),
|
|
89
|
+
*(d.dtype for _, _, _, d in term_specs),
|
|
90
|
+
)
|
|
91
|
+
result = np.zeros(batch_shape, dtype=dtype)
|
|
92
|
+
|
|
93
|
+
for coeff, left, right, d_area in term_specs:
|
|
94
|
+
left_flat = left.reshape(*left.shape[:-2], -1)
|
|
95
|
+
right_flat = right.reshape(*right.shape[:-2], -1)
|
|
96
|
+
if conjugate:
|
|
97
|
+
left_flat = np.conj(left_flat)
|
|
98
|
+
result += (
|
|
99
|
+
coeff
|
|
100
|
+
* ((left_flat * d_area)[..., np.newaxis, :] @ right_flat[..., :, np.newaxis])[..., 0, 0]
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
return result
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def outer_dot(
|
|
107
|
+
E1: tuple[np.ndarray, np.ndarray],
|
|
108
|
+
H1: tuple[np.ndarray, np.ndarray],
|
|
109
|
+
E2: tuple[np.ndarray, np.ndarray],
|
|
110
|
+
H2: tuple[np.ndarray, np.ndarray],
|
|
111
|
+
dS: tuple[np.ndarray, np.ndarray],
|
|
112
|
+
conjugate: bool = False,
|
|
113
|
+
bidirectional: bool = True,
|
|
114
|
+
) -> np.ndarray:
|
|
115
|
+
"""Compute a pairwise modal-overlap matrix."""
|
|
116
|
+
|
|
117
|
+
E1u, E1v = E1
|
|
118
|
+
H1u, H1v = H1
|
|
119
|
+
E2u, E2v = E2
|
|
120
|
+
H2u, H2v = H2
|
|
121
|
+
dS_EuHv, dS_EvHu = dS
|
|
122
|
+
|
|
123
|
+
n_modes_1 = E1u.shape[-3]
|
|
124
|
+
n_modes_2 = E2u.shape[-3]
|
|
125
|
+
broadcast_shape = E1u.shape[:-3]
|
|
126
|
+
num_grid_points = E1u.shape[-2] * E1u.shape[-1]
|
|
127
|
+
dtype = np.result_type(
|
|
128
|
+
E1u.dtype,
|
|
129
|
+
E1v.dtype,
|
|
130
|
+
H1u.dtype,
|
|
131
|
+
H1v.dtype,
|
|
132
|
+
E2u.dtype,
|
|
133
|
+
E2v.dtype,
|
|
134
|
+
H2u.dtype,
|
|
135
|
+
H2v.dtype,
|
|
136
|
+
np.asarray(dS_EuHv).dtype,
|
|
137
|
+
np.asarray(dS_EvHu).dtype,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
S = np.zeros((*broadcast_shape, n_modes_1, n_modes_2), dtype=dtype)
|
|
141
|
+
if n_modes_1 == 0 or n_modes_2 == 0:
|
|
142
|
+
return S
|
|
143
|
+
|
|
144
|
+
if conjugate:
|
|
145
|
+
E1u, E1v = np.conj(E1u), np.conj(E1v)
|
|
146
|
+
H1u, H1v = np.conj(H1u), np.conj(H1v)
|
|
147
|
+
|
|
148
|
+
itemsize = np.dtype(dtype).itemsize
|
|
149
|
+
if num_grid_points == 0:
|
|
150
|
+
block_size = OUTER_DOT_BLOCK_MAX_SIZE
|
|
151
|
+
else:
|
|
152
|
+
block_size = int(OUTER_DOT_BLOCK_TARGET_BYTES // (num_grid_points * itemsize))
|
|
153
|
+
block_size = max(OUTER_DOT_BLOCK_MIN_SIZE, block_size)
|
|
154
|
+
block_size = min(OUTER_DOT_BLOCK_MAX_SIZE, block_size)
|
|
155
|
+
|
|
156
|
+
block_size_left = min(n_modes_1, block_size)
|
|
157
|
+
block_size_right = min(n_modes_2, block_size)
|
|
158
|
+
|
|
159
|
+
dS_EuHv_flat = np.asarray(dS_EuHv).reshape(-1)
|
|
160
|
+
dS_EvHu_flat = np.asarray(dS_EvHu).reshape(-1)
|
|
161
|
+
if dS_EuHv_flat.size != num_grid_points or dS_EvHu_flat.size != num_grid_points:
|
|
162
|
+
raise ValueError("Tangential area shape mismatch in blocked outer_dot kernel.")
|
|
163
|
+
|
|
164
|
+
num_batches = int(np.prod(broadcast_shape, dtype=int)) if broadcast_shape else 1
|
|
165
|
+
out_flat = S.reshape(num_batches, n_modes_1, n_modes_2)
|
|
166
|
+
|
|
167
|
+
if bidirectional:
|
|
168
|
+
term_specs = (
|
|
169
|
+
(0.25, E1u, H2v, dS_EuHv_flat),
|
|
170
|
+
(0.25, H1v, E2u, dS_EuHv_flat),
|
|
171
|
+
(-0.25, E1v, H2u, dS_EvHu_flat),
|
|
172
|
+
(-0.25, H1u, E2v, dS_EvHu_flat),
|
|
173
|
+
)
|
|
174
|
+
else:
|
|
175
|
+
term_specs = (
|
|
176
|
+
(0.5, E1u, H2v, dS_EuHv_flat),
|
|
177
|
+
(-0.5, E1v, H2u, dS_EvHu_flat),
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
flattened_terms = tuple(
|
|
181
|
+
(
|
|
182
|
+
coeff,
|
|
183
|
+
left.reshape(num_batches, n_modes_1, num_grid_points),
|
|
184
|
+
right.reshape(num_batches, n_modes_2, num_grid_points),
|
|
185
|
+
d_area,
|
|
186
|
+
)
|
|
187
|
+
for coeff, left, right, d_area in term_specs
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
for batch_idx in range(num_batches):
|
|
191
|
+
out_batch = out_flat[batch_idx]
|
|
192
|
+
for coeff, left_term, right_term, d_area in flattened_terms:
|
|
193
|
+
left_batch = left_term[batch_idx]
|
|
194
|
+
right_batch = right_term[batch_idx]
|
|
195
|
+
for i0 in range(0, n_modes_1, block_size_left):
|
|
196
|
+
i0_end = min(i0 + block_size_left, n_modes_1)
|
|
197
|
+
left_block = left_batch[i0:i0_end]
|
|
198
|
+
for i1 in range(0, n_modes_2, block_size_right):
|
|
199
|
+
i1_end = min(i1 + block_size_right, n_modes_2)
|
|
200
|
+
right_block = right_batch[i1:i1_end]
|
|
201
|
+
weighted_right = right_block * d_area
|
|
202
|
+
out_batch[i0:i0_end, i1:i1_end] += coeff * (left_block @ weighted_right.T)
|
|
203
|
+
|
|
204
|
+
return S
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"""Shared Yee-grid integration and grid-correction kernels."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Literal
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
C_0 = 2.99792458e14
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def clipped_widths(coords: np.ndarray, lo: float, hi: float) -> np.ndarray:
|
|
13
|
+
"""Return consecutive widths of ``coords`` clipped to ``[lo, hi]``."""
|
|
14
|
+
|
|
15
|
+
clipped = np.clip(coords, lo, hi)
|
|
16
|
+
return clipped[1:] - clipped[:-1]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def colocated_edges_1d(
|
|
20
|
+
sample_boundaries: np.ndarray,
|
|
21
|
+
mnt_min: float = -np.inf,
|
|
22
|
+
mnt_max: float = np.inf,
|
|
23
|
+
) -> np.ndarray:
|
|
24
|
+
"""Return integration-cell edges around boundary-colocated samples."""
|
|
25
|
+
|
|
26
|
+
sample_boundaries = np.asarray(sample_boundaries)
|
|
27
|
+
centers = (sample_boundaries[1:] + sample_boundaries[:-1]) / 2
|
|
28
|
+
edges = np.concatenate([[sample_boundaries[0]], centers, [sample_boundaries[-1]]])
|
|
29
|
+
return np.clip(edges, mnt_min, mnt_max)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def colocated_widths_1d(
|
|
33
|
+
sample_boundaries: np.ndarray,
|
|
34
|
+
mnt_min: float = -np.inf,
|
|
35
|
+
mnt_max: float = np.inf,
|
|
36
|
+
) -> np.ndarray:
|
|
37
|
+
"""Return per-sample widths for boundary-colocated data."""
|
|
38
|
+
|
|
39
|
+
sample_boundaries = np.asarray(sample_boundaries)
|
|
40
|
+
if sample_boundaries.size <= 1:
|
|
41
|
+
return np.array([1.0])
|
|
42
|
+
edges = colocated_edges_1d(sample_boundaries, mnt_min, mnt_max)
|
|
43
|
+
return edges[1:] - edges[:-1]
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def yee_primal_dual_widths_1d(
|
|
47
|
+
boundaries: np.ndarray,
|
|
48
|
+
mnt_min: float = -np.inf,
|
|
49
|
+
mnt_max: float = np.inf,
|
|
50
|
+
*,
|
|
51
|
+
valid_bounds: tuple[float, float] | None = None,
|
|
52
|
+
keep_inds: np.ndarray | None = None,
|
|
53
|
+
) -> tuple[np.ndarray, np.ndarray]:
|
|
54
|
+
"""Return per-cell primal and dual widths for native Yee-staggered samples.
|
|
55
|
+
|
|
56
|
+
When ``keep_inds`` holds the sorted cell indices kept by a downsampled
|
|
57
|
+
(``interval_space``) recording and selects a strict subset of cells, the
|
|
58
|
+
exact per-cell widths no longer tile the kept samples, so each returned
|
|
59
|
+
width is instead the box rule over the kept native positions of its
|
|
60
|
+
staggered set (midpoints between kept neighbors, clipped like
|
|
61
|
+
``colocated_widths_1d``), which cannot over-count past the outermost kept
|
|
62
|
+
sample. Both returned arrays then have length ``len(keep_inds)``.
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
boundaries = np.asarray(boundaries)
|
|
66
|
+
if boundaries.size == 2:
|
|
67
|
+
return np.array([1.0]), np.array([1.0])
|
|
68
|
+
|
|
69
|
+
valid_min, valid_max = valid_bounds if valid_bounds is not None else boundaries[[0, -1]]
|
|
70
|
+
integration_min = max(mnt_min, float(valid_min))
|
|
71
|
+
integration_max = min(mnt_max, float(valid_max))
|
|
72
|
+
|
|
73
|
+
field_centers = (boundaries[:-1] + boundaries[1:]) / 2
|
|
74
|
+
|
|
75
|
+
if keep_inds is not None and len(keep_inds) < boundaries.size - 1:
|
|
76
|
+
# Downsampled recording: box rule over the kept native positions of each staggered set.
|
|
77
|
+
primal_widths = colocated_widths_1d(
|
|
78
|
+
field_centers[keep_inds], integration_min, integration_max
|
|
79
|
+
)
|
|
80
|
+
dual_widths = colocated_widths_1d(
|
|
81
|
+
boundaries[:-1][keep_inds], integration_min, integration_max
|
|
82
|
+
)
|
|
83
|
+
return primal_widths, dual_widths
|
|
84
|
+
|
|
85
|
+
centers = np.concatenate([[integration_min], field_centers])
|
|
86
|
+
bnds = np.concatenate([boundaries[:-1], [integration_max]])
|
|
87
|
+
|
|
88
|
+
primal_widths = clipped_widths(bnds, integration_min, integration_max)
|
|
89
|
+
dual_widths = clipped_widths(centers, integration_min, integration_max)
|
|
90
|
+
return primal_widths, dual_widths
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def mode_grid_correction_factors(
|
|
94
|
+
primal_distances: Any,
|
|
95
|
+
dual_distances: Any,
|
|
96
|
+
n_complex: Any,
|
|
97
|
+
freqs: Any,
|
|
98
|
+
*,
|
|
99
|
+
angle_theta: float,
|
|
100
|
+
direction: str,
|
|
101
|
+
) -> tuple[Any, Any]:
|
|
102
|
+
"""Return primal and dual mode-grid phase corrections before wrapper interpolation."""
|
|
103
|
+
|
|
104
|
+
cos_theta = np.cos(angle_theta)
|
|
105
|
+
k_vec = cos_theta * 2 * np.pi * n_complex * freqs / C_0
|
|
106
|
+
if direction == "-":
|
|
107
|
+
k_vec *= -1
|
|
108
|
+
return (
|
|
109
|
+
np.exp(1j * k_vec * primal_distances),
|
|
110
|
+
np.exp(1j * k_vec * dual_distances),
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def closest_adjacent_grid_offsets(grid_coords: Any, position: float) -> tuple[float, ...]:
|
|
115
|
+
"""Return signed offsets from ``position`` to its adjacent grid pair.
|
|
116
|
+
|
|
117
|
+
A single-point grid returns a one-element tuple. Otherwise the pair is the
|
|
118
|
+
grid point closest to ``position`` and its neighbor on the position's side,
|
|
119
|
+
clamped to stay in range: a position past the outermost point yields the
|
|
120
|
+
outermost in-range pair, which is then one-sided and classified as
|
|
121
|
+
unbracketed by ``classify_plane_offsets``. The clamp also keeps the low end
|
|
122
|
+
from wrapping to the far side of the grid.
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
offsets = np.asarray(grid_coords, dtype=float) - position
|
|
126
|
+
if offsets.size == 1:
|
|
127
|
+
return (float(offsets[0]),)
|
|
128
|
+
closest_ind = int(np.argmin(np.abs(offsets)))
|
|
129
|
+
first_ind = closest_ind - 1 if offsets[closest_ind] > 0 else closest_ind
|
|
130
|
+
first_ind = min(max(first_ind, 0), offsets.size - 2)
|
|
131
|
+
return (float(offsets[first_ind]), float(offsets[first_ind + 1]))
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def classify_plane_offsets(offsets: Any) -> Literal["on_grid", "unbracketed", "bracketed"]:
|
|
135
|
+
"""Classify how a plane phase correction follows from its grid offsets.
|
|
136
|
+
|
|
137
|
+
Returns ``"on_grid"`` for a lone offset lying exactly on the plane (the
|
|
138
|
+
correction there is exactly unity), ``"unbracketed"`` when no bracketing
|
|
139
|
+
pair exists -- a lone off-plane point, or all offsets on one side of the
|
|
140
|
+
plane -- and ``"bracketed"`` when linear interpolation to the plane is
|
|
141
|
+
defined (an offset exactly at zero interpolates to the exact endpoint).
|
|
142
|
+
"""
|
|
143
|
+
|
|
144
|
+
offsets = np.asarray(offsets, dtype=float)
|
|
145
|
+
if offsets.size == 1:
|
|
146
|
+
return "on_grid" if offsets[0] == 0.0 else "unbracketed"
|
|
147
|
+
if offsets.min() > 0 or offsets.max() < 0:
|
|
148
|
+
return "unbracketed"
|
|
149
|
+
return "bracketed"
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Shared medium dispersion numerical kernels."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
import autograd.numpy as np
|
|
8
|
+
|
|
9
|
+
C_0 = 2.99792458e14
|
|
10
|
+
MU_0 = 1.25663706212e-12
|
|
11
|
+
EPSILON_0 = 1 / (MU_0 * C_0**2)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def eps_sigma_to_eps_complex(permittivity: Any, conductivity: Any, frequency: Any) -> Any:
|
|
15
|
+
"""Convert permittivity/conductivity to complex permittivity."""
|
|
16
|
+
|
|
17
|
+
return permittivity + 1j * conductivity / (2 * np.pi * frequency * EPSILON_0)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def medium_eps_model(permittivity: float, conductivity: float, frequency: Any) -> Any:
|
|
21
|
+
"""Return nondispersive medium complex permittivity."""
|
|
22
|
+
|
|
23
|
+
return eps_sigma_to_eps_complex(permittivity, conductivity, frequency)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def pole_residue_eps_model(eps_inf: float, poles: Any, frequency: Any) -> Any:
|
|
27
|
+
"""Return pole-residue complex permittivity."""
|
|
28
|
+
|
|
29
|
+
omega = 2 * np.pi * frequency
|
|
30
|
+
eps = eps_inf + 0 * frequency + 0.0j
|
|
31
|
+
for a, c in poles:
|
|
32
|
+
a_cc = np.conj(a)
|
|
33
|
+
c_cc = np.conj(c)
|
|
34
|
+
eps = eps - c / (1j * omega + a)
|
|
35
|
+
eps = eps - c_cc / (1j * omega + a_cc)
|
|
36
|
+
return eps
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def lo_to_eps_model(poles: Any, eps_inf: float, frequency: Any) -> Any:
|
|
40
|
+
"""Return longitudinal/transverse-optical pole complex permittivity."""
|
|
41
|
+
|
|
42
|
+
omega = 2 * np.pi * frequency
|
|
43
|
+
eps = eps_inf
|
|
44
|
+
for omega_lo, gamma_lo, omega_to, gamma_to in poles:
|
|
45
|
+
eps *= omega_lo**2 - omega**2 - 1j * omega * gamma_lo
|
|
46
|
+
eps /= omega_to**2 - omega**2 - 1j * omega * gamma_to
|
|
47
|
+
return eps
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def sellmeier_n_model(coeffs: Any, frequency: Any) -> Any:
|
|
51
|
+
"""Return Sellmeier refractive index from coefficients and frequency."""
|
|
52
|
+
|
|
53
|
+
wvl = C_0 / np.array(frequency)
|
|
54
|
+
wvl2 = wvl**2
|
|
55
|
+
n_squared = 1.0
|
|
56
|
+
for B, C in coeffs:
|
|
57
|
+
n_squared = n_squared + B * wvl2 / (wvl2 - C)
|
|
58
|
+
return np.sqrt(n_squared + 0j)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def nk_to_eps_complex(n: Any, k: Any = 0) -> Any:
|
|
62
|
+
"""Convert refractive-index components to complex permittivity."""
|
|
63
|
+
|
|
64
|
+
return (n + 1j * k) ** 2
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def sellmeier_eps_model(coeffs: Any, frequency: Any) -> Any:
|
|
68
|
+
"""Return Sellmeier complex permittivity."""
|
|
69
|
+
|
|
70
|
+
return nk_to_eps_complex(sellmeier_n_model(coeffs, frequency))
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def lorentz_eps_model(eps_inf: float, coeffs: Any, frequency: Any) -> Any:
|
|
74
|
+
"""Return Lorentz complex permittivity."""
|
|
75
|
+
|
|
76
|
+
eps = eps_inf + 0.0j
|
|
77
|
+
for de, f, delta in coeffs:
|
|
78
|
+
eps = eps + (de * f**2) / (f**2 - 2j * frequency * delta - frequency**2)
|
|
79
|
+
return eps
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def drude_eps_model(eps_inf: float, coeffs: Any, frequency: Any) -> Any:
|
|
83
|
+
"""Return Drude complex permittivity."""
|
|
84
|
+
|
|
85
|
+
eps = eps_inf + 0.0j
|
|
86
|
+
for f, delta in coeffs:
|
|
87
|
+
eps = eps - (f**2) / (frequency**2 + 1j * frequency * delta)
|
|
88
|
+
return eps
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def debye_eps_model(eps_inf: float, coeffs: Any, frequency: Any) -> Any:
|
|
92
|
+
"""Return Debye complex permittivity."""
|
|
93
|
+
|
|
94
|
+
eps = eps_inf + 0.0j
|
|
95
|
+
for de, tau in coeffs:
|
|
96
|
+
eps = eps + de / (1 - 1j * frequency * tau)
|
|
97
|
+
return eps
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"""Shared microwave path-integral convention kernels."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Literal
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def snap_margin_for_field_colocation(field_data_colocated: bool) -> tuple[int, int, int]:
|
|
9
|
+
"""Return snap margin used to keep automatic current paths off interpolated H fields."""
|
|
10
|
+
|
|
11
|
+
return (2, 2, 2) if field_data_colocated else (0, 0, 0)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def path_integral_current_sign(polarity: Literal["+", "-"]) -> Literal["+", "-"]:
|
|
15
|
+
"""Return current-integral sign for a lumped-element voltage polarity."""
|
|
16
|
+
|
|
17
|
+
return "-" if polarity == "+" else "+"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def axis_size_vector(axis: int, size: tuple[float, float, float]) -> tuple[float, float, float]:
|
|
21
|
+
"""Return a 3D size vector with extent only along ``axis``."""
|
|
22
|
+
|
|
23
|
+
values = [0.0, 0.0, 0.0]
|
|
24
|
+
values[axis] = size[axis]
|
|
25
|
+
return tuple(values)
|