flexcompute-core 0.0.1.dev2__py3-none-any.whl → 0.0.1.dev3__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 (685) hide show
  1. flexcompute/core/_migration/em/apodization/__init__.py +1 -0
  2. flexcompute/core/_migration/em/apodization/schema.py +88 -0
  3. flexcompute/core/_migration/em/apodization/validation.py +54 -0
  4. flexcompute/core/_migration/em/boundary/__init__.py +1 -0
  5. flexcompute/core/_migration/em/boundary/placement/__init__.py +1 -0
  6. flexcompute/core/_migration/em/boundary/placement/schema.py +101 -0
  7. flexcompute/core/_migration/em/boundary/placement/validation.py +42 -0
  8. flexcompute/core/_migration/em/boundary/schema.py +1592 -0
  9. flexcompute/core/_migration/em/boundary/validation.py +232 -0
  10. flexcompute/core/_migration/em/conversion/__init__.py +1 -0
  11. flexcompute/core/_migration/em/conversion/base.py +38 -0
  12. flexcompute/core/_migration/em/data/__init__.py +1 -0
  13. flexcompute/core/_migration/em/data/validation.py +158 -0
  14. flexcompute/core/_migration/em/derivatives/__init__.py +89 -0
  15. flexcompute/core/_migration/em/derivatives/base.py +259 -0
  16. flexcompute/core/_migration/em/derivatives/execute.py +257 -0
  17. flexcompute/core/_migration/em/derivatives/hdf5.py +106 -0
  18. flexcompute/core/_migration/em/derivatives/kernels.py +653 -0
  19. flexcompute/core/_migration/em/derivatives/program.py +149 -0
  20. flexcompute/core/_migration/em/derivatives/reductions.py +246 -0
  21. flexcompute/core/_migration/em/eme/__init__.py +1 -0
  22. flexcompute/core/_migration/em/eme/runtime.py +151 -0
  23. flexcompute/core/_migration/em/eme/schema/__init__.py +1 -0
  24. flexcompute/core/_migration/em/eme/schema/grid.py +813 -0
  25. flexcompute/core/_migration/em/eme/schema/sweep.py +166 -0
  26. flexcompute/core/_migration/em/eme/schema/validation_schema.py +39 -0
  27. flexcompute/core/_migration/em/eme/validation.py +282 -0
  28. flexcompute/core/_migration/em/frequency_extrapolation/__init__.py +1 -0
  29. flexcompute/core/_migration/em/frequency_extrapolation/schema.py +76 -0
  30. flexcompute/core/_migration/em/frequency_extrapolation/validation.py +78 -0
  31. flexcompute/core/_migration/em/geometry/__init__.py +1 -0
  32. flexcompute/core/_migration/em/geometry/translate.py +154 -0
  33. flexcompute/core/_migration/em/geometry/validation.py +19 -0
  34. flexcompute/core/_migration/em/grid/__init__.py +1 -0
  35. flexcompute/core/_migration/em/grid/schema/__init__.py +1 -0
  36. flexcompute/core/_migration/em/grid/schema/grid_spec/__init__.py +1 -0
  37. flexcompute/core/_migration/em/grid/schema/grid_spec/constants.py +42 -0
  38. flexcompute/core/_migration/em/grid/schema/grid_spec/refinement/__init__.py +1 -0
  39. flexcompute/core/_migration/em/{schema/tidy3d/components/grid → grid/schema}/grid_spec/refinement/construction.py +2 -3
  40. flexcompute/core/_migration/em/grid/schema/grid_spec/refinement/grid_refinement.py +142 -0
  41. flexcompute/core/_migration/em/grid/schema/grid_spec/refinement/model.py +229 -0
  42. flexcompute/core/_migration/em/{schema/tidy3d/components/grid → grid/schema}/grid_spec/refinement/properties.py +2 -3
  43. flexcompute/core/_migration/em/grid/schema/validation_schema.py +9 -0
  44. flexcompute/core/_migration/em/grid/validation.py +78 -0
  45. flexcompute/core/_migration/em/invdes/__init__.py +1 -0
  46. flexcompute/core/_migration/em/invdes/schema/__init__.py +1 -0
  47. flexcompute/core/_migration/em/invdes/schema/design.py +190 -0
  48. flexcompute/core/_migration/em/invdes/schema/initialization.py +103 -0
  49. flexcompute/core/_migration/em/invdes/schema/penalty.py +116 -0
  50. flexcompute/core/_migration/em/invdes/schema/region.py +331 -0
  51. flexcompute/core/_migration/em/invdes/schema/transformation.py +121 -0
  52. flexcompute/core/_migration/em/invdes/validation.py +273 -0
  53. flexcompute/core/_migration/em/lumped_element/__init__.py +1 -0
  54. flexcompute/core/_migration/em/lumped_element/schema.py +2186 -0
  55. flexcompute/core/_migration/em/lumped_element/validation.py +203 -0
  56. flexcompute/core/_migration/em/material/__init__.py +1 -0
  57. flexcompute/core/_migration/em/material/dispersion_fitter/__init__.py +1 -0
  58. flexcompute/core/_migration/em/material/dispersion_fitter/schema/__init__.py +1 -0
  59. flexcompute/core/_migration/em/material/dispersion_fitter/schema/dispersion_fitter.py +1017 -0
  60. flexcompute/core/_migration/em/material/dispersion_fitter/validation.py +50 -0
  61. flexcompute/core/_migration/em/material/medium/__init__.py +1 -0
  62. flexcompute/core/_migration/em/material/medium/comparison.py +16 -0
  63. flexcompute/core/_migration/em/material/medium/limits.py +20 -0
  64. flexcompute/core/_migration/em/material/medium/schema/__init__.py +32 -0
  65. flexcompute/core/_migration/em/material/medium/schema/_rebuild.py +60 -0
  66. flexcompute/core/_migration/em/material/medium/schema/abstract_custom.py +343 -0
  67. flexcompute/core/_migration/em/material/medium/schema/anisotropic.py +496 -0
  68. flexcompute/core/_migration/em/material/medium/schema/base.py +775 -0
  69. flexcompute/core/_migration/em/material/medium/schema/custom/__init__.py +1 -0
  70. flexcompute/core/_migration/em/material/medium/schema/custom/anisotropic.py +250 -0
  71. flexcompute/core/_migration/em/material/medium/schema/custom/dispersive.py +863 -0
  72. flexcompute/core/_migration/em/material/medium/schema/custom/isotropic.py +709 -0
  73. flexcompute/core/_migration/em/material/medium/schema/debye.py +120 -0
  74. flexcompute/core/_migration/em/material/medium/schema/drude.py +116 -0
  75. flexcompute/core/_migration/em/material/medium/schema/isotropic.py +272 -0
  76. flexcompute/core/_migration/em/material/medium/schema/lorentz.py +193 -0
  77. flexcompute/core/_migration/em/material/medium/schema/lossy_metal.py +265 -0
  78. flexcompute/core/_migration/em/material/medium/schema/medium_types.py +91 -0
  79. flexcompute/core/_migration/em/material/medium/schema/perturbation.py +304 -0
  80. flexcompute/core/_migration/em/material/medium/schema/pole_residue.py +603 -0
  81. flexcompute/core/_migration/em/material/medium/schema/roughness.py +260 -0
  82. flexcompute/core/_migration/em/material/medium/schema/sellmeier.py +154 -0
  83. flexcompute/core/_migration/em/material/medium/schema/two_d.py +473 -0
  84. flexcompute/core/_migration/em/material/medium/validation.py +1449 -0
  85. flexcompute/core/_migration/em/material/medium/validation_schema.py +58 -0
  86. flexcompute/core/_migration/em/material/nonlinear/__init__.py +1 -0
  87. flexcompute/core/_migration/em/material/nonlinear/schema/__init__.py +1 -0
  88. flexcompute/core/_migration/em/material/nonlinear/schema/nonlinear.py +312 -0
  89. flexcompute/core/_migration/em/material/nonlinear/validation.py +101 -0
  90. flexcompute/core/_migration/em/material/parameter_perturbation/__init__.py +1 -0
  91. flexcompute/core/_migration/em/material/parameter_perturbation/schema/__init__.py +1 -0
  92. flexcompute/core/_migration/em/material/parameter_perturbation/schema/parameter_perturbation.py +1684 -0
  93. flexcompute/core/_migration/em/material/parameter_perturbation/validation.py +114 -0
  94. flexcompute/core/_migration/em/material/time_modulation/__init__.py +1 -0
  95. flexcompute/core/_migration/em/material/time_modulation/schema/__init__.py +1 -0
  96. flexcompute/core/_migration/em/material/time_modulation/schema/time_modulation.py +306 -0
  97. flexcompute/core/_migration/em/material/time_modulation/validation.py +86 -0
  98. flexcompute/core/_migration/em/microwave/__init__.py +1 -0
  99. flexcompute/core/_migration/em/microwave/schema/__init__.py +1 -0
  100. flexcompute/core/_migration/em/microwave/schema/impedance_calculator.py +192 -0
  101. flexcompute/core/_migration/em/{schema/tidy3d/components/microwave → microwave/schema}/path_integrals/factory.py +8 -8
  102. flexcompute/core/_migration/em/{schema/tidy3d/components/microwave → microwave/schema}/path_integrals/integrals/auto.py +3 -3
  103. flexcompute/core/_migration/em/microwave/schema/path_integrals/integrals/base.py +244 -0
  104. flexcompute/core/_migration/em/microwave/schema/path_integrals/integrals/current.py +345 -0
  105. flexcompute/core/_migration/em/microwave/schema/path_integrals/integrals/voltage.py +106 -0
  106. flexcompute/core/_migration/em/microwave/schema/path_integrals/mode_plane_analyzer.py +447 -0
  107. flexcompute/core/_migration/em/microwave/schema/path_integrals/specs/base.py +274 -0
  108. flexcompute/core/_migration/em/microwave/schema/path_integrals/specs/current.py +435 -0
  109. flexcompute/core/_migration/em/microwave/schema/path_integrals/specs/impedance.py +170 -0
  110. flexcompute/core/_migration/em/microwave/schema/path_integrals/specs/voltage.py +236 -0
  111. flexcompute/core/_migration/em/microwave/schema/path_integrals/types.py +18 -0
  112. flexcompute/core/_migration/em/microwave/validation.py +57 -0
  113. flexcompute/core/_migration/em/mode/__init__.py +1 -0
  114. flexcompute/core/_migration/em/mode/spec/__init__.py +1 -0
  115. flexcompute/core/_migration/em/mode/spec/constants.py +59 -0
  116. flexcompute/core/_migration/em/mode/spec/schema.py +484 -0
  117. flexcompute/core/_migration/em/mode/spec/validation.py +227 -0
  118. flexcompute/core/_migration/em/monitor/__init__.py +1 -0
  119. flexcompute/core/_migration/em/monitor/schema.py +2854 -0
  120. flexcompute/core/_migration/em/monitor/validation.py +497 -0
  121. flexcompute/core/_migration/em/numerical/raw/baseband_source_time.py +333 -0
  122. flexcompute/core/_migration/em/numerical/raw/collar.py +616 -0
  123. flexcompute/core/_migration/em/numerical/raw/diffraction.py +3 -1
  124. flexcompute/core/_migration/em/numerical/raw/doping.py +57 -0
  125. flexcompute/core/_migration/em/numerical/raw/grid.py +99 -6
  126. flexcompute/core/_migration/em/numerical/raw/medium.py +179 -0
  127. flexcompute/core/_migration/em/numerical/raw/microwave.py +472 -2
  128. flexcompute/core/_migration/em/numerical/raw/mode.py +17 -0
  129. flexcompute/core/_migration/em/numerical/raw/power_loss.py +152 -0
  130. flexcompute/core/_migration/em/numerical/raw/projections.py +143 -0
  131. flexcompute/core/_migration/em/numerical/raw/shape_derivative.py +132 -0
  132. flexcompute/core/_migration/em/numerical/raw/source_derivative.py +62 -0
  133. flexcompute/core/_migration/em/numerical/raw/source_time.py +18 -0
  134. flexcompute/core/_migration/em/numerical/raw/spatial.py +465 -0
  135. flexcompute/core/_migration/em/numerical/raw/symmetry.py +36 -0
  136. flexcompute/core/_migration/em/numerical/raw/thin_lens.py +20 -0
  137. flexcompute/core/_migration/em/numerical/schema/field_data.py +65 -0
  138. flexcompute/core/_migration/em/numerical/schema/solver_diagnostics.py +1 -1
  139. flexcompute/core/_migration/em/scene/__init__.py +1 -0
  140. flexcompute/core/_migration/em/scene/schema.py +2039 -0
  141. flexcompute/core/_migration/em/scene/validation.py +157 -0
  142. flexcompute/core/_migration/em/schema/preprocess/cache.py +7 -1
  143. flexcompute/core/_migration/em/schema/preprocess/custom_medium.py +27 -26
  144. flexcompute/core/_migration/em/schema/preprocess/mode.py +2 -2
  145. flexcompute/core/_migration/em/schema/preprocess/simulation.py +60 -64
  146. flexcompute/core/_migration/em/schema/preprocess/subgrid.py +3 -2
  147. flexcompute/core/_migration/em/schema/preprocess/subpixel.py +2 -2
  148. flexcompute/core/_migration/em/schema/preprocess/utils.py +168 -1
  149. flexcompute/core/_migration/em/schema/tidy3d/__init__.py +3 -1081
  150. flexcompute/core/_migration/em/schema/tidy3d/__main__.py +1 -1
  151. flexcompute/core/_migration/em/schema/tidy3d/_optional_imports.py +215 -0
  152. flexcompute/core/_migration/em/schema/tidy3d/_testing/synthetic_monitor_data.py +227 -119
  153. flexcompute/core/_migration/em/schema/tidy3d/components/apodization.py +3 -105
  154. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/boxes.py +9 -159
  155. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/field_map.py +0 -39
  156. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/flux_monitor.py +6 -9
  157. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/functions.py +12 -286
  158. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/path_utils.py +0 -138
  159. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/sample_sets.py +186 -158
  160. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/utils.py +10 -134
  161. flexcompute/core/_migration/em/schema/tidy3d/components/base.py +96 -70
  162. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/data/monitor_data.py +2 -2
  163. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/data/sim_data.py +18 -19
  164. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/monitor.py +33 -16
  165. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/simulation.py +29 -97
  166. flexcompute/core/_migration/em/schema/tidy3d/components/base_sim/source.py +1 -1
  167. flexcompute/core/_migration/em/schema/tidy3d/components/bc_placement.py +20 -120
  168. flexcompute/core/_migration/em/schema/tidy3d/components/beam.py +45 -28
  169. flexcompute/core/_migration/em/schema/tidy3d/components/bound_ops.py +9 -0
  170. flexcompute/core/_migration/em/schema/tidy3d/components/boundary.py +79 -1774
  171. flexcompute/core/_migration/em/schema/tidy3d/components/{geometry/contour_conversion.py → contour_conversion.py} +7 -3
  172. flexcompute/core/_migration/em/schema/tidy3d/components/data/binary.py +156 -0
  173. flexcompute/core/_migration/em/schema/tidy3d/components/data/data_array/__init__.py +114 -0
  174. flexcompute/core/_migration/em/schema/tidy3d/components/data/dataset.py +274 -111
  175. flexcompute/core/_migration/em/schema/tidy3d/components/data/dataset_base.py +43 -0
  176. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/__init__.py +8 -0
  177. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/base.py +8 -16
  178. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/__init__.py +18 -2
  179. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_algebra.py +1 -1
  180. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/_em_io.py +1 -1
  181. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/data.py +0 -273
  182. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/diagnostic.py +506 -123
  183. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/dipole.py +10 -22
  184. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/point_cloud.py +19 -39
  185. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/field/surface.py +138 -5
  186. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/flux.py +0 -24
  187. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/data.py +2 -70
  188. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/overlap.py +0 -59
  189. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/mode/solver.py +19 -1
  190. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/base.py +21 -22
  191. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/diffraction.py +0 -77
  192. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/projection/directivity.py +5 -1
  193. flexcompute/core/_migration/em/schema/tidy3d/components/data/optical_generation.py +50 -24
  194. flexcompute/core/_migration/em/schema/tidy3d/components/data/plot_safe.py +8 -0
  195. flexcompute/core/_migration/em/schema/tidy3d/components/data/registry.py +8 -0
  196. flexcompute/core/_migration/em/schema/tidy3d/components/data/sim_data.py +346 -644
  197. flexcompute/core/_migration/em/schema/tidy3d/components/data/structure_loss.py +628 -0
  198. flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/base.py +18 -36
  199. flexcompute/core/_migration/em/schema/tidy3d/components/data/unstructured/triangular.py +1 -1
  200. flexcompute/core/_migration/em/schema/tidy3d/components/data/utils.py +5 -26
  201. flexcompute/core/_migration/em/schema/tidy3d/components/dispersion_fitter.py +43 -1049
  202. flexcompute/core/_migration/em/schema/tidy3d/components/docstrings.py +1 -1
  203. flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/dataset.py +63 -32
  204. flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/monitor_data.py +1 -1
  205. flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/sim_data.py +73 -18
  206. flexcompute/core/_migration/em/schema/tidy3d/components/eme/data/stage.py +75 -6
  207. flexcompute/core/_migration/em/schema/tidy3d/components/eme/grid.py +27 -948
  208. flexcompute/core/_migration/em/schema/tidy3d/components/eme/monitor.py +36 -21
  209. flexcompute/core/_migration/em/schema/tidy3d/components/eme/simulation.py +3 -2496
  210. flexcompute/core/_migration/em/schema/tidy3d/components/eme/sweep.py +19 -180
  211. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/common.py +1 -1
  212. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/projector.py +48 -19
  213. flexcompute/core/_migration/em/schema/tidy3d/components/frequency_extrapolation.py +6 -84
  214. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/__init__.py +9 -0
  215. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/__init__.py +10 -48
  216. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/abstract_primitives.py +5 -34
  217. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/array.py +9 -103
  218. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/box.py +3 -460
  219. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/clip_operation.py +1 -185
  220. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/constants.py +7 -1
  221. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/core.py +28 -146
  222. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/gds.py +8 -8
  223. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/geometry_group.py +6 -154
  224. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/operators.py +0 -27
  225. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/plotting.py +6 -10
  226. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/transformed.py +23 -25
  227. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/transforms.py +4 -4
  228. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/base/utils.py +1 -1
  229. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/mesh.py +69 -846
  230. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/polyslab.py +62 -1563
  231. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/primitives.py +8 -516
  232. flexcompute/core/_migration/em/schema/tidy3d/components/geometry/utils.py +11 -495
  233. flexcompute/core/_migration/em/schema/tidy3d/components/grid/corner_finder.py +8 -8
  234. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid.py +3 -12
  235. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/__init__.py +0 -135
  236. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/constants.py +27 -48
  237. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/auto.py +9 -5
  238. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/grid_1d/manual.py +11 -18
  239. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/refinement/model.py +6 -365
  240. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/generation.py +1 -1
  241. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/localization_helpers.py +2 -6
  242. flexcompute/core/_migration/em/schema/tidy3d/components/grid/grid_spec/spec/model.py +4 -4
  243. flexcompute/core/_migration/em/schema/tidy3d/components/grid/mesher.py +11 -5
  244. flexcompute/core/_migration/em/schema/tidy3d/components/grid/snapping.py +477 -0
  245. flexcompute/core/_migration/em/schema/tidy3d/components/lumped_element.py +43 -2295
  246. flexcompute/core/_migration/em/schema/tidy3d/components/material/multi_physics.py +9 -27
  247. flexcompute/core/_migration/em/schema/tidy3d/components/material/solver_types.py +10 -4
  248. flexcompute/core/_migration/em/schema/tidy3d/components/material/tcad/charge.py +350 -37
  249. flexcompute/core/_migration/em/schema/tidy3d/components/material/tcad/heat.py +43 -295
  250. flexcompute/core/_migration/em/schema/tidy3d/components/material/tensor.py +82 -0
  251. flexcompute/core/_migration/em/schema/tidy3d/components/medium/__init__.py +38 -2
  252. flexcompute/core/_migration/em/schema/tidy3d/components/medium/_rebuild.py +2 -50
  253. flexcompute/core/_migration/em/schema/tidy3d/components/medium/abstract_custom.py +6 -458
  254. flexcompute/core/_migration/em/schema/tidy3d/components/medium/anisotropic.py +10 -667
  255. flexcompute/core/_migration/em/schema/tidy3d/components/medium/base.py +35 -988
  256. flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/anisotropic.py +8 -274
  257. flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/dispersive.py +17 -1502
  258. flexcompute/core/_migration/em/schema/tidy3d/components/medium/custom/isotropic.py +8 -1146
  259. flexcompute/core/_migration/em/schema/tidy3d/components/medium/debye.py +6 -219
  260. flexcompute/core/_migration/em/schema/tidy3d/components/medium/drude.py +6 -185
  261. flexcompute/core/_migration/em/schema/tidy3d/components/medium/isotropic.py +17 -436
  262. flexcompute/core/_migration/em/schema/tidy3d/components/medium/lorentz.py +6 -314
  263. flexcompute/core/_migration/em/schema/tidy3d/components/medium/lossy_metal.py +8 -272
  264. flexcompute/core/_migration/em/schema/tidy3d/components/medium/medium_types.py +19 -60
  265. flexcompute/core/_migration/em/schema/tidy3d/components/medium/perturbation.py +17 -478
  266. flexcompute/core/_migration/em/schema/tidy3d/components/medium/pole_residue.py +8 -824
  267. flexcompute/core/_migration/em/schema/tidy3d/components/medium/protected.py +784 -0
  268. flexcompute/core/_migration/em/schema/tidy3d/components/medium/roughness.py +21 -258
  269. flexcompute/core/_migration/em/schema/tidy3d/components/medium/sellmeier.py +6 -271
  270. flexcompute/core/_migration/em/schema/tidy3d/components/medium/two_d.py +8 -465
  271. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/dataset.py +6 -6
  272. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/data/monitor_data.py +3 -3
  273. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/impedance_calculator.py +10 -202
  274. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/mode_spec.py +6 -6
  275. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/base.py +15 -242
  276. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/current.py +10 -332
  277. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/integrals/voltage.py +8 -96
  278. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/mode_plane_analyzer.py +6 -442
  279. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/base.py +10 -271
  280. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/current.py +10 -431
  281. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/impedance.py +12 -186
  282. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/specs/voltage.py +8 -232
  283. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/path_integrals/types.py +8 -15
  284. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/source.py +34 -0
  285. flexcompute/core/_migration/em/schema/tidy3d/components/microwave/time.py +304 -68
  286. flexcompute/core/_migration/em/schema/tidy3d/components/mode/data/sim_data.py +208 -5
  287. flexcompute/core/_migration/em/schema/tidy3d/components/mode/geometry.py +1 -1
  288. flexcompute/core/_migration/em/schema/tidy3d/components/mode/mode_solver.py +3 -3308
  289. flexcompute/core/_migration/em/schema/tidy3d/components/mode/simulation.py +3 -721
  290. flexcompute/core/_migration/em/schema/tidy3d/components/mode/solver.py +16 -9
  291. flexcompute/core/_migration/em/schema/tidy3d/components/mode/validation.py +82 -48
  292. flexcompute/core/_migration/em/schema/tidy3d/components/mode_spec.py +81 -640
  293. flexcompute/core/_migration/em/schema/tidy3d/components/monitor.py +107 -3114
  294. flexcompute/core/_migration/em/schema/tidy3d/components/nonlinear.py +25 -422
  295. flexcompute/core/_migration/em/schema/tidy3d/components/parameter_perturbation.py +47 -1795
  296. flexcompute/core/_migration/em/schema/tidy3d/components/run_time_spec.py +1 -1
  297. flexcompute/core/_migration/em/schema/tidy3d/components/scene.py +3 -2139
  298. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/__init__.py +11 -11
  299. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/adjoint.py +5 -215
  300. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/constants.py +57 -30
  301. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/model.py +3 -1330
  302. flexcompute/core/_migration/em/schema/tidy3d/components/source/base.py +6 -238
  303. flexcompute/core/_migration/em/schema/tidy3d/components/source/current.py +15 -422
  304. flexcompute/core/_migration/em/schema/tidy3d/components/source/field.py +47 -1650
  305. flexcompute/core/_migration/em/schema/tidy3d/components/source/frame.py +9 -23
  306. flexcompute/core/_migration/em/schema/tidy3d/components/source/freq_range.py +7 -228
  307. flexcompute/core/_migration/em/schema/tidy3d/components/source/time.py +29 -682
  308. flexcompute/core/_migration/em/schema/tidy3d/components/source/utils.py +8 -33
  309. flexcompute/core/_migration/em/schema/tidy3d/components/spice/analysis/ac.py +5 -97
  310. flexcompute/core/_migration/em/schema/tidy3d/components/spice/analysis/dc.py +13 -292
  311. flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/ac.py +3 -59
  312. flexcompute/core/_migration/em/schema/tidy3d/components/spice/sources/dc.py +32 -87
  313. flexcompute/core/_migration/em/schema/tidy3d/components/spice/types.py +2 -2
  314. flexcompute/core/_migration/em/schema/tidy3d/components/structure.py +17 -1394
  315. flexcompute/core/_migration/em/schema/tidy3d/components/subpixel_spec.py +4 -4
  316. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/analysis/heat_simulation_type.py +6 -172
  317. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/bandgap.py +34 -0
  318. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/charge.py +36 -7
  319. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/boundary/heat.py +14 -69
  320. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/abstract.py +2 -2
  321. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/charge.py +142 -37
  322. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/monitor_data/heat.py +1 -1
  323. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/sim_data.py +70 -30
  324. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/data/types.py +2 -0
  325. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/doping.py +18 -429
  326. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/doping_utils.py +6 -1
  327. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/generation_recombination.py +50 -480
  328. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/grid.py +33 -679
  329. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/ionization.py +21 -0
  330. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/mesher.py +3 -3
  331. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/mobility.py +35 -504
  332. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/abstract.py +4 -4
  333. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/charge.py +41 -11
  334. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/heat.py +1 -1
  335. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/monitors/mesh.py +2 -30
  336. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/simulation/heat.py +2 -54
  337. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/simulation/heat_charge.py +39 -3774
  338. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/abstract.py +10 -41
  339. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/source/heat.py +2 -47
  340. flexcompute/core/_migration/em/schema/tidy3d/components/tcad/types.py +4 -1
  341. flexcompute/core/_migration/em/schema/tidy3d/components/thin_lens.py +19 -149
  342. flexcompute/core/_migration/em/schema/tidy3d/components/time.py +2 -2
  343. flexcompute/core/_migration/em/schema/tidy3d/components/time_modulation.py +23 -328
  344. flexcompute/core/_migration/em/schema/tidy3d/components/transformation.py +23 -221
  345. flexcompute/core/_migration/em/schema/tidy3d/components/{geometry/utils_2d.py → two_d_materials.py} +8 -5
  346. flexcompute/core/_migration/em/schema/tidy3d/components/types/monitor.py +5 -1
  347. flexcompute/core/_migration/em/schema/tidy3d/components/types/monitor_data.py +6 -0
  348. flexcompute/core/_migration/em/schema/tidy3d/components/types/simulation.py +5 -5
  349. flexcompute/core/_migration/em/schema/tidy3d/components/types/third_party.py +1 -1
  350. flexcompute/core/_migration/em/schema/tidy3d/components/types/time.py +2 -0
  351. flexcompute/core/_migration/em/schema/tidy3d/components/validators.py +15 -121
  352. flexcompute/core/_migration/em/schema/tidy3d/components/viz/__init__.py +1 -14
  353. flexcompute/core/_migration/em/schema/tidy3d/components/viz/axes_utils.py +8 -4
  354. flexcompute/core/_migration/em/schema/tidy3d/components/viz/flex_style.py +14 -1
  355. flexcompute/core/_migration/em/schema/tidy3d/components/viz/plot_params.py +14 -14
  356. flexcompute/core/_migration/em/schema/tidy3d/components/viz/plot_sim_3d.py +2 -1
  357. flexcompute/core/_migration/em/schema/tidy3d/components/viz/visualization_spec.py +4 -4
  358. flexcompute/core/_migration/em/schema/tidy3d/components/workflow.py +10 -14
  359. flexcompute/core/_migration/em/schema/tidy3d/constants.py +26 -51
  360. flexcompute/core/_migration/em/schema/tidy3d/exceptions.py +8 -47
  361. flexcompute/core/_migration/em/schema/tidy3d/material_library/material_library.py +5 -5
  362. flexcompute/core/_migration/em/schema/tidy3d/material_library/material_reference.py +11 -5
  363. flexcompute/core/_migration/em/schema/tidy3d/material_library/parametric_materials.py +8 -8
  364. flexcompute/core/_migration/em/schema/tidy3d/material_library/util.py +2 -3
  365. flexcompute/core/_migration/em/schema/tidy3d/packaging.py +11 -243
  366. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/metrics.py +3 -3
  367. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/variables.py +1 -1
  368. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/__init__.py +1 -9
  369. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/design.py +12 -426
  370. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/initialization.py +16 -138
  371. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/optimizer.py +9 -9
  372. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/penalty.py +10 -112
  373. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/polyslab_set.py +5 -13
  374. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/region.py +10 -394
  375. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/result.py +16 -14
  376. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/transformation.py +10 -98
  377. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/utils.py +12 -7
  378. flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/mode_solver.py +1 -1
  379. flexcompute/core/_migration/em/schema/tidy3d/updater.py +1 -1
  380. flexcompute/core/_migration/em/schema/tidy3d/version.py +1 -1
  381. flexcompute/core/_migration/em/source/__init__.py +1 -0
  382. flexcompute/core/_migration/em/source/schema/__init__.py +1 -0
  383. flexcompute/core/_migration/em/source/schema/base.py +147 -0
  384. flexcompute/core/_migration/em/source/schema/current.py +240 -0
  385. flexcompute/core/_migration/em/source/schema/field.py +1073 -0
  386. flexcompute/core/_migration/em/source/schema/frame.py +25 -0
  387. flexcompute/core/_migration/em/source/schema/freq_range.py +230 -0
  388. flexcompute/core/_migration/em/source/schema/time.py +658 -0
  389. flexcompute/core/_migration/em/source/schema/utils.py +38 -0
  390. flexcompute/core/_migration/em/source/validation.py +279 -0
  391. flexcompute/core/_migration/em/structure/__init__.py +1 -0
  392. flexcompute/core/_migration/em/structure/schema.py +1167 -0
  393. flexcompute/core/_migration/em/structure/validation.py +85 -0
  394. flexcompute/core/_migration/em/thin_lens/__init__.py +1 -0
  395. flexcompute/core/_migration/em/thin_lens/schema/__init__.py +1 -0
  396. flexcompute/core/_migration/em/thin_lens/schema/thin_lens.py +100 -0
  397. flexcompute/core/_migration/em/thin_lens/validation.py +110 -0
  398. flexcompute/core/_migration/em/transformation/__init__.py +1 -0
  399. flexcompute/core/_migration/em/transformation/schema.py +205 -0
  400. flexcompute/core/_migration/em/transformation/validation.py +45 -0
  401. flexcompute/core/_migration/extensions/__init__.py +1 -0
  402. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/functions.py +3 -89
  403. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/invdes/filters.py +16 -16
  404. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/invdes/parametrizations.py +74 -25
  405. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/invdes/penalties.py +8 -8
  406. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/invdes/projections.py +51 -77
  407. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/invdes/symmetries.py +4 -0
  408. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/optimizers.py +3 -3
  409. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/primitives/interpolate.py +1 -1
  410. flexcompute/core/_migration/extensions/autograd/primitives/misc.py +12 -0
  411. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/types.py +1 -0
  412. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/utilities.py +2 -52
  413. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/design/design.py +18 -18
  414. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/design/method.py +26 -6
  415. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/design/parameter.py +2 -2
  416. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/design/result.py +10 -10
  417. flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/dispersion/fit.py +4 -6
  418. flexcompute/core/_migration/solver/__init__.py +1 -0
  419. flexcompute/core/_migration/solver/component_modeler/__init__.py +1 -0
  420. flexcompute/core/_migration/solver/component_modeler/schema.py +36 -0
  421. flexcompute/core/_migration/solver/eme/__init__.py +1 -0
  422. flexcompute/core/_migration/solver/eme/schema/__init__.py +1 -0
  423. flexcompute/core/_migration/solver/eme/schema/simulation.py +1917 -0
  424. flexcompute/core/_migration/solver/eme/validation.py +694 -0
  425. flexcompute/core/_migration/solver/fast_heat/__init__.py +1 -0
  426. flexcompute/core/_migration/solver/fast_heat/schema/__init__.py +1 -0
  427. flexcompute/core/_migration/solver/fast_heat/schema/fast_heat.py +171 -0
  428. flexcompute/core/_migration/solver/fast_heat/schema/grid.py +213 -0
  429. flexcompute/core/_migration/solver/fast_heat/schema/monitor.py +36 -0
  430. flexcompute/core/_migration/solver/fast_heat/validation/__init__.py +52 -0
  431. flexcompute/core/_migration/solver/fast_heat/validation/fast_heat.py +576 -0
  432. flexcompute/core/_migration/solver/fast_heat/validation/grid.py +59 -0
  433. flexcompute/core/_migration/solver/fast_heat/validation/solve.py +173 -0
  434. flexcompute/core/_migration/solver/fdtd/__init__.py +1 -0
  435. flexcompute/core/_migration/solver/fdtd/conversion/__init__.py +2 -0
  436. flexcompute/core/_migration/solver/fdtd/conversion/boundaries.py +24 -0
  437. flexcompute/core/_migration/solver/fdtd/schema/__init__.py +1 -0
  438. flexcompute/core/_migration/solver/fdtd/schema/adjoint.py +105 -0
  439. flexcompute/core/_migration/solver/fdtd/schema/boundaries.py +228 -0
  440. flexcompute/core/_migration/solver/fdtd/schema/constants.py +31 -0
  441. flexcompute/core/_migration/{em/schema/tidy3d/components/simulation → solver/fdtd/schema}/construction.py +3 -3
  442. flexcompute/core/_migration/{em/schema/tidy3d/components/simulation → solver/fdtd/schema}/export.py +17 -18
  443. flexcompute/core/_migration/{em/schema/tidy3d/components/simulation → solver/fdtd/schema}/grid.py +185 -191
  444. flexcompute/core/_migration/solver/fdtd/schema/materials.py +413 -0
  445. flexcompute/core/_migration/{em/schema/tidy3d/components/simulation → solver/fdtd/schema}/mode_integration.py +86 -217
  446. flexcompute/core/_migration/solver/fdtd/schema/model.py +1034 -0
  447. flexcompute/core/_migration/solver/fdtd/schema/monitors.py +358 -0
  448. flexcompute/core/_migration/solver/fdtd/schema/rf_integration.py +49 -0
  449. flexcompute/core/_migration/{em/schema/tidy3d/components/simulation → solver/fdtd/schema}/runtime.py +2 -97
  450. flexcompute/core/_migration/solver/fdtd/schema/sources.py +238 -0
  451. flexcompute/core/_migration/solver/fdtd/schema/tfsf.py +335 -0
  452. flexcompute/core/_migration/solver/fdtd/schema/validation_schema.py +28 -0
  453. flexcompute/core/_migration/{em/schema/tidy3d/components/simulation → solver/fdtd/schema}/visualization.py +3 -3
  454. flexcompute/core/_migration/{em/schema/tidy3d/components/simulation → solver/fdtd/schema}/yee.py +66 -40
  455. flexcompute/core/_migration/solver/fdtd/validation/__init__.py +158 -0
  456. flexcompute/core/_migration/solver/fdtd/validation/boundaries.py +556 -0
  457. flexcompute/core/_migration/solver/fdtd/validation/grid.py +136 -0
  458. flexcompute/core/_migration/solver/fdtd/validation/materials.py +118 -0
  459. flexcompute/core/_migration/solver/fdtd/validation/mode_integration.py +243 -0
  460. flexcompute/core/_migration/solver/fdtd/validation/model.py +511 -0
  461. flexcompute/core/_migration/solver/fdtd/validation/monitors.py +695 -0
  462. flexcompute/core/_migration/solver/fdtd/validation/rf_integration.py +71 -0
  463. flexcompute/core/_migration/solver/fdtd/validation/runtime.py +107 -0
  464. flexcompute/core/_migration/solver/fdtd/validation/sources.py +370 -0
  465. flexcompute/core/_migration/solver/fdtd/validation/tfsf.py +687 -0
  466. flexcompute/core/_migration/solver/fdtd/validation/yee.py +80 -0
  467. flexcompute/core/_migration/solver/heat_charge/__init__.py +1 -0
  468. flexcompute/core/_migration/solver/heat_charge/schema/__init__.py +1 -0
  469. flexcompute/core/_migration/solver/heat_charge/schema/ac.py +84 -0
  470. flexcompute/core/_migration/solver/heat_charge/schema/dc.py +196 -0
  471. flexcompute/core/_migration/solver/heat_charge/schema/heat.py +43 -0
  472. flexcompute/core/_migration/solver/heat_charge/schema/heat_charge.py +2374 -0
  473. flexcompute/core/_migration/solver/heat_charge/schema/heat_simulation_type.py +103 -0
  474. flexcompute/core/_migration/solver/heat_charge/validation/__init__.py +115 -0
  475. flexcompute/core/_migration/solver/heat_charge/validation/ac.py +41 -0
  476. flexcompute/core/_migration/solver/heat_charge/validation/dc.py +71 -0
  477. flexcompute/core/_migration/solver/heat_charge/validation/heat_charge.py +3259 -0
  478. flexcompute/core/_migration/solver/heat_charge/validation/heat_simulation_type.py +114 -0
  479. flexcompute/core/_migration/solver/mode/__init__.py +1 -0
  480. flexcompute/core/_migration/solver/mode/schema/__init__.py +1 -0
  481. flexcompute/core/_migration/solver/mode/schema/mode_solver.py +3194 -0
  482. flexcompute/core/_migration/solver/mode/schema/simulation.py +704 -0
  483. flexcompute/core/_migration/solver/mode/validation/__init__.py +43 -0
  484. flexcompute/core/_migration/solver/mode/validation/mode_solver.py +254 -0
  485. flexcompute/core/_migration/solver/mode/validation/simulation.py +132 -0
  486. flexcompute/core/_migration/spice/__init__.py +1 -0
  487. flexcompute/core/_migration/spice/schema/__init__.py +1 -0
  488. flexcompute/core/_migration/spice/schema/sources.py +91 -0
  489. flexcompute/core/_migration/spice/validation.py +84 -0
  490. flexcompute/core/_migration/tcad/__init__.py +1 -0
  491. flexcompute/core/_migration/tcad/schema/__init__.py +1 -0
  492. flexcompute/core/_migration/tcad/schema/boundary.py +67 -0
  493. flexcompute/core/_migration/tcad/schema/doping.py +389 -0
  494. flexcompute/core/_migration/tcad/schema/generation_recombination.py +508 -0
  495. flexcompute/core/_migration/tcad/schema/grid.py +551 -0
  496. flexcompute/core/_migration/tcad/schema/heat_medium.py +570 -0
  497. flexcompute/core/_migration/tcad/schema/ionization.py +314 -0
  498. flexcompute/core/_migration/tcad/schema/mobility.py +1029 -0
  499. flexcompute/core/_migration/tcad/schema/monitor.py +23 -0
  500. flexcompute/core/_migration/tcad/schema/source.py +65 -0
  501. flexcompute/core/_migration/tcad/schema/validation_schema.py +55 -0
  502. flexcompute/core/_migration/tcad/validation.py +748 -0
  503. flexcompute/core/{_migration/em/schema/tidy3d/log.py → log.py} +90 -63
  504. flexcompute/core/validation/__init__.py +27 -0
  505. flexcompute/core/validation/errors.py +60 -0
  506. flexcompute/core/validation/report.py +69 -0
  507. flexcompute/core/validation/simulation.py +69 -0
  508. flexcompute/data/__init__.py +4 -0
  509. flexcompute/data/_autograd/__init__.py +6 -0
  510. flexcompute/data/_autograd/boxes.py +162 -0
  511. flexcompute/data/_autograd/functions.py +289 -0
  512. flexcompute/data/_autograd/utils.py +67 -0
  513. flexcompute/{core/_migration/em/schema/tidy3d/components/geometry/bound_ops.py → data/_bounds.py} +6 -3
  514. flexcompute/data/_compat.py +6 -0
  515. flexcompute/data/_exceptions.py +48 -0
  516. flexcompute/data/_plot_safe.py +37 -0
  517. flexcompute/data/_registry.py +12 -0
  518. flexcompute/data/_typing.py +11 -0
  519. flexcompute/data/_units.py +56 -0
  520. flexcompute/data/arrays/__init__.py +241 -0
  521. flexcompute/data/arrays/_autograd.py +257 -0
  522. flexcompute/data/arrays/_constants.py +60 -0
  523. flexcompute/data/arrays/_io.py +92 -0
  524. flexcompute/data/arrays/_plot.py +47 -0
  525. flexcompute/data/arrays/_traced.py +46 -0
  526. flexcompute/data/arrays/abstract_spatial.py +392 -0
  527. flexcompute/data/arrays/base.py +340 -0
  528. flexcompute/data/arrays/eme.py +227 -0
  529. flexcompute/data/arrays/microwave.py +429 -0
  530. flexcompute/data/arrays/monitor.py +281 -0
  531. flexcompute/data/arrays/registry.py +194 -0
  532. flexcompute/data/arrays/spatial.py +186 -0
  533. flexcompute/data/arrays/spectral.py +168 -0
  534. flexcompute/data/arrays/tcad.py +155 -0
  535. flexcompute/data/arrays/unstructured.py +275 -0
  536. flexcompute/geometry/__init__.py +7 -0
  537. flexcompute/geometry/_base.py +237 -0
  538. flexcompute/geometry/_kernels/__init__.py +6 -0
  539. flexcompute/geometry/_kernels/axes.py +12 -0
  540. flexcompute/geometry/_kernels/meshes.py +20 -0
  541. flexcompute/geometry/_kernels/polygons.py +322 -0
  542. flexcompute/geometry/_traced.py +19 -0
  543. flexcompute/geometry/base.py +50 -0
  544. flexcompute/geometry/composites.py +203 -0
  545. flexcompute/geometry/mesh.py +54 -0
  546. flexcompute/geometry/polyslab.py +160 -0
  547. flexcompute/geometry/primitives.py +75 -0
  548. flexcompute/geometry/py.typed +0 -0
  549. flexcompute/geometry/schema.py +187 -0
  550. flexcompute/geometry/validation/__init__.py +75 -0
  551. flexcompute/geometry/validation/composites.py +263 -0
  552. flexcompute/geometry/validation/cylinder.py +37 -0
  553. flexcompute/geometry/validation/mesh.py +94 -0
  554. flexcompute/geometry/validation/polyslab.py +343 -0
  555. flexcompute/geometry/validation/primitives.py +50 -0
  556. {flexcompute_core-0.0.1.dev2.dist-info → flexcompute_core-0.0.1.dev3.dist-info}/METADATA +19 -5
  557. flexcompute_core-0.0.1.dev3.dist-info/RECORD +712 -0
  558. flexcompute/core/_migration/em/numerical/README.md +0 -109
  559. flexcompute/core/_migration/em/schema/tidy3d/README.md +0 -59
  560. flexcompute/core/_migration/em/schema/tidy3d/components/README.md +0 -233
  561. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/derivative_utils.py +0 -1635
  562. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/parallel_adjoint_bases.py +0 -348
  563. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/point_consumption.py +0 -410
  564. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/snapping.py +0 -180
  565. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/source_factory.py +0 -521
  566. flexcompute/core/_migration/em/schema/tidy3d/components/autograd/spacing.py +0 -352
  567. flexcompute/core/_migration/em/schema/tidy3d/components/data/README.md +0 -158
  568. flexcompute/core/_migration/em/schema/tidy3d/components/data/data_array.py +0 -2750
  569. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/README.md +0 -13
  570. flexcompute/core/_migration/em/schema/tidy3d/components/data/monitor_data/_utils.py +0 -70
  571. flexcompute/core/_migration/em/schema/tidy3d/components/field_projection/README.md +0 -248
  572. flexcompute/core/_migration/em/schema/tidy3d/components/frequencies.py +0 -564
  573. flexcompute/core/_migration/em/schema/tidy3d/components/material/README.md +0 -3
  574. flexcompute/core/_migration/em/schema/tidy3d/components/medium/README.md +0 -16
  575. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/README.md +0 -67
  576. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/boundaries.py +0 -789
  577. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/materials.py +0 -648
  578. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/monitors.py +0 -919
  579. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/rf_integration.py +0 -123
  580. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/sources.py +0 -568
  581. flexcompute/core/_migration/em/schema/tidy3d/components/simulation/tfsf.py +0 -998
  582. flexcompute/core/_migration/em/schema/tidy3d/components/source/adjoint_helpers.py +0 -272
  583. flexcompute/core/_migration/em/schema/tidy3d/components/types/workflow.py +0 -22
  584. flexcompute/core/_migration/em/schema/tidy3d/config/README.md +0 -96
  585. flexcompute/core/_migration/em/schema/tidy3d/config/__init__.py +0 -183
  586. flexcompute/core/_migration/em/schema/tidy3d/config/deprecations.py +0 -95
  587. flexcompute/core/_migration/em/schema/tidy3d/config/loader.py +0 -852
  588. flexcompute/core/_migration/em/schema/tidy3d/config/manager.py +0 -617
  589. flexcompute/core/_migration/em/schema/tidy3d/config/migrations.py +0 -290
  590. flexcompute/core/_migration/em/schema/tidy3d/config/profiles.py +0 -64
  591. flexcompute/core/_migration/em/schema/tidy3d/config/registry.py +0 -83
  592. flexcompute/core/_migration/em/schema/tidy3d/config/schema_utils.py +0 -27
  593. flexcompute/core/_migration/em/schema/tidy3d/config/sections.py +0 -739
  594. flexcompute/core/_migration/em/schema/tidy3d/config/serializer.py +0 -145
  595. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/README.md +0 -302
  596. flexcompute/core/_migration/em/schema/tidy3d/plugins/autograd/primitives/misc.py +0 -139
  597. flexcompute/core/_migration/em/schema/tidy3d/plugins/design/README.md +0 -148
  598. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/README.md +0 -16
  599. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/__init__.py +0 -29
  600. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/constants.py +0 -9
  601. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/data.py +0 -108
  602. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/data_array.py +0 -66
  603. flexcompute/core/_migration/em/schema/tidy3d/plugins/dipole_emission/study.py +0 -890
  604. flexcompute/core/_migration/em/schema/tidy3d/plugins/expressions/README.md +0 -308
  605. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/README.md +0 -515
  606. flexcompute/core/_migration/em/schema/tidy3d/plugins/invdes/validators.py +0 -80
  607. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/README.md +0 -10
  608. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/__init__.py +0 -18
  609. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/README.md +0 -43
  610. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/__init__.py +0 -22
  611. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/defaults.py +0 -9
  612. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/drc.py +0 -233
  613. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/drc/results.py +0 -503
  614. flexcompute/core/_migration/em/schema/tidy3d/plugins/klayout/util.py +0 -13
  615. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/__init__.py +0 -82
  616. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/array_factor.py +0 -1350
  617. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/auto_path_integrals.py +0 -11
  618. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/custom_path_integrals.py +0 -35
  619. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/impedance_calculator.py +0 -15
  620. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/lobe_measurer.py +0 -356
  621. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/models/__init__.py +0 -10
  622. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/models/coupled_microstrip.py +0 -105
  623. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/models/microstrip.py +0 -152
  624. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/path_integrals.py +0 -23
  625. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/rf_material_library.py +0 -1380
  626. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/rf_material_reference.py +0 -148
  627. flexcompute/core/_migration/em/schema/tidy3d/plugins/microwave/viz.py +0 -39
  628. flexcompute/core/_migration/em/schema/tidy3d/plugins/mode/README.md +0 -1
  629. flexcompute/core/_migration/em/schema/tidy3d/plugins/polyslab/__init__.py +0 -7
  630. flexcompute/core/_migration/em/schema/tidy3d/plugins/polyslab/polyslab.py +0 -77
  631. flexcompute/core/_migration/em/schema/tidy3d/plugins/pytorch/README.md +0 -54
  632. flexcompute/core/_migration/em/schema/tidy3d/plugins/pytorch/__init__.py +0 -5
  633. flexcompute/core/_migration/em/schema/tidy3d/plugins/pytorch/wrapper.py +0 -33
  634. flexcompute/core/_migration/em/schema/tidy3d/plugins/resonance/__init__.py +0 -7
  635. flexcompute/core/_migration/em/schema/tidy3d/plugins/resonance/resonance.py +0 -450
  636. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/__init__.py +0 -92
  637. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/antenna.py +0 -133
  638. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/modal.py +0 -120
  639. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/analysis/terminal.py +0 -465
  640. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/base.py +0 -418
  641. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/modal.py +0 -401
  642. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/terminal.py +0 -2560
  643. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/types.py +0 -6
  644. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/component_modelers/viz.py +0 -111
  645. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/base.py +0 -82
  646. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/data_array.py +0 -83
  647. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/modal.py +0 -54
  648. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/terminal.py +0 -753
  649. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/data/types.py +0 -10
  650. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/base.py +0 -28
  651. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/base_lumped.py +0 -267
  652. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/base_terminal.py +0 -66
  653. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/coaxial_lumped.py +0 -467
  654. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/modal.py +0 -274
  655. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/rectangular_lumped.py +0 -629
  656. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/tilted_lumped.py +0 -706
  657. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/types.py +0 -30
  658. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/ports/wave.py +0 -1631
  659. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/run.py +0 -176
  660. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/types.py +0 -20
  661. flexcompute/core/_migration/em/schema/tidy3d/plugins/smatrix/utils.py +0 -469
  662. flexcompute/core/_migration/em/schema/tidy3d/plugins/waveguide/__init__.py +0 -7
  663. flexcompute/core/_migration/em/schema/tidy3d/plugins/waveguide/rectangular_dielectric.py +0 -1181
  664. flexcompute/core/_migration/em/schema/tidy3d/rf.py +0 -269
  665. flexcompute/core/_migration/em/validation/__init__.py +0 -5
  666. flexcompute/core/_migration/em/validation/report.py +0 -28
  667. flexcompute_core-0.0.1.dev2.dist-info/RECORD +0 -530
  668. /flexcompute/core/_migration/em/{schema/tidy3d/components/grid → grid/schema}/grid_spec/refinement/edges.py +0 -0
  669. /flexcompute/core/_migration/em/{schema/tidy3d/components/grid → grid/schema}/grid_spec/refinement/gaps.py +0 -0
  670. /flexcompute/core/_migration/em/{schema/tidy3d/components/grid → grid/schema}/grid_spec/refinement/inplane.py +0 -0
  671. /flexcompute/core/_migration/em/{schema/tidy3d/plugins/smatrix/analysis → microwave/schema/path_integrals}/__init__.py +0 -0
  672. /flexcompute/core/_migration/em/{schema/tidy3d/plugins/smatrix/component_modelers → microwave/schema/path_integrals/integrals}/__init__.py +0 -0
  673. /flexcompute/core/_migration/em/{schema/tidy3d/plugins/smatrix/data → microwave/schema/path_integrals/specs}/__init__.py +0 -0
  674. /flexcompute/core/_migration/em/{schema/tidy3d/components/microwave → microwave/schema}/path_integrals/viz.py +0 -0
  675. /flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/__init__.py +0 -0
  676. /flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/constants.py +0 -0
  677. /flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/differential_operators.py +0 -0
  678. /flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/invdes/__init__.py +0 -0
  679. /flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/invdes/misc.py +0 -0
  680. /flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/autograd/primitives/__init__.py +0 -0
  681. /flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/design/__init__.py +0 -0
  682. /flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/dispersion/__init__.py +0 -0
  683. /flexcompute/core/_migration/{em/schema/tidy3d/plugins → extensions}/dispersion/fit_fast.py +0 -0
  684. /flexcompute/{core/_migration/em/schema/tidy3d/plugins/smatrix/ports/__init__.py → data/py.typed} +0 -0
  685. {flexcompute_core-0.0.1.dev2.dist-info → flexcompute_core-0.0.1.dev3.dist-info}/WHEEL +0 -0
@@ -0,0 +1 @@
1
+ """Apodization validation scope."""
@@ -0,0 +1,88 @@
1
+ """Defines specification for apodization."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ import numpy as np
8
+ from pydantic import Field, NonNegativeFloat, PositiveFloat
9
+
10
+ from flexcompute.core._migration.em.schema.tidy3d.components.base import Tidy3dBaseModel
11
+ from flexcompute.core._migration.em.schema.tidy3d.components.viz import add_ax_if_none
12
+ from flexcompute.core._migration.em.schema.tidy3d.constants import SECOND
13
+
14
+ if TYPE_CHECKING:
15
+ from flexcompute.core._migration.em.schema.tidy3d.components.types import ArrayFloat1D, Ax
16
+
17
+
18
+ class ApodizationSpec(Tidy3dBaseModel):
19
+ """Stores specifications for the apodizaton of frequency-domain monitors.
20
+
21
+ Example
22
+ -------
23
+ >>> apod_spec = ApodizationSpec(start=1, end=2, width=0.2)
24
+
25
+
26
+ .. image:: ../../_static/img/apodization.png
27
+ :width: 80%
28
+ :align: center
29
+
30
+ """
31
+
32
+ start: NonNegativeFloat | None = Field(
33
+ default=None,
34
+ title="Start Interval",
35
+ description="Defines the time at which the start apodization ends.",
36
+ json_schema_extra={"units": SECOND},
37
+ )
38
+
39
+ end: NonNegativeFloat | None = Field(
40
+ default=None,
41
+ title="End Interval",
42
+ description="Defines the time at which the end apodization begins.",
43
+ json_schema_extra={"units": SECOND},
44
+ )
45
+
46
+ width: PositiveFloat | None = Field(
47
+ default=None,
48
+ title="Apodization Width",
49
+ description="Characteristic decay length of the apodization function, i.e., the width of the ramping up of the scaling function from 0 to 1.",
50
+ json_schema_extra={"units": SECOND},
51
+ )
52
+
53
+ @add_ax_if_none
54
+ def plot(self, times: ArrayFloat1D, ax: Ax = None) -> Ax:
55
+ """Plot the apodization function.
56
+
57
+ Parameters
58
+ ----------
59
+ times : np.ndarray
60
+ Array of times (seconds) to plot source at.
61
+ To see source time amplitude for a specific :class:`.Simulation`,
62
+ pass ``simulation.tmesh``.
63
+ ax : matplotlib.axes._subplots.Axes = None
64
+ Matplotlib axes to plot on, if not specified, one is created.
65
+
66
+ Returns
67
+ -------
68
+ matplotlib.axes._subplots.Axes
69
+ The supplied or created matplotlib axes.
70
+ """
71
+ times = np.array(times)
72
+ amp = np.ones_like(times)
73
+
74
+ if self.start is not None:
75
+ start_ind = times < self.start
76
+ time_scaled = (times[start_ind] - self.start) / self.width
77
+ amp[start_ind] *= np.exp(-0.5 * time_scaled**2)
78
+
79
+ if self.end is not None:
80
+ end_ind = times > self.end
81
+ time_scaled = (times[end_ind] - self.end) / self.width
82
+ amp[end_ind] *= np.exp(-0.5 * time_scaled**2)
83
+
84
+ ax.plot(times, amp, color="blueviolet")
85
+ ax.set_xlabel("time (s)")
86
+ ax.set_title("apodization function")
87
+ ax.set_aspect("auto")
88
+ return ax
@@ -0,0 +1,54 @@
1
+ """Pure rules for apodization validation."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from flexcompute.core.validation import ValidationDiagnostic, ValidationReport, error
6
+
7
+
8
+ def validate_end_order(start: float | None, end: float | None) -> tuple[ValidationDiagnostic, ...]:
9
+ """Require the end apodization to begin no earlier than the start apodization ends."""
10
+ if start is not None and end is not None and end < start:
11
+ return (
12
+ error(
13
+ "em.apodization.end_greater_than_start",
14
+ "End apodization begins before start apodization ends.",
15
+ ("end",),
16
+ ),
17
+ )
18
+ return ()
19
+
20
+
21
+ def validate_width(
22
+ start: float | None, end: float | None, width: float | None
23
+ ) -> tuple[ValidationDiagnostic, ...]:
24
+ """Require a width when either the start or the end apodization is requested."""
25
+ if (start is not None or end is not None) and width is None:
26
+ return (
27
+ error(
28
+ "em.apodization.width_provided",
29
+ "Apodization width must be set.",
30
+ ("width",),
31
+ ),
32
+ )
33
+ return ()
34
+
35
+
36
+ def validate(schema: object) -> ValidationReport:
37
+ """Validate a moved apodization spec in the order of the replaced validators.
38
+
39
+ The end-before-start rule comes first, as that validator ran first, so the first error
40
+ matches the public constructor.
41
+
42
+ The validation dispatch calls this on every node whose class has this scope. A node of
43
+ any other class reports nothing.
44
+ """
45
+ from .schema import ApodizationSpec
46
+
47
+ if not isinstance(schema, ApodizationSpec):
48
+ return ValidationReport()
49
+ return ValidationReport(
50
+ diagnostics=(
51
+ *validate_end_order(schema.start, schema.end),
52
+ *validate_width(schema.start, schema.end, schema.width),
53
+ )
54
+ )
@@ -0,0 +1 @@
1
+ """Boundary-condition validation scope."""
@@ -0,0 +1 @@
1
+ """Boundary-placement validation scope."""
@@ -0,0 +1,101 @@
1
+ """Defines placements for boundary conditions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from abc import ABC
6
+
7
+ from pydantic import Field
8
+
9
+ from flexcompute.core._migration.em.schema.tidy3d.components.types.base import discriminated_union
10
+ from flexcompute.core._migration.em.schema.tidy3d.components.base import Tidy3dBaseModel
11
+ from flexcompute.core._migration.em.schema.tidy3d.components.types import BoxSurface
12
+
13
+
14
+ class AbstractBCPlacement(ABC, Tidy3dBaseModel):
15
+ """Abstract placement for boundary conditions."""
16
+
17
+
18
+ class StructureBoundary(AbstractBCPlacement):
19
+ """Placement of boundary conditions on the structure's boundary.
20
+
21
+ Example
22
+ -------
23
+ >>> bc_placement = StructureBoundary(structure="box")
24
+ """
25
+
26
+ structure: str = Field(
27
+ title="Structure Name",
28
+ description="Name of the structure.",
29
+ )
30
+
31
+
32
+ class StructureStructureInterface(AbstractBCPlacement):
33
+ """Placement of boundary conditions between two structures.
34
+
35
+ Example
36
+ -------
37
+ >>> bc_placement = StructureStructureInterface(structures=["box", "sphere"])
38
+ """
39
+
40
+ structures: tuple[str, str] = Field(
41
+ title="Structures",
42
+ description="Names of two structures.",
43
+ )
44
+
45
+
46
+ class MediumMediumInterface(AbstractBCPlacement):
47
+ """Placement of boundary conditions between two mediums.
48
+
49
+ Example
50
+ -------
51
+ >>> bc_placement = MediumMediumInterface(mediums=["dieletric", "metal"])
52
+ """
53
+
54
+ mediums: tuple[str, str] = Field(
55
+ title="Mediums",
56
+ description="Names of two mediums.",
57
+ )
58
+
59
+
60
+ class SimulationBoundary(AbstractBCPlacement):
61
+ """Placement of boundary conditions on the simulation box boundary.
62
+
63
+ Example
64
+ -------
65
+ >>> bc_placement = SimulationBoundary(surfaces=["x-", "x+"])
66
+ """
67
+
68
+ surfaces: tuple[BoxSurface, ...] = Field(
69
+ default=("x-", "x+", "y-", "y+", "z-", "z+"),
70
+ title="Surfaces",
71
+ description="Surfaces of simulation domain where to apply boundary conditions.",
72
+ )
73
+
74
+
75
+ class StructureSimulationBoundary(AbstractBCPlacement):
76
+ """Placement of boundary conditions on the simulation box boundary covered by the structure.
77
+
78
+ Example
79
+ -------
80
+ >>> bc_placement = StructureSimulationBoundary(structure="box", surfaces=["y-", "y+"])
81
+ """
82
+
83
+ structure: str = Field(
84
+ title="Structure Name",
85
+ description="Name of the structure.",
86
+ )
87
+
88
+ surfaces: tuple[BoxSurface, ...] = Field(
89
+ default=("x-", "x+", "y-", "y+", "z-", "z+"),
90
+ title="Surfaces",
91
+ description="Surfaces of simulation domain where to apply boundary conditions.",
92
+ )
93
+
94
+
95
+ BCPlacementType = discriminated_union(
96
+ StructureBoundary
97
+ | StructureStructureInterface
98
+ | MediumMediumInterface
99
+ | SimulationBoundary
100
+ | StructureSimulationBoundary
101
+ )
@@ -0,0 +1,42 @@
1
+ """Pure rules for boundary-condition placements."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from flexcompute.core.validation import ValidationDiagnostic, ValidationReport, error
8
+
9
+ if TYPE_CHECKING:
10
+ from .schema import MediumMediumInterface, StructureStructureInterface
11
+
12
+
13
+ def validate_distinct_names(
14
+ interface: StructureStructureInterface | MediumMediumInterface,
15
+ ) -> tuple[ValidationDiagnostic, ...]:
16
+ """Reject an interface that names the same structure or medium twice."""
17
+ from .schema import StructureStructureInterface
18
+
19
+ if isinstance(interface, StructureStructureInterface):
20
+ field, kind, owner = "structures", "structure", "StructureStructureInterface"
21
+ else:
22
+ field, kind, owner = "mediums", "medium", "MediumMediumInterface"
23
+ names = getattr(interface, field)
24
+ if names[0] != names[1]:
25
+ return ()
26
+ return (
27
+ error(
28
+ f"em.boundary.placement.duplicate_{kind}",
29
+ f"The same {kind} is provided twice in '{owner}'.",
30
+ (field,),
31
+ ),
32
+ )
33
+
34
+
35
+ def validate(schema: object) -> ValidationReport:
36
+ """Run the placement rules for one node; any other node reports nothing."""
37
+ from .schema import MediumMediumInterface, StructureStructureInterface
38
+
39
+ diagnostics = ()
40
+ if isinstance(schema, (StructureStructureInterface, MediumMediumInterface)):
41
+ diagnostics = validate_distinct_names(schema)
42
+ return ValidationReport(diagnostics=diagnostics)