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.
Files changed (530) hide show
  1. flexcompute/core/_migration/__init__.py +1 -0
  2. flexcompute/core/_migration/em/__init__.py +1 -0
  3. flexcompute/core/_migration/em/numerical/README.md +109 -0
  4. flexcompute/core/_migration/em/numerical/__init__.py +1 -0
  5. flexcompute/core/_migration/em/numerical/raw/__init__.py +1 -0
  6. flexcompute/core/_migration/em/numerical/raw/diffraction.py +55 -0
  7. flexcompute/core/_migration/em/numerical/raw/field_data.py +204 -0
  8. flexcompute/core/_migration/em/numerical/raw/grid.py +149 -0
  9. flexcompute/core/_migration/em/numerical/raw/medium.py +97 -0
  10. flexcompute/core/_migration/em/numerical/raw/microwave.py +25 -0
  11. flexcompute/core/_migration/em/numerical/raw/mode.py +107 -0
  12. flexcompute/core/_migration/em/numerical/raw/source_normalization.py +31 -0
  13. flexcompute/core/_migration/em/numerical/raw/source_time.py +89 -0
  14. flexcompute/core/_migration/em/numerical/raw/symmetry.py +18 -0
  15. flexcompute/core/_migration/em/numerical/schema/__init__.py +1 -0
  16. flexcompute/core/_migration/em/numerical/schema/field_data.py +84 -0
  17. flexcompute/core/_migration/em/numerical/schema/solver_diagnostics.py +85 -0
  18. flexcompute/core/_migration/em/numerical/schema/source_time.py +51 -0
  19. flexcompute/core/_migration/em/schema/__init__.py +1 -0
  20. flexcompute/core/_migration/em/schema/preprocess/cache.py +136 -0
  21. flexcompute/core/_migration/em/schema/preprocess/config.json +3 -0
  22. flexcompute/core/_migration/em/schema/preprocess/config.py +44 -0
  23. flexcompute/core/_migration/em/schema/preprocess/custom_medium.py +817 -0
  24. flexcompute/core/_migration/em/schema/preprocess/dipole_emission.py +28 -0
  25. flexcompute/core/_migration/em/schema/preprocess/mode.py +128 -0
  26. flexcompute/core/_migration/em/schema/preprocess/simulation.py +608 -0
  27. flexcompute/core/_migration/em/schema/preprocess/subgrid.py +510 -0
  28. flexcompute/core/_migration/em/schema/preprocess/subpixel.py +68 -0
  29. flexcompute/core/_migration/em/schema/preprocess/utils.py +213 -0
  30. flexcompute/core/_migration/em/schema/tidy3d/README.md +59 -0
  31. flexcompute/core/_migration/em/schema/tidy3d/__init__.py +1082 -0
  32. flexcompute/core/_migration/em/schema/tidy3d/__main__.py +99 -0
  33. flexcompute/core/_migration/em/schema/tidy3d/_runtime.py +12 -0
  34. flexcompute/core/_migration/em/schema/tidy3d/_testing/__init__.py +17 -0
  35. flexcompute/core/_migration/em/schema/tidy3d/_testing/synthetic_monitor_data.py +710 -0
  36. flexcompute/core/_migration/em/schema/tidy3d/compat.py +30 -0
  37. flexcompute/core/_migration/em/schema/tidy3d/components/README.md +233 -0
  38. flexcompute/core/_migration/em/schema/tidy3d/components/__init__.py +0 -0
  39. flexcompute/core/_migration/em/schema/tidy3d/components/apodization.py +107 -0
  40. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/__init__.py +42 -0
  41. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/boxes.py +162 -0
  42. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/derivative_utils.py +1635 -0
  43. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/field_map.py +83 -0
  44. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/flux_monitor.py +76 -0
  45. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/functions.py +289 -0
  46. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/monitor_names.py +25 -0
  47. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/parallel_adjoint_bases.py +348 -0
  48. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/path_utils.py +157 -0
  49. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/point_consumption.py +410 -0
  50. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/sample_sets.py +1024 -0
  51. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/snapping.py +180 -0
  52. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/source_factory.py +521 -0
  53. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/spacing.py +352 -0
  54. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/types.py +193 -0
  55. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/utils.py +136 -0
  56. flexcompute/core/_migration/em/schema/tidy3d/components/base.py +2293 -0
  57. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/__init__.py +0 -0
  58. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/data/__init__.py +0 -0
  59. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/data/monitor_data.py +130 -0
  60. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/data/sim_data.py +243 -0
  61. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/monitor.py +102 -0
  62. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/simulation.py +729 -0
  63. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/source.py +30 -0
  64. flexcompute/core/_migration/em/schema/tidy3d/components/bc_placement.py +121 -0
  65. flexcompute/core/_migration/em/schema/tidy3d/components/beam.py +1259 -0
  66. flexcompute/core/_migration/em/schema/tidy3d/components/boundary.py +1776 -0
  67. flexcompute/core/_migration/em/schema/tidy3d/components/data/README.md +158 -0
  68. flexcompute/core/_migration/em/schema/tidy3d/components/data/__init__.py +0 -0
  69. flexcompute/core/_migration/em/schema/tidy3d/components/data/data_array.py +2750 -0
  70. flexcompute/core/_migration/em/schema/tidy3d/components/data/dataset.py +1363 -0
  71. flexcompute/core/_migration/em/schema/tidy3d/components/data/em_fields.py +59 -0
  72. flexcompute/core/_migration/em/schema/tidy3d/components/data/index.py +117 -0
  73. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/README.md +13 -0
  74. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/__init__.py +164 -0
  75. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/_constants.py +15 -0
  76. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/_types.py +29 -0
  77. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/_utils.py +70 -0
  78. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/base.py +369 -0
  79. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/__init__.py +27 -0
  80. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_algebra.py +523 -0
  81. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_grid.py +367 -0
  82. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_io.py +300 -0
  83. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_metrics.py +258 -0
  84. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/data.py +390 -0
  85. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/diagnostic.py +334 -0
  86. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/dipole.py +79 -0
  87. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/electromagnetic.py +92 -0
  88. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/point_cloud.py +133 -0
  89. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/surface.py +229 -0
  90. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/time.py +193 -0
  91. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/flux.py +131 -0
  92. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/__init__.py +16 -0
  93. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/data.py +989 -0
  94. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/overlap.py +133 -0
  95. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/solver.py +405 -0
  96. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/time.py +67 -0
  97. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/__init__.py +22 -0
  98. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/_types.py +30 -0
  99. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/angle.py +224 -0
  100. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/base.py +322 -0
  101. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/cartesian.py +161 -0
  102. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/diffraction.py +363 -0
  103. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/directivity.py +451 -0
  104. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/kspace.py +133 -0
  105. flexcompute/core/_migration/em/schema/tidy3d/components/data/optical_generation.py +327 -0
  106. flexcompute/core/_migration/em/schema/tidy3d/components/data/point_cloud.py +151 -0
  107. flexcompute/core/_migration/em/schema/tidy3d/components/data/sim_data.py +2090 -0
  108. flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/__init__.py +0 -0
  109. flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/base.py +2753 -0
  110. flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/surface.py +502 -0
  111. flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/tetrahedral.py +460 -0
  112. flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/triangular.py +955 -0
  113. flexcompute/core/_migration/em/schema/tidy3d/components/data/utils.py +464 -0
  114. flexcompute/core/_migration/em/schema/tidy3d/components/data/validators.py +86 -0
  115. flexcompute/core/_migration/em/schema/tidy3d/components/data/zbf.py +156 -0
  116. flexcompute/core/_migration/em/schema/tidy3d/components/diffraction.py +256 -0
  117. flexcompute/core/_migration/em/schema/tidy3d/components/dispersion_fitter.py +1051 -0
  118. flexcompute/core/_migration/em/schema/tidy3d/components/docstrings.py +298 -0
  119. flexcompute/core/_migration/em/schema/tidy3d/components/eme/__init__.py +0 -0
  120. flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/__init__.py +0 -0
  121. flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/dataset.py +522 -0
  122. flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/monitor_data.py +203 -0
  123. flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/sim_data.py +1230 -0
  124. flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/stage.py +225 -0
  125. flexcompute/core/_migration/em/schema/tidy3d/components/eme/grid.py +950 -0
  126. flexcompute/core/_migration/em/schema/tidy3d/components/eme/monitor.py +425 -0
  127. flexcompute/core/_migration/em/schema/tidy3d/components/eme/simulation.py +2498 -0
  128. flexcompute/core/_migration/em/schema/tidy3d/components/eme/sweep.py +180 -0
  129. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/README.md +248 -0
  130. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/__init__.py +7 -0
  131. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/approximate_angle.py +193 -0
  132. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/approximate_paired.py +399 -0
  133. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/common.py +880 -0
  134. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/exact.py +970 -0
  135. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/projector.py +1292 -0
  136. flexcompute/core/_migration/em/schema/tidy3d/components/file_util.py +107 -0
  137. flexcompute/core/_migration/em/schema/tidy3d/components/frequencies.py +564 -0
  138. flexcompute/core/_migration/em/schema/tidy3d/components/frequency_extrapolation.py +86 -0
  139. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/__init__.py +0 -0
  140. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/__init__.py +82 -0
  141. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/abstract_primitives.py +419 -0
  142. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/array.py +414 -0
  143. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/box.py +1193 -0
  144. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/clip_operation.py +528 -0
  145. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/constants.py +9 -0
  146. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/core.py +719 -0
  147. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/gds.py +437 -0
  148. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/geometry_group.py +401 -0
  149. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/operators.py +153 -0
  150. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/plotting.py +515 -0
  151. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/transformed.py +365 -0
  152. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/transforms.py +309 -0
  153. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/utils.py +104 -0
  154. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/bound_ops.py +71 -0
  155. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/contour_conversion.py +797 -0
  156. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/float_utils.py +31 -0
  157. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/mesh.py +1568 -0
  158. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/polyslab.py +3817 -0
  159. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/primitives.py +1480 -0
  160. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/triangulation.py +84 -0
  161. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/utils.py +1099 -0
  162. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/utils_2d.py +372 -0
  163. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/vertex_utils.py +59 -0
  164. flexcompute/core/_migration/em/schema/tidy3d/components/grid/__init__.py +0 -0
  165. flexcompute/core/_migration/em/schema/tidy3d/components/grid/corner_finder.py +715 -0
  166. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid.py +925 -0
  167. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/__init__.py +193 -0
  168. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/constants.py +50 -0
  169. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/__init__.py +16 -0
  170. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/auto.py +494 -0
  171. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/base.py +251 -0
  172. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/manual.py +302 -0
  173. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/__init__.py +5 -0
  174. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/construction.py +291 -0
  175. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/edges.py +277 -0
  176. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/gaps.py +526 -0
  177. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/inplane.py +524 -0
  178. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/model.py +369 -0
  179. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/properties.py +81 -0
  180. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/__init__.py +5 -0
  181. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/entities.py +335 -0
  182. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/factories.py +170 -0
  183. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/generation.py +669 -0
  184. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/localization.py +59 -0
  185. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/localization_helpers.py +136 -0
  186. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/model.py +241 -0
  187. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/sizing.py +128 -0
  188. flexcompute/core/_migration/em/schema/tidy3d/components/grid/mesher.py +1638 -0
  189. flexcompute/core/_migration/em/schema/tidy3d/components/grid/yee_areas.py +31 -0
  190. flexcompute/core/_migration/em/schema/tidy3d/components/index.py +210 -0
  191. flexcompute/core/_migration/em/schema/tidy3d/components/lumped_element.py +2297 -0
  192. flexcompute/core/_migration/em/schema/tidy3d/components/material/README.md +3 -0
  193. flexcompute/core/_migration/em/schema/tidy3d/components/material/__init__.py +1 -0
  194. flexcompute/core/_migration/em/schema/tidy3d/components/material/multi_physics.py +221 -0
  195. flexcompute/core/_migration/em/schema/tidy3d/components/material/solver_types.py +22 -0
  196. flexcompute/core/_migration/em/schema/tidy3d/components/material/tcad/__init__.py +0 -0
  197. flexcompute/core/_migration/em/schema/tidy3d/components/material/tcad/charge.py +456 -0
  198. flexcompute/core/_migration/em/schema/tidy3d/components/material/tcad/heat.py +426 -0
  199. flexcompute/core/_migration/em/schema/tidy3d/components/material/tensor_rotation.py +198 -0
  200. flexcompute/core/_migration/em/schema/tidy3d/components/material/types.py +26 -0
  201. flexcompute/core/_migration/em/schema/tidy3d/components/medium/README.md +16 -0
  202. flexcompute/core/_migration/em/schema/tidy3d/components/medium/__init__.py +179 -0
  203. flexcompute/core/_migration/em/schema/tidy3d/components/medium/_rebuild.py +53 -0
  204. flexcompute/core/_migration/em/schema/tidy3d/components/medium/abstract_custom.py +461 -0
  205. flexcompute/core/_migration/em/schema/tidy3d/components/medium/anisotropic.py +670 -0
  206. flexcompute/core/_migration/em/schema/tidy3d/components/medium/base.py +988 -0
  207. flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/__init__.py +27 -0
  208. flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/anisotropic.py +277 -0
  209. flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/dispersive.py +1504 -0
  210. flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/isotropic.py +1149 -0
  211. flexcompute/core/_migration/em/schema/tidy3d/components/medium/debye.py +222 -0
  212. flexcompute/core/_migration/em/schema/tidy3d/components/medium/drude.py +188 -0
  213. flexcompute/core/_migration/em/schema/tidy3d/components/medium/isotropic.py +438 -0
  214. flexcompute/core/_migration/em/schema/tidy3d/components/medium/lorentz.py +317 -0
  215. flexcompute/core/_migration/em/schema/tidy3d/components/medium/lossy_metal.py +275 -0
  216. flexcompute/core/_migration/em/schema/tidy3d/components/medium/medium_types.py +74 -0
  217. flexcompute/core/_migration/em/schema/tidy3d/components/medium/perturbation.py +480 -0
  218. flexcompute/core/_migration/em/schema/tidy3d/components/medium/pole_residue.py +827 -0
  219. flexcompute/core/_migration/em/schema/tidy3d/components/medium/roughness.py +260 -0
  220. flexcompute/core/_migration/em/schema/tidy3d/components/medium/sellmeier.py +274 -0
  221. flexcompute/core/_migration/em/schema/tidy3d/components/medium/two_d.py +468 -0
  222. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/__init__.py +0 -0
  223. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/base.py +9 -0
  224. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/__init__.py +0 -0
  225. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/data_array.py +52 -0
  226. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/dataset.py +202 -0
  227. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/monitor_data.py +790 -0
  228. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/formulas/__init__.py +0 -0
  229. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/formulas/circuit_parameters.py +179 -0
  230. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/impedance_calculator.py +205 -0
  231. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/mode_spec.py +368 -0
  232. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/monitor.py +94 -0
  233. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/__init__.py +0 -0
  234. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/factory.py +223 -0
  235. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/__init__.py +0 -0
  236. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/auto.py +91 -0
  237. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/base.py +244 -0
  238. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/current.py +335 -0
  239. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/voltage.py +99 -0
  240. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/mode_plane_analyzer.py +445 -0
  241. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/__init__.py +0 -0
  242. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/base.py +274 -0
  243. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/current.py +434 -0
  244. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/impedance.py +189 -0
  245. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/voltage.py +235 -0
  246. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/types.py +18 -0
  247. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/viz.py +56 -0
  248. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/source.py +79 -0
  249. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/time.py +355 -0
  250. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/types.py +9 -0
  251. flexcompute/core/_migration/em/schema/tidy3d/components/mode/LICENSE +25 -0
  252. flexcompute/core/_migration/em/schema/tidy3d/components/mode/__init__.py +0 -0
  253. flexcompute/core/_migration/em/schema/tidy3d/components/mode/data/__init__.py +0 -0
  254. flexcompute/core/_migration/em/schema/tidy3d/components/mode/data/sim_data.py +335 -0
  255. flexcompute/core/_migration/em/schema/tidy3d/components/mode/derivatives.py +294 -0
  256. flexcompute/core/_migration/em/schema/tidy3d/components/mode/geometry.py +122 -0
  257. flexcompute/core/_migration/em/schema/tidy3d/components/mode/mode_solver.py +3310 -0
  258. flexcompute/core/_migration/em/schema/tidy3d/components/mode/simulation.py +723 -0
  259. flexcompute/core/_migration/em/schema/tidy3d/components/mode/solver.py +1388 -0
  260. flexcompute/core/_migration/em/schema/tidy3d/components/mode/transforms.py +131 -0
  261. flexcompute/core/_migration/em/schema/tidy3d/components/mode/validation.py +155 -0
  262. flexcompute/core/_migration/em/schema/tidy3d/components/mode_spec.py +1038 -0
  263. flexcompute/core/_migration/em/schema/tidy3d/components/monitor.py +3116 -0
  264. flexcompute/core/_migration/em/schema/tidy3d/components/nonlinear.py +422 -0
  265. flexcompute/core/_migration/em/schema/tidy3d/components/parameter_perturbation.py +1797 -0
  266. flexcompute/core/_migration/em/schema/tidy3d/components/run_time_spec.py +42 -0
  267. flexcompute/core/_migration/em/schema/tidy3d/components/scene.py +2141 -0
  268. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/README.md +67 -0
  269. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/__init__.py +81 -0
  270. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/adjoint.py +218 -0
  271. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/boundaries.py +789 -0
  272. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/constants.py +32 -0
  273. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/construction.py +418 -0
  274. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/export.py +357 -0
  275. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/grid.py +833 -0
  276. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/materials.py +648 -0
  277. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/mode_integration.py +514 -0
  278. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/model.py +1332 -0
  279. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/monitors.py +919 -0
  280. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/rf_integration.py +123 -0
  281. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/runtime.py +414 -0
  282. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/sources.py +568 -0
  283. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/tfsf.py +998 -0
  284. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/visualization.py +835 -0
  285. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/yee.py +258 -0
  286. flexcompute/core/_migration/em/schema/tidy3d/components/source/__init__.py +0 -0
  287. flexcompute/core/_migration/em/schema/tidy3d/components/source/adjoint_helpers.py +272 -0
  288. flexcompute/core/_migration/em/schema/tidy3d/components/source/base.py +241 -0
  289. flexcompute/core/_migration/em/schema/tidy3d/components/source/current.py +424 -0
  290. flexcompute/core/_migration/em/schema/tidy3d/components/source/field.py +1650 -0
  291. flexcompute/core/_migration/em/schema/tidy3d/components/source/frame.py +25 -0
  292. flexcompute/core/_migration/em/schema/tidy3d/components/source/freq_range.py +230 -0
  293. flexcompute/core/_migration/em/schema/tidy3d/components/source/time.py +682 -0
  294. flexcompute/core/_migration/em/schema/tidy3d/components/source/utils.py +36 -0
  295. flexcompute/core/_migration/em/schema/tidy3d/components/spice/__init__.py +0 -0
  296. flexcompute/core/_migration/em/schema/tidy3d/components/spice/analysis/__init__.py +0 -0
  297. flexcompute/core/_migration/em/schema/tidy3d/components/spice/analysis/ac.py +101 -0
  298. flexcompute/core/_migration/em/schema/tidy3d/components/spice/analysis/dc.py +298 -0
  299. flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/__init__.py +0 -0
  300. flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/ac.py +61 -0
  301. flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/dc.py +166 -0
  302. flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/types.py +7 -0
  303. flexcompute/core/_migration/em/schema/tidy3d/components/spice/types.py +17 -0
  304. flexcompute/core/_migration/em/schema/tidy3d/components/structure.py +1396 -0
  305. flexcompute/core/_migration/em/schema/tidy3d/components/subpixel_spec.py +224 -0
  306. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/__init__.py +0 -0
  307. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/analysis/__init__.py +0 -0
  308. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/analysis/heat_simulation_type.py +177 -0
  309. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/bandgap.py +151 -0
  310. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/__init__.py +0 -0
  311. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/abstract.py +11 -0
  312. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/charge.py +152 -0
  313. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/heat.py +339 -0
  314. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/specification.py +53 -0
  315. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/__init__.py +0 -0
  316. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/__init__.py +0 -0
  317. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/abstract.py +391 -0
  318. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/charge.py +738 -0
  319. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/heat.py +67 -0
  320. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/mesh.py +70 -0
  321. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/sim_data.py +852 -0
  322. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/types.py +31 -0
  323. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/doping.py +433 -0
  324. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/doping_utils.py +329 -0
  325. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/effective_DOS.py +130 -0
  326. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/generation_recombination.py +839 -0
  327. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/grid.py +750 -0
  328. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/mesher.py +41 -0
  329. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/mobility.py +531 -0
  330. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/__init__.py +0 -0
  331. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/abstract.py +61 -0
  332. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/charge.py +225 -0
  333. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/heat.py +27 -0
  334. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/mesh.py +35 -0
  335. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/simulation/__init__.py +0 -0
  336. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/simulation/heat.py +60 -0
  337. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/simulation/heat_charge.py +3778 -0
  338. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/__init__.py +0 -0
  339. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/abstract.py +49 -0
  340. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/coupled.py +32 -0
  341. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/heat.py +52 -0
  342. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/types.py +103 -0
  343. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/viz.py +17 -0
  344. flexcompute/core/_migration/em/schema/tidy3d/components/thin_lens.py +149 -0
  345. flexcompute/core/_migration/em/schema/tidy3d/components/time.py +208 -0
  346. flexcompute/core/_migration/em/schema/tidy3d/components/time_modulation.py +328 -0
  347. flexcompute/core/_migration/em/schema/tidy3d/components/transformation.py +221 -0
  348. flexcompute/core/_migration/em/schema/tidy3d/components/types/__init__.py +141 -0
  349. flexcompute/core/_migration/em/schema/tidy3d/components/types/base.py +334 -0
  350. flexcompute/core/_migration/em/schema/tidy3d/components/types/mode_spec.py +11 -0
  351. flexcompute/core/_migration/em/schema/tidy3d/components/types/monitor.py +67 -0
  352. flexcompute/core/_migration/em/schema/tidy3d/components/types/monitor_data.py +88 -0
  353. flexcompute/core/_migration/em/schema/tidy3d/components/types/simulation.py +49 -0
  354. flexcompute/core/_migration/em/schema/tidy3d/components/types/third_party.py +18 -0
  355. flexcompute/core/_migration/em/schema/tidy3d/components/types/time.py +27 -0
  356. flexcompute/core/_migration/em/schema/tidy3d/components/types/utils.py +103 -0
  357. flexcompute/core/_migration/em/schema/tidy3d/components/types/workflow.py +22 -0
  358. flexcompute/core/_migration/em/schema/tidy3d/components/validators.py +719 -0
  359. flexcompute/core/_migration/em/schema/tidy3d/components/viz/__init__.py +110 -0
  360. flexcompute/core/_migration/em/schema/tidy3d/components/viz/axes_utils.py +413 -0
  361. flexcompute/core/_migration/em/schema/tidy3d/components/viz/descartes.py +113 -0
  362. flexcompute/core/_migration/em/schema/tidy3d/components/viz/flex_color_palettes.py +3306 -0
  363. flexcompute/core/_migration/em/schema/tidy3d/components/viz/flex_style.py +46 -0
  364. flexcompute/core/_migration/em/schema/tidy3d/components/viz/layout.py +101 -0
  365. flexcompute/core/_migration/em/schema/tidy3d/components/viz/plot_params.py +95 -0
  366. flexcompute/core/_migration/em/schema/tidy3d/components/viz/plot_sim_3d.py +218 -0
  367. flexcompute/core/_migration/em/schema/tidy3d/components/viz/styles.py +49 -0
  368. flexcompute/core/_migration/em/schema/tidy3d/components/viz/visualization_spec.py +87 -0
  369. flexcompute/core/_migration/em/schema/tidy3d/components/workflow.py +372 -0
  370. flexcompute/core/_migration/em/schema/tidy3d/config/README.md +96 -0
  371. flexcompute/core/_migration/em/schema/tidy3d/config/__init__.py +183 -0
  372. flexcompute/core/_migration/em/schema/tidy3d/config/deprecations.py +95 -0
  373. flexcompute/core/_migration/em/schema/tidy3d/config/loader.py +852 -0
  374. flexcompute/core/_migration/em/schema/tidy3d/config/manager.py +617 -0
  375. flexcompute/core/_migration/em/schema/tidy3d/config/migrations.py +290 -0
  376. flexcompute/core/_migration/em/schema/tidy3d/config/profiles.py +64 -0
  377. flexcompute/core/_migration/em/schema/tidy3d/config/registry.py +83 -0
  378. flexcompute/core/_migration/em/schema/tidy3d/config/schema_utils.py +27 -0
  379. flexcompute/core/_migration/em/schema/tidy3d/config/sections.py +739 -0
  380. flexcompute/core/_migration/em/schema/tidy3d/config/serializer.py +145 -0
  381. flexcompute/core/_migration/em/schema/tidy3d/constants.py +360 -0
  382. flexcompute/core/_migration/em/schema/tidy3d/exceptions.py +84 -0
  383. flexcompute/core/_migration/em/schema/tidy3d/log.py +540 -0
  384. flexcompute/core/_migration/em/schema/tidy3d/material_library/__init__.py +0 -0
  385. flexcompute/core/_migration/em/schema/tidy3d/material_library/material_library.py +2991 -0
  386. flexcompute/core/_migration/em/schema/tidy3d/material_library/material_reference.py +231 -0
  387. flexcompute/core/_migration/em/schema/tidy3d/material_library/parametric_materials.py +412 -0
  388. flexcompute/core/_migration/em/schema/tidy3d/material_library/util.py +272 -0
  389. flexcompute/core/_migration/em/schema/tidy3d/packaging.py +251 -0
  390. flexcompute/core/_migration/em/schema/tidy3d/plugins/__init__.py +1 -0
  391. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/README.md +302 -0
  392. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/__init__.py +99 -0
  393. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/constants.py +4 -0
  394. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/differential_operators.py +78 -0
  395. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/functions.py +884 -0
  396. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/__init__.py +43 -0
  397. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/filters.py +326 -0
  398. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/misc.py +29 -0
  399. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/parametrizations.py +393 -0
  400. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/penalties.py +268 -0
  401. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/projections.py +190 -0
  402. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/invdes/symmetries.py +236 -0
  403. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/optimizers.py +335 -0
  404. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/primitives/__init__.py +6 -0
  405. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/primitives/interpolate.py +847 -0
  406. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/primitives/misc.py +139 -0
  407. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/types.py +6 -0
  408. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/utilities.py +262 -0
  409. flexcompute/core/_migration/em/schema/tidy3d/plugins/design/README.md +148 -0
  410. flexcompute/core/_migration/em/schema/tidy3d/plugins/design/__init__.py +29 -0
  411. flexcompute/core/_migration/em/schema/tidy3d/plugins/design/design.py +783 -0
  412. flexcompute/core/_migration/em/schema/tidy3d/plugins/design/method.py +1071 -0
  413. flexcompute/core/_migration/em/schema/tidy3d/plugins/design/parameter.py +222 -0
  414. flexcompute/core/_migration/em/schema/tidy3d/plugins/design/result.py +504 -0
  415. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/README.md +16 -0
  416. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/__init__.py +29 -0
  417. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/constants.py +9 -0
  418. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/data.py +108 -0
  419. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/data_array.py +66 -0
  420. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/study.py +890 -0
  421. flexcompute/core/_migration/em/schema/tidy3d/plugins/dispersion/__init__.py +16 -0
  422. flexcompute/core/_migration/em/schema/tidy3d/plugins/dispersion/fit.py +797 -0
  423. flexcompute/core/_migration/em/schema/tidy3d/plugins/dispersion/fit_fast.py +193 -0
  424. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/README.md +308 -0
  425. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/__init__.py +68 -0
  426. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/base.py +209 -0
  427. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/functions.py +171 -0
  428. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/metrics.py +140 -0
  429. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/operators.py +178 -0
  430. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/types.py +68 -0
  431. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/variables.py +96 -0
  432. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/README.md +515 -0
  433. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/__init__.py +60 -0
  434. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/base.py +10 -0
  435. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/contours.py +71 -0
  436. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/design.py +429 -0
  437. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/initialization.py +139 -0
  438. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/optimizer.py +231 -0
  439. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/penalty.py +115 -0
  440. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/polyslab_set.py +509 -0
  441. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/region.py +397 -0
  442. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/result.py +170 -0
  443. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/self_intersection.py +302 -0
  444. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/transformation.py +101 -0
  445. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/utils.py +75 -0
  446. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/validators.py +80 -0
  447. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/README.md +10 -0
  448. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/__init__.py +18 -0
  449. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/README.md +43 -0
  450. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/__init__.py +22 -0
  451. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/defaults.py +9 -0
  452. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/drc.py +233 -0
  453. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/results.py +503 -0
  454. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/util.py +13 -0
  455. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/__init__.py +82 -0
  456. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/array_factor.py +1350 -0
  457. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/auto_path_integrals.py +11 -0
  458. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/custom_path_integrals.py +35 -0
  459. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/impedance_calculator.py +15 -0
  460. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/lobe_measurer.py +356 -0
  461. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/models/__init__.py +10 -0
  462. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/models/coupled_microstrip.py +105 -0
  463. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/models/microstrip.py +152 -0
  464. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/path_integrals.py +23 -0
  465. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/rf_material_library.py +1380 -0
  466. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/rf_material_reference.py +148 -0
  467. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/viz.py +39 -0
  468. flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/LICENSE +25 -0
  469. flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/README.md +1 -0
  470. flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/__init__.py +7 -0
  471. flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/mode_solver.py +17 -0
  472. flexcompute/core/_migration/em/schema/tidy3d/plugins/polyslab/__init__.py +7 -0
  473. flexcompute/core/_migration/em/schema/tidy3d/plugins/polyslab/polyslab.py +77 -0
  474. flexcompute/core/_migration/em/schema/tidy3d/plugins/pytorch/README.md +54 -0
  475. flexcompute/core/_migration/em/schema/tidy3d/plugins/pytorch/__init__.py +5 -0
  476. flexcompute/core/_migration/em/schema/tidy3d/plugins/pytorch/wrapper.py +33 -0
  477. flexcompute/core/_migration/em/schema/tidy3d/plugins/resonance/__init__.py +7 -0
  478. flexcompute/core/_migration/em/schema/tidy3d/plugins/resonance/resonance.py +450 -0
  479. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/__init__.py +92 -0
  480. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/__init__.py +0 -0
  481. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/antenna.py +133 -0
  482. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/modal.py +120 -0
  483. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/terminal.py +465 -0
  484. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/__init__.py +0 -0
  485. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/base.py +418 -0
  486. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/modal.py +401 -0
  487. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/terminal.py +2560 -0
  488. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/types.py +6 -0
  489. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/viz.py +111 -0
  490. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/__init__.py +0 -0
  491. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/base.py +82 -0
  492. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/data_array.py +83 -0
  493. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/modal.py +54 -0
  494. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/terminal.py +753 -0
  495. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/types.py +10 -0
  496. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/__init__.py +0 -0
  497. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/base.py +28 -0
  498. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/base_lumped.py +267 -0
  499. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/base_terminal.py +66 -0
  500. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/coaxial_lumped.py +467 -0
  501. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/modal.py +274 -0
  502. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/rectangular_lumped.py +629 -0
  503. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/tilted_lumped.py +706 -0
  504. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/types.py +30 -0
  505. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/wave.py +1631 -0
  506. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/run.py +176 -0
  507. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/types.py +20 -0
  508. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/utils.py +469 -0
  509. flexcompute/core/_migration/em/schema/tidy3d/plugins/waveguide/__init__.py +7 -0
  510. flexcompute/core/_migration/em/schema/tidy3d/plugins/waveguide/rectangular_dielectric.py +1181 -0
  511. flexcompute/core/_migration/em/schema/tidy3d/rf.py +269 -0
  512. flexcompute/core/_migration/em/schema/tidy3d/style.mplstyle +1 -0
  513. flexcompute/core/_migration/em/schema/tidy3d/system.py +12 -0
  514. flexcompute/core/_migration/em/schema/tidy3d/updater.py +381 -0
  515. flexcompute/core/_migration/em/schema/tidy3d/version.py +3 -0
  516. flexcompute/core/_migration/em/validation/__init__.py +5 -0
  517. flexcompute/core/_migration/em/validation/report.py +28 -0
  518. flexcompute/core/config/__init__.py +20 -0
  519. flexcompute/core/config/app.py +102 -0
  520. flexcompute/core/config/env.py +52 -0
  521. flexcompute/core/config/loader.py +826 -0
  522. flexcompute/core/config/manager.py +325 -0
  523. flexcompute/core/config/registry.py +81 -0
  524. flexcompute/core/config/sections.py +41 -0
  525. flexcompute/core/config/serializer.py +152 -0
  526. flexcompute_core-0.0.1.dev2.dist-info/METADATA +59 -0
  527. flexcompute_core-0.0.1.dev2.dist-info/RECORD +530 -0
  528. flexcompute_core-0.0.1.dev0.dist-info/METADATA +0 -21
  529. flexcompute_core-0.0.1.dev0.dist-info/RECORD +0 -5
  530. {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)