tidy3d 2.13.0.dev0__tar.gz → 2.13.0.dev1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (939) hide show
  1. tidy3d-2.13.0.dev1/CHANGELOG.md +2730 -0
  2. tidy3d-2.13.0.dev1/PKG-INFO +385 -0
  3. tidy3d-2.13.0.dev1/README.md +166 -0
  4. tidy3d-2.13.0.dev1/REVIEW.md +132 -0
  5. tidy3d-2.13.0.dev1/pyproject.toml +453 -0
  6. tidy3d-2.13.0.dev1/schemas/EMESimulation.json +3 -0
  7. tidy3d-2.13.0.dev1/schemas/HeatChargeSimulation.json +3 -0
  8. tidy3d-2.13.0.dev1/schemas/HeatSimulation.json +3 -0
  9. tidy3d-2.13.0.dev1/schemas/ModeSimulation.json +3 -0
  10. tidy3d-2.13.0.dev1/schemas/Simulation.json +3 -0
  11. tidy3d-2.13.0.dev1/tidy3d/__init__.py +1116 -0
  12. tidy3d-2.13.0.dev1/tidy3d/_optional_imports.py +215 -0
  13. tidy3d-2.13.0.dev1/tidy3d/_testing/autograd_emulator.py +212 -0
  14. tidy3d-2.13.0.dev1/tidy3d/_testing/synthetic_monitor_data.py +779 -0
  15. tidy3d-2.13.0.dev1/tidy3d/components/apodization.py +115 -0
  16. tidy3d-2.13.0.dev1/tidy3d/components/autograd/__init__.py +50 -0
  17. tidy3d-2.13.0.dev1/tidy3d/components/autograd/adjoint_settings.py +24 -0
  18. tidy3d-2.13.0.dev1/tidy3d/components/autograd/collar_diagnostics.py +316 -0
  19. tidy3d-2.13.0.dev1/tidy3d/components/autograd/collar_staging.py +823 -0
  20. tidy3d-2.13.0.dev1/tidy3d/components/autograd/collection.py +237 -0
  21. tidy3d-2.13.0.dev1/tidy3d/components/autograd/derivative_terms.py +101 -0
  22. tidy3d-2.13.0.dev1/tidy3d/components/autograd/derivative_utils.py +346 -0
  23. tidy3d-2.13.0.dev1/tidy3d/components/autograd/flux_monitor.py +79 -0
  24. tidy3d-2.13.0.dev1/tidy3d/components/autograd/path_utils.py +145 -0
  25. tidy3d-2.13.0.dev1/tidy3d/components/autograd/point_consumption.py +39 -0
  26. tidy3d-2.13.0.dev1/tidy3d/components/autograd/source_factory.py +524 -0
  27. tidy3d-2.13.0.dev1/tidy3d/components/autograd/staging.py +717 -0
  28. tidy3d-2.13.0.dev1/tidy3d/components/autograd/types.py +235 -0
  29. tidy3d-2.13.0.dev1/tidy3d/components/base.py +2401 -0
  30. tidy3d-2.13.0.dev1/tidy3d/components/base_sim/data/sim_data.py +214 -0
  31. tidy3d-2.13.0.dev1/tidy3d/components/base_sim/monitor.py +114 -0
  32. tidy3d-2.13.0.dev1/tidy3d/components/base_sim/simulation.py +647 -0
  33. tidy3d-2.13.0.dev1/tidy3d/components/bc_placement.py +102 -0
  34. tidy3d-2.13.0.dev1/tidy3d/components/beam.py +1306 -0
  35. tidy3d-2.13.0.dev1/tidy3d/components/bound_ops.py +71 -0
  36. tidy3d-2.13.0.dev1/tidy3d/components/boundary.py +1652 -0
  37. tidy3d-2.13.0.dev1/tidy3d/components/contour_conversion.py +788 -0
  38. tidy3d-2.13.0.dev1/tidy3d/components/data/README.md +156 -0
  39. tidy3d-2.13.0.dev1/tidy3d/components/data/binary.py +158 -0
  40. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/README.md +58 -0
  41. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/__init__.py +295 -0
  42. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/_constants.py +17 -0
  43. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/_io.py +56 -0
  44. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/_plot.py +43 -0
  45. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/_spatial_sampling.py +150 -0
  46. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/_traced.py +46 -0
  47. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/abstract_spatial.py +158 -0
  48. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/base.py +48 -0
  49. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/eme.py +192 -0
  50. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/microwave.py +441 -0
  51. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/monitor.py +237 -0
  52. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/registry.py +194 -0
  53. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/spatial.py +127 -0
  54. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/spectral.py +160 -0
  55. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/tcad.py +158 -0
  56. tidy3d-2.13.0.dev1/tidy3d/components/data/data_array/unstructured.py +237 -0
  57. tidy3d-2.13.0.dev1/tidy3d/components/data/dataset.py +1498 -0
  58. tidy3d-2.13.0.dev1/tidy3d/components/data/dataset_base.py +43 -0
  59. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/__init__.py +176 -0
  60. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/base.py +360 -0
  61. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/field/__init__.py +43 -0
  62. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/field/data.py +395 -0
  63. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/field/diagnostic.py +753 -0
  64. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/field/dipole.py +56 -0
  65. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/field/point_cloud.py +98 -0
  66. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/field/surface.py +350 -0
  67. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/mode/solver.py +413 -0
  68. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/projection/base.py +336 -0
  69. tidy3d-2.13.0.dev1/tidy3d/components/data/monitor_data/projection/directivity.py +452 -0
  70. tidy3d-2.13.0.dev1/tidy3d/components/data/optical_generation.py +341 -0
  71. tidy3d-2.13.0.dev1/tidy3d/components/data/plot_safe.py +43 -0
  72. tidy3d-2.13.0.dev1/tidy3d/components/data/registry.py +19 -0
  73. tidy3d-2.13.0.dev1/tidy3d/components/data/sim_data.py +2975 -0
  74. tidy3d-2.13.0.dev1/tidy3d/components/data/structure_loss.py +608 -0
  75. tidy3d-2.13.0.dev1/tidy3d/components/data/unstructured/base.py +2834 -0
  76. tidy3d-2.13.0.dev1/tidy3d/components/data/utils.py +625 -0
  77. tidy3d-2.13.0.dev1/tidy3d/components/dispersion_fitter.py +1074 -0
  78. tidy3d-2.13.0.dev1/tidy3d/components/eme/data/dataset.py +550 -0
  79. tidy3d-2.13.0.dev1/tidy3d/components/eme/data/sim_data.py +1627 -0
  80. tidy3d-2.13.0.dev1/tidy3d/components/eme/grid.py +882 -0
  81. tidy3d-2.13.0.dev1/tidy3d/components/eme/monitor.py +442 -0
  82. tidy3d-2.13.0.dev1/tidy3d/components/eme/simulation.py +2660 -0
  83. tidy3d-2.13.0.dev1/tidy3d/components/eme/sweep.py +168 -0
  84. tidy3d-2.13.0.dev1/tidy3d/components/fast_heat/grid.py +96 -0
  85. tidy3d-2.13.0.dev1/tidy3d/components/fast_heat/monitor.py +36 -0
  86. tidy3d-2.13.0.dev1/tidy3d/components/fast_heat/simulation.py +361 -0
  87. tidy3d-2.13.0.dev1/tidy3d/components/field_projection/projector.py +1311 -0
  88. tidy3d-2.13.0.dev1/tidy3d/components/frequency_extrapolation.py +63 -0
  89. tidy3d-2.13.0.dev1/tidy3d/components/geometry/__init__.py +9 -0
  90. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/__init__.py +44 -0
  91. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/abstract_primitives.py +381 -0
  92. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/array.py +498 -0
  93. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/box.py +1026 -0
  94. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/clip_operation.py +480 -0
  95. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/constants.py +15 -0
  96. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/core.py +723 -0
  97. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/gds.py +430 -0
  98. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/geometry_group.py +370 -0
  99. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/operators.py +173 -0
  100. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/plotting.py +608 -0
  101. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/transformed.py +748 -0
  102. tidy3d-2.13.0.dev1/tidy3d/components/geometry/base/transforms.py +329 -0
  103. tidy3d-2.13.0.dev1/tidy3d/components/geometry/mesh.py +1573 -0
  104. tidy3d-2.13.0.dev1/tidy3d/components/geometry/polyslab.py +3816 -0
  105. tidy3d-2.13.0.dev1/tidy3d/components/geometry/primitives.py +1488 -0
  106. tidy3d-2.13.0.dev1/tidy3d/components/geometry/utils.py +615 -0
  107. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid.py +900 -0
  108. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/__init__.py +58 -0
  109. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/constants.py +42 -0
  110. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/grid_1d/manual.py +289 -0
  111. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/refinement/__init__.py +8 -0
  112. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/refinement/construction.py +285 -0
  113. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/refinement/grid_refinement.py +136 -0
  114. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/refinement/model.py +223 -0
  115. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/refinement/properties.py +80 -0
  116. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/spec/generation.py +656 -0
  117. tidy3d-2.13.0.dev1/tidy3d/components/grid/grid_spec/spec/localization_helpers.py +130 -0
  118. tidy3d-2.13.0.dev1/tidy3d/components/grid/mesher.py +1636 -0
  119. tidy3d-2.13.0.dev1/tidy3d/components/grid/snapping.py +477 -0
  120. tidy3d-2.13.0.dev1/tidy3d/components/lumped_element.py +2180 -0
  121. tidy3d-2.13.0.dev1/tidy3d/components/material/multi_physics.py +214 -0
  122. tidy3d-2.13.0.dev1/tidy3d/components/material/solver_types.py +26 -0
  123. tidy3d-2.13.0.dev1/tidy3d/components/material/tcad/charge.py +757 -0
  124. tidy3d-2.13.0.dev1/tidy3d/components/material/tcad/heat.py +699 -0
  125. tidy3d-2.13.0.dev1/tidy3d/components/material/tensor.py +79 -0
  126. tidy3d-2.13.0.dev1/tidy3d/components/medium/__init__.py +221 -0
  127. tidy3d-2.13.0.dev1/tidy3d/components/medium/_rebuild.py +55 -0
  128. tidy3d-2.13.0.dev1/tidy3d/components/medium/abstract_custom.py +337 -0
  129. tidy3d-2.13.0.dev1/tidy3d/components/medium/anisotropic.py +547 -0
  130. tidy3d-2.13.0.dev1/tidy3d/components/medium/base.py +947 -0
  131. tidy3d-2.13.0.dev1/tidy3d/components/medium/custom/anisotropic.py +268 -0
  132. tidy3d-2.13.0.dev1/tidy3d/components/medium/custom/dispersive.py +966 -0
  133. tidy3d-2.13.0.dev1/tidy3d/components/medium/custom/isotropic.py +884 -0
  134. tidy3d-2.13.0.dev1/tidy3d/components/medium/debye.py +122 -0
  135. tidy3d-2.13.0.dev1/tidy3d/components/medium/derivative_terms.py +139 -0
  136. tidy3d-2.13.0.dev1/tidy3d/components/medium/drude.py +119 -0
  137. tidy3d-2.13.0.dev1/tidy3d/components/medium/isotropic.py +353 -0
  138. tidy3d-2.13.0.dev1/tidy3d/components/medium/lorentz.py +190 -0
  139. tidy3d-2.13.0.dev1/tidy3d/components/medium/lossy_metal.py +262 -0
  140. tidy3d-2.13.0.dev1/tidy3d/components/medium/medium_types.py +88 -0
  141. tidy3d-2.13.0.dev1/tidy3d/components/medium/perturbation.py +718 -0
  142. tidy3d-2.13.0.dev1/tidy3d/components/medium/pole_residue.py +714 -0
  143. tidy3d-2.13.0.dev1/tidy3d/components/medium/protected.py +937 -0
  144. tidy3d-2.13.0.dev1/tidy3d/components/medium/sellmeier.py +189 -0
  145. tidy3d-2.13.0.dev1/tidy3d/components/medium/two_d.py +523 -0
  146. tidy3d-2.13.0.dev1/tidy3d/components/microwave/impedance_calculator.py +183 -0
  147. tidy3d-2.13.0.dev1/tidy3d/components/microwave/path_integrals/integrals/auto.py +90 -0
  148. tidy3d-2.13.0.dev1/tidy3d/components/microwave/path_integrals/integrals/current.py +340 -0
  149. tidy3d-2.13.0.dev1/tidy3d/components/microwave/path_integrals/integrals/voltage.py +100 -0
  150. tidy3d-2.13.0.dev1/tidy3d/components/microwave/path_integrals/mode_plane_analyzer.py +436 -0
  151. tidy3d-2.13.0.dev1/tidy3d/components/microwave/path_integrals/specs/current.py +427 -0
  152. tidy3d-2.13.0.dev1/tidy3d/components/microwave/path_integrals/specs/impedance.py +164 -0
  153. tidy3d-2.13.0.dev1/tidy3d/components/microwave/path_integrals/specs/voltage.py +236 -0
  154. tidy3d-2.13.0.dev1/tidy3d/components/microwave/source.py +153 -0
  155. tidy3d-2.13.0.dev1/tidy3d/components/microwave/time.py +649 -0
  156. tidy3d-2.13.0.dev1/tidy3d/components/mode/data/sim_data.py +530 -0
  157. tidy3d-2.13.0.dev1/tidy3d/components/mode/geometry.py +120 -0
  158. tidy3d-2.13.0.dev1/tidy3d/components/mode/mode_solver.py +3328 -0
  159. tidy3d-2.13.0.dev1/tidy3d/components/mode/simulation.py +737 -0
  160. tidy3d-2.13.0.dev1/tidy3d/components/mode/solver.py +1395 -0
  161. tidy3d-2.13.0.dev1/tidy3d/components/mode/validation.py +71 -0
  162. tidy3d-2.13.0.dev1/tidy3d/components/mode_spec.py +958 -0
  163. tidy3d-2.13.0.dev1/tidy3d/components/monitor.py +3251 -0
  164. tidy3d-2.13.0.dev1/tidy3d/components/nonlinear.py +308 -0
  165. tidy3d-2.13.0.dev1/tidy3d/components/parameter_perturbation.py +1928 -0
  166. tidy3d-2.13.0.dev1/tidy3d/components/scene.py +2238 -0
  167. tidy3d-2.13.0.dev1/tidy3d/components/simulation/__init__.py +78 -0
  168. tidy3d-2.13.0.dev1/tidy3d/components/simulation/adjoint.py +127 -0
  169. tidy3d-2.13.0.dev1/tidy3d/components/simulation/boundaries.py +189 -0
  170. tidy3d-2.13.0.dev1/tidy3d/components/simulation/constants.py +34 -0
  171. tidy3d-2.13.0.dev1/tidy3d/components/simulation/construction.py +407 -0
  172. tidy3d-2.13.0.dev1/tidy3d/components/simulation/export.py +460 -0
  173. tidy3d-2.13.0.dev1/tidy3d/components/simulation/grid.py +857 -0
  174. tidy3d-2.13.0.dev1/tidy3d/components/simulation/materials.py +623 -0
  175. tidy3d-2.13.0.dev1/tidy3d/components/simulation/mode_integration.py +368 -0
  176. tidy3d-2.13.0.dev1/tidy3d/components/simulation/model.py +1146 -0
  177. tidy3d-2.13.0.dev1/tidy3d/components/simulation/monitors.py +342 -0
  178. tidy3d-2.13.0.dev1/tidy3d/components/simulation/rf_integration.py +95 -0
  179. tidy3d-2.13.0.dev1/tidy3d/components/simulation/runtime.py +327 -0
  180. tidy3d-2.13.0.dev1/tidy3d/components/simulation/sources.py +238 -0
  181. tidy3d-2.13.0.dev1/tidy3d/components/simulation/tfsf.py +334 -0
  182. tidy3d-2.13.0.dev1/tidy3d/components/simulation/visualization.py +835 -0
  183. tidy3d-2.13.0.dev1/tidy3d/components/simulation/yee.py +273 -0
  184. tidy3d-2.13.0.dev1/tidy3d/components/source/adjoint_helpers.py +75 -0
  185. tidy3d-2.13.0.dev1/tidy3d/components/source/base.py +237 -0
  186. tidy3d-2.13.0.dev1/tidy3d/components/source/current.py +286 -0
  187. tidy3d-2.13.0.dev1/tidy3d/components/source/derivative_terms.py +194 -0
  188. tidy3d-2.13.0.dev1/tidy3d/components/source/field.py +1484 -0
  189. tidy3d-2.13.0.dev1/tidy3d/components/source/time.py +637 -0
  190. tidy3d-2.13.0.dev1/tidy3d/components/source/utils.py +35 -0
  191. tidy3d-2.13.0.dev1/tidy3d/components/spice/analysis/ac.py +95 -0
  192. tidy3d-2.13.0.dev1/tidy3d/components/spice/analysis/dc.py +260 -0
  193. tidy3d-2.13.0.dev1/tidy3d/components/spice/sources/ac.py +66 -0
  194. tidy3d-2.13.0.dev1/tidy3d/components/spice/sources/dc.py +172 -0
  195. tidy3d-2.13.0.dev1/tidy3d/components/structure.py +1521 -0
  196. tidy3d-2.13.0.dev1/tidy3d/components/tcad/analysis/heat_simulation_type.py +103 -0
  197. tidy3d-2.13.0.dev1/tidy3d/components/tcad/bandgap.py +185 -0
  198. tidy3d-2.13.0.dev1/tidy3d/components/tcad/boundary/charge.py +263 -0
  199. tidy3d-2.13.0.dev1/tidy3d/components/tcad/boundary/heat.py +325 -0
  200. tidy3d-2.13.0.dev1/tidy3d/components/tcad/data/monitor_data/charge.py +844 -0
  201. tidy3d-2.13.0.dev1/tidy3d/components/tcad/data/sim_data.py +906 -0
  202. tidy3d-2.13.0.dev1/tidy3d/components/tcad/data/types.py +31 -0
  203. tidy3d-2.13.0.dev1/tidy3d/components/tcad/doping.py +442 -0
  204. tidy3d-2.13.0.dev1/tidy3d/components/tcad/doping_utils.py +331 -0
  205. tidy3d-2.13.0.dev1/tidy3d/components/tcad/generation_recombination.py +883 -0
  206. tidy3d-2.13.0.dev1/tidy3d/components/tcad/grid.py +615 -0
  207. tidy3d-2.13.0.dev1/tidy3d/components/tcad/ionization.py +314 -0
  208. tidy3d-2.13.0.dev1/tidy3d/components/tcad/mesher.py +37 -0
  209. tidy3d-2.13.0.dev1/tidy3d/components/tcad/mobility.py +1052 -0
  210. tidy3d-2.13.0.dev1/tidy3d/components/tcad/monitors/abstract.py +93 -0
  211. tidy3d-2.13.0.dev1/tidy3d/components/tcad/monitors/charge.py +259 -0
  212. tidy3d-2.13.0.dev1/tidy3d/components/tcad/monitors/mesh.py +21 -0
  213. tidy3d-2.13.0.dev1/tidy3d/components/tcad/simulation/heat_charge.py +1427 -0
  214. tidy3d-2.13.0.dev1/tidy3d/components/tcad/source/abstract.py +39 -0
  215. tidy3d-2.13.0.dev1/tidy3d/components/tcad/types.py +99 -0
  216. tidy3d-2.13.0.dev1/tidy3d/components/thin_lens.py +369 -0
  217. tidy3d-2.13.0.dev1/tidy3d/components/time_modulation.py +333 -0
  218. tidy3d-2.13.0.dev1/tidy3d/components/transformation.py +233 -0
  219. tidy3d-2.13.0.dev1/tidy3d/components/two_d_materials.py +365 -0
  220. tidy3d-2.13.0.dev1/tidy3d/components/types/monitor.py +68 -0
  221. tidy3d-2.13.0.dev1/tidy3d/components/types/monitor_data.py +91 -0
  222. tidy3d-2.13.0.dev1/tidy3d/components/types/third_party.py +18 -0
  223. tidy3d-2.13.0.dev1/tidy3d/components/types/time.py +29 -0
  224. tidy3d-2.13.0.dev1/tidy3d/components/validators.py +626 -0
  225. tidy3d-2.13.0.dev1/tidy3d/components/viz/__init__.py +98 -0
  226. tidy3d-2.13.0.dev1/tidy3d/components/viz/axes_utils.py +413 -0
  227. tidy3d-2.13.0.dev1/tidy3d/components/viz/descartes.py +114 -0
  228. tidy3d-2.13.0.dev1/tidy3d/components/viz/flex_style.py +59 -0
  229. tidy3d-2.13.0.dev1/tidy3d/components/viz/plot_sim_3d.py +216 -0
  230. tidy3d-2.13.0.dev1/tidy3d/components/workflow.py +369 -0
  231. tidy3d-2.13.0.dev1/tidy3d/config/README.md +105 -0
  232. tidy3d-2.13.0.dev1/tidy3d/config/profiles.py +74 -0
  233. tidy3d-2.13.0.dev1/tidy3d/config/sections.py +986 -0
  234. tidy3d-2.13.0.dev1/tidy3d/constants.py +367 -0
  235. tidy3d-2.13.0.dev1/tidy3d/em/translate/__init__.py +137 -0
  236. tidy3d-2.13.0.dev1/tidy3d/em/translate/adam_optimizer/data.py +29 -0
  237. tidy3d-2.13.0.dev1/tidy3d/em/translate/base.py +141 -0
  238. tidy3d-2.13.0.dev1/tidy3d/em/translate/components.py +382 -0
  239. tidy3d-2.13.0.dev1/tidy3d/em/translate/core_log.py +70 -0
  240. tidy3d-2.13.0.dev1/tidy3d/em/translate/derivative_terms.py +297 -0
  241. tidy3d-2.13.0.dev1/tidy3d/em/translate/eme/task.py +25 -0
  242. tidy3d-2.13.0.dev1/tidy3d/em/translate/fast_heat/__init__.py +7 -0
  243. tidy3d-2.13.0.dev1/tidy3d/em/translate/fast_heat/task.py +41 -0
  244. tidy3d-2.13.0.dev1/tidy3d/em/translate/fdtd/data.py +30 -0
  245. tidy3d-2.13.0.dev1/tidy3d/em/translate/fdtd/task.py +23 -0
  246. tidy3d-2.13.0.dev1/tidy3d/em/translate/fdtd/validation.py +54 -0
  247. tidy3d-2.13.0.dev1/tidy3d/em/translate/file/data.py +61 -0
  248. tidy3d-2.13.0.dev1/tidy3d/em/translate/file/task.py +41 -0
  249. tidy3d-2.13.0.dev1/tidy3d/em/translate/geometry.py +148 -0
  250. tidy3d-2.13.0.dev1/tidy3d/em/translate/heat/task.py +25 -0
  251. tidy3d-2.13.0.dev1/tidy3d/em/translate/heat_charge/task.py +31 -0
  252. tidy3d-2.13.0.dev1/tidy3d/em/translate/map.py +1420 -0
  253. tidy3d-2.13.0.dev1/tidy3d/em/translate/modal_cm/__init__.py +7 -0
  254. tidy3d-2.13.0.dev1/tidy3d/em/translate/modal_cm/task.py +30 -0
  255. tidy3d-2.13.0.dev1/tidy3d/em/translate/mode/task.py +25 -0
  256. tidy3d-2.13.0.dev1/tidy3d/em/translate/mode_solver/task.py +25 -0
  257. tidy3d-2.13.0.dev1/tidy3d/em/translate/sample_sets.py +160 -0
  258. tidy3d-2.13.0.dev1/tidy3d/em/translate/shape_terms.py +372 -0
  259. tidy3d-2.13.0.dev1/tidy3d/em/translate/source.py +67 -0
  260. tidy3d-2.13.0.dev1/tidy3d/log.py +568 -0
  261. tidy3d-2.13.0.dev1/tidy3d/material_library/material_library.py +2980 -0
  262. tidy3d-2.13.0.dev1/tidy3d/material_library/material_reference.py +237 -0
  263. tidy3d-2.13.0.dev1/tidy3d/packaging.py +175 -0
  264. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/README.md +538 -0
  265. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/functions.py +794 -0
  266. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/invdes/filters.py +321 -0
  267. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/invdes/parametrizations.py +432 -0
  268. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/invdes/projections.py +161 -0
  269. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/invdes/symmetries.py +240 -0
  270. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/primitives/misc.py +11 -0
  271. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/safe_update.py +543 -0
  272. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/types.py +7 -0
  273. tidy3d-2.13.0.dev1/tidy3d/plugins/autograd/utilities.py +209 -0
  274. tidy3d-2.13.0.dev1/tidy3d/plugins/design/method.py +1131 -0
  275. tidy3d-2.13.0.dev1/tidy3d/plugins/dipole_emission/data_array.py +66 -0
  276. tidy3d-2.13.0.dev1/tidy3d/plugins/dispersion/fit.py +834 -0
  277. tidy3d-2.13.0.dev1/tidy3d/plugins/dispersion/web.py +382 -0
  278. tidy3d-2.13.0.dev1/tidy3d/plugins/invdes/README.md +585 -0
  279. tidy3d-2.13.0.dev1/tidy3d/plugins/invdes/__init__.py +58 -0
  280. tidy3d-2.13.0.dev1/tidy3d/plugins/invdes/design.py +368 -0
  281. tidy3d-2.13.0.dev1/tidy3d/plugins/invdes/initialization.py +154 -0
  282. tidy3d-2.13.0.dev1/tidy3d/plugins/invdes/optimizer.py +298 -0
  283. tidy3d-2.13.0.dev1/tidy3d/plugins/invdes/polyslab_set.py +493 -0
  284. tidy3d-2.13.0.dev1/tidy3d/plugins/invdes/region.py +425 -0
  285. tidy3d-2.13.0.dev1/tidy3d/plugins/invdes/transformation.py +116 -0
  286. tidy3d-2.13.0.dev1/tidy3d/plugins/klayout/README.md +15 -0
  287. tidy3d-2.13.0.dev1/tidy3d/plugins/klayout/__init__.py +33 -0
  288. tidy3d-2.13.0.dev1/tidy3d/plugins/klayout/lvs/README.md +231 -0
  289. tidy3d-2.13.0.dev1/tidy3d/plugins/klayout/lvs/__init__.py +16 -0
  290. tidy3d-2.13.0.dev1/tidy3d/plugins/klayout/lvs/defaults.py +10 -0
  291. tidy3d-2.13.0.dev1/tidy3d/plugins/klayout/lvs/lvs.py +472 -0
  292. tidy3d-2.13.0.dev1/tidy3d/plugins/klayout/lvs/lvsdb.py +547 -0
  293. tidy3d-2.13.0.dev1/tidy3d/plugins/klayout/lvs/netlist.py +428 -0
  294. tidy3d-2.13.0.dev1/tidy3d/plugins/klayout/lvs/results.py +1343 -0
  295. tidy3d-2.13.0.dev1/tidy3d/plugins/pytorch/wrapper.py +112 -0
  296. tidy3d-2.13.0.dev1/tidy3d/plugins/resonance/resonance.py +442 -0
  297. tidy3d-2.13.0.dev1/tidy3d/plugins/smatrix/component_modelers/base.py +359 -0
  298. tidy3d-2.13.0.dev1/tidy3d/plugins/smatrix/run.py +273 -0
  299. tidy3d-2.13.0.dev1/tidy3d/version.py +3 -0
  300. tidy3d-2.13.0.dev1/tidy3d/web/README.md +283 -0
  301. tidy3d-2.13.0.dev1/tidy3d/web/__init__.py +87 -0
  302. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/autograd.py +1877 -0
  303. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/backward.py +744 -0
  304. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/constants.py +32 -0
  305. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/context.py +381 -0
  306. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/derivatives.py +204 -0
  307. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/engine.py +335 -0
  308. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/forward.py +56 -0
  309. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/io_utils.py +198 -0
  310. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/parallel_adjoint.py +513 -0
  311. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/strategy.py +963 -0
  312. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/types.py +414 -0
  313. tidy3d-2.13.0.dev1/tidy3d/web/api/autograd/utils.py +163 -0
  314. tidy3d-2.13.0.dev1/tidy3d/web/api/container.py +4466 -0
  315. tidy3d-2.13.0.dev1/tidy3d/web/api/material_library.py +64 -0
  316. tidy3d-2.13.0.dev1/tidy3d/web/api/mode.py +817 -0
  317. tidy3d-2.13.0.dev1/tidy3d/web/api/run.py +348 -0
  318. tidy3d-2.13.0.dev1/tidy3d/web/api/task_api.py +1693 -0
  319. tidy3d-2.13.0.dev1/tidy3d/web/api/tidy3d_stub.py +255 -0
  320. tidy3d-2.13.0.dev1/tidy3d/web/api/webapi.py +493 -0
  321. tidy3d-2.13.0.dev1/tidy3d/web/api/workflow_batch.py +834 -0
  322. tidy3d-2.13.0.dev1/tidy3d/web/api/workflow_model.py +164 -0
  323. tidy3d-2.13.0.dev1/tidy3d/web/api/workspace.py +354 -0
  324. tidy3d-2.13.0.dev1/tidy3d/web/cache.py +1062 -0
  325. tidy3d-2.13.0.dev1/tidy3d/web/cli/develop/packaging.py +122 -0
  326. tidy3d-2.13.0.dev1/tidy3d/web/core/cache.py +23 -0
  327. tidy3d-2.13.0.dev1/tidy3d/web/core/client_identity.py +73 -0
  328. tidy3d-2.13.0.dev1/tidy3d/web/core/exceptions.py +26 -0
  329. tidy3d-2.13.0.dev1/tidy3d/web/core/http_util.py +342 -0
  330. tidy3d-2.13.0.dev1/tidy3d/web/core/s3utils.py +508 -0
  331. tidy3d-2.13.0.dev1/tidy3d/web/core/task_core.py +1204 -0
  332. tidy3d-2.13.0.dev1/tidy3d/web/core/task_info.py +366 -0
  333. tidy3d-2.13.0.dev1/tidy3d/web/core/workspace.py +145 -0
  334. tidy3d-2.13.0.dev0/CHANGELOG.md +0 -2552
  335. tidy3d-2.13.0.dev0/PKG-INFO +0 -389
  336. tidy3d-2.13.0.dev0/README.md +0 -170
  337. tidy3d-2.13.0.dev0/REVIEW.md +0 -121
  338. tidy3d-2.13.0.dev0/pyproject.toml +0 -453
  339. tidy3d-2.13.0.dev0/schemas/EMESimulation.json +0 -3
  340. tidy3d-2.13.0.dev0/schemas/HeatChargeSimulation.json +0 -3
  341. tidy3d-2.13.0.dev0/schemas/HeatSimulation.json +0 -3
  342. tidy3d-2.13.0.dev0/schemas/ModeSimulation.json +0 -3
  343. tidy3d-2.13.0.dev0/schemas/Simulation.json +0 -3
  344. tidy3d-2.13.0.dev0/tidy3d/__init__.py +0 -1042
  345. tidy3d-2.13.0.dev0/tidy3d/_testing/autograd_emulator.py +0 -210
  346. tidy3d-2.13.0.dev0/tidy3d/_testing/synthetic_monitor_data.py +0 -742
  347. tidy3d-2.13.0.dev0/tidy3d/components/apodization.py +0 -107
  348. tidy3d-2.13.0.dev0/tidy3d/components/autograd/__init__.py +0 -44
  349. tidy3d-2.13.0.dev0/tidy3d/components/autograd/collection.py +0 -185
  350. tidy3d-2.13.0.dev0/tidy3d/components/autograd/derivative_utils.py +0 -1633
  351. tidy3d-2.13.0.dev0/tidy3d/components/autograd/flux_monitor.py +0 -76
  352. tidy3d-2.13.0.dev0/tidy3d/components/autograd/path_utils.py +0 -157
  353. tidy3d-2.13.0.dev0/tidy3d/components/autograd/point_consumption.py +0 -406
  354. tidy3d-2.13.0.dev0/tidy3d/components/autograd/source_factory.py +0 -506
  355. tidy3d-2.13.0.dev0/tidy3d/components/autograd/staging.py +0 -428
  356. tidy3d-2.13.0.dev0/tidy3d/components/autograd/types.py +0 -190
  357. tidy3d-2.13.0.dev0/tidy3d/components/base.py +0 -2450
  358. tidy3d-2.13.0.dev0/tidy3d/components/base_sim/data/sim_data.py +0 -237
  359. tidy3d-2.13.0.dev0/tidy3d/components/base_sim/monitor.py +0 -100
  360. tidy3d-2.13.0.dev0/tidy3d/components/base_sim/simulation.py +0 -719
  361. tidy3d-2.13.0.dev0/tidy3d/components/bc_placement.py +0 -121
  362. tidy3d-2.13.0.dev0/tidy3d/components/beam.py +0 -1253
  363. tidy3d-2.13.0.dev0/tidy3d/components/boundary.py +0 -1788
  364. tidy3d-2.13.0.dev0/tidy3d/components/data/README.md +0 -156
  365. tidy3d-2.13.0.dev0/tidy3d/components/data/data_array.py +0 -2990
  366. tidy3d-2.13.0.dev0/tidy3d/components/data/dataset.py +0 -1359
  367. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/__init__.py +0 -168
  368. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/base.py +0 -360
  369. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/field/__init__.py +0 -27
  370. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/field/data.py +0 -380
  371. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/field/diagnostic.py +0 -333
  372. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/field/dipole.py +0 -78
  373. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/field/point_cloud.py +0 -128
  374. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/field/surface.py +0 -217
  375. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/mode/solver.py +0 -395
  376. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/projection/base.py +0 -319
  377. tidy3d-2.13.0.dev0/tidy3d/components/data/monitor_data/projection/directivity.py +0 -448
  378. tidy3d-2.13.0.dev0/tidy3d/components/data/optical_generation.py +0 -314
  379. tidy3d-2.13.0.dev0/tidy3d/components/data/sim_data.py +0 -2475
  380. tidy3d-2.13.0.dev0/tidy3d/components/data/unstructured/base.py +0 -2849
  381. tidy3d-2.13.0.dev0/tidy3d/components/data/utils.py +0 -544
  382. tidy3d-2.13.0.dev0/tidy3d/components/dispersion_fitter.py +0 -1055
  383. tidy3d-2.13.0.dev0/tidy3d/components/eme/data/dataset.py +0 -519
  384. tidy3d-2.13.0.dev0/tidy3d/components/eme/data/sim_data.py +0 -1222
  385. tidy3d-2.13.0.dev0/tidy3d/components/eme/grid.py +0 -972
  386. tidy3d-2.13.0.dev0/tidy3d/components/eme/monitor.py +0 -425
  387. tidy3d-2.13.0.dev0/tidy3d/components/eme/simulation.py +0 -3221
  388. tidy3d-2.13.0.dev0/tidy3d/components/eme/sweep.py +0 -180
  389. tidy3d-2.13.0.dev0/tidy3d/components/field_projection/projector.py +0 -1283
  390. tidy3d-2.13.0.dev0/tidy3d/components/frequency_extrapolation.py +0 -86
  391. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/__init__.py +0 -85
  392. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/abstract_primitives.py +0 -411
  393. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/array.py +0 -411
  394. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/box.py +0 -1196
  395. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/clip_operation.py +0 -528
  396. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/constants.py +0 -9
  397. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/core.py +0 -710
  398. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/gds.py +0 -430
  399. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/geometry_group.py +0 -396
  400. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/operators.py +0 -176
  401. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/plotting.py +0 -523
  402. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/transformed.py +0 -361
  403. tidy3d-2.13.0.dev0/tidy3d/components/geometry/base/transforms.py +0 -328
  404. tidy3d-2.13.0.dev0/tidy3d/components/geometry/bound_ops.py +0 -71
  405. tidy3d-2.13.0.dev0/tidy3d/components/geometry/contour_conversion.py +0 -784
  406. tidy3d-2.13.0.dev0/tidy3d/components/geometry/mesh.py +0 -1551
  407. tidy3d-2.13.0.dev0/tidy3d/components/geometry/polyslab.py +0 -3817
  408. tidy3d-2.13.0.dev0/tidy3d/components/geometry/primitives.py +0 -1480
  409. tidy3d-2.13.0.dev0/tidy3d/components/geometry/utils.py +0 -1099
  410. tidy3d-2.13.0.dev0/tidy3d/components/geometry/utils_2d.py +0 -362
  411. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid.py +0 -909
  412. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid_spec/__init__.py +0 -227
  413. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid_spec/constants.py +0 -50
  414. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid_spec/grid_1d/manual.py +0 -296
  415. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid_spec/refinement/__init__.py +0 -7
  416. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid_spec/refinement/construction.py +0 -285
  417. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid_spec/refinement/model.py +0 -360
  418. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid_spec/refinement/properties.py +0 -80
  419. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid_spec/spec/generation.py +0 -654
  420. tidy3d-2.13.0.dev0/tidy3d/components/grid/grid_spec/spec/localization_helpers.py +0 -130
  421. tidy3d-2.13.0.dev0/tidy3d/components/grid/mesher.py +0 -1630
  422. tidy3d-2.13.0.dev0/tidy3d/components/lumped_element.py +0 -2272
  423. tidy3d-2.13.0.dev0/tidy3d/components/material/multi_physics.py +0 -217
  424. tidy3d-2.13.0.dev0/tidy3d/components/material/solver_types.py +0 -20
  425. tidy3d-2.13.0.dev0/tidy3d/components/material/tcad/charge.py +0 -461
  426. tidy3d-2.13.0.dev0/tidy3d/components/material/tcad/heat.py +0 -443
  427. tidy3d-2.13.0.dev0/tidy3d/components/medium/__init__.py +0 -179
  428. tidy3d-2.13.0.dev0/tidy3d/components/medium/_rebuild.py +0 -53
  429. tidy3d-2.13.0.dev0/tidy3d/components/medium/abstract_custom.py +0 -452
  430. tidy3d-2.13.0.dev0/tidy3d/components/medium/anisotropic.py +0 -659
  431. tidy3d-2.13.0.dev0/tidy3d/components/medium/base.py +0 -968
  432. tidy3d-2.13.0.dev0/tidy3d/components/medium/custom/anisotropic.py +0 -271
  433. tidy3d-2.13.0.dev0/tidy3d/components/medium/custom/dispersive.py +0 -1486
  434. tidy3d-2.13.0.dev0/tidy3d/components/medium/custom/isotropic.py +0 -1139
  435. tidy3d-2.13.0.dev0/tidy3d/components/medium/debye.py +0 -217
  436. tidy3d-2.13.0.dev0/tidy3d/components/medium/drude.py +0 -184
  437. tidy3d-2.13.0.dev0/tidy3d/components/medium/isotropic.py +0 -430
  438. tidy3d-2.13.0.dev0/tidy3d/components/medium/lorentz.py +0 -311
  439. tidy3d-2.13.0.dev0/tidy3d/components/medium/lossy_metal.py +0 -275
  440. tidy3d-2.13.0.dev0/tidy3d/components/medium/medium_types.py +0 -74
  441. tidy3d-2.13.0.dev0/tidy3d/components/medium/perturbation.py +0 -478
  442. tidy3d-2.13.0.dev0/tidy3d/components/medium/pole_residue.py +0 -818
  443. tidy3d-2.13.0.dev0/tidy3d/components/medium/sellmeier.py +0 -265
  444. tidy3d-2.13.0.dev0/tidy3d/components/medium/two_d.py +0 -466
  445. tidy3d-2.13.0.dev0/tidy3d/components/microwave/impedance_calculator.py +0 -196
  446. tidy3d-2.13.0.dev0/tidy3d/components/microwave/path_integrals/integrals/auto.py +0 -90
  447. tidy3d-2.13.0.dev0/tidy3d/components/microwave/path_integrals/integrals/current.py +0 -330
  448. tidy3d-2.13.0.dev0/tidy3d/components/microwave/path_integrals/integrals/voltage.py +0 -93
  449. tidy3d-2.13.0.dev0/tidy3d/components/microwave/path_integrals/mode_plane_analyzer.py +0 -434
  450. tidy3d-2.13.0.dev0/tidy3d/components/microwave/path_integrals/specs/current.py +0 -426
  451. tidy3d-2.13.0.dev0/tidy3d/components/microwave/path_integrals/specs/impedance.py +0 -183
  452. tidy3d-2.13.0.dev0/tidy3d/components/microwave/path_integrals/specs/voltage.py +0 -235
  453. tidy3d-2.13.0.dev0/tidy3d/components/microwave/source.py +0 -77
  454. tidy3d-2.13.0.dev0/tidy3d/components/microwave/time.py +0 -348
  455. tidy3d-2.13.0.dev0/tidy3d/components/mode/data/sim_data.py +0 -326
  456. tidy3d-2.13.0.dev0/tidy3d/components/mode/geometry.py +0 -120
  457. tidy3d-2.13.0.dev0/tidy3d/components/mode/mode_solver.py +0 -3457
  458. tidy3d-2.13.0.dev0/tidy3d/components/mode/simulation.py +0 -725
  459. tidy3d-2.13.0.dev0/tidy3d/components/mode/solver.py +0 -1388
  460. tidy3d-2.13.0.dev0/tidy3d/components/mode/validation.py +0 -149
  461. tidy3d-2.13.0.dev0/tidy3d/components/mode_spec.py +0 -1052
  462. tidy3d-2.13.0.dev0/tidy3d/components/monitor.py +0 -3136
  463. tidy3d-2.13.0.dev0/tidy3d/components/nonlinear.py +0 -422
  464. tidy3d-2.13.0.dev0/tidy3d/components/parameter_perturbation.py +0 -1788
  465. tidy3d-2.13.0.dev0/tidy3d/components/scene.py +0 -2157
  466. tidy3d-2.13.0.dev0/tidy3d/components/simulation/__init__.py +0 -77
  467. tidy3d-2.13.0.dev0/tidy3d/components/simulation/adjoint.py +0 -222
  468. tidy3d-2.13.0.dev0/tidy3d/components/simulation/boundaries.py +0 -777
  469. tidy3d-2.13.0.dev0/tidy3d/components/simulation/constants.py +0 -32
  470. tidy3d-2.13.0.dev0/tidy3d/components/simulation/construction.py +0 -407
  471. tidy3d-2.13.0.dev0/tidy3d/components/simulation/export.py +0 -449
  472. tidy3d-2.13.0.dev0/tidy3d/components/simulation/grid.py +0 -830
  473. tidy3d-2.13.0.dev0/tidy3d/components/simulation/materials.py +0 -670
  474. tidy3d-2.13.0.dev0/tidy3d/components/simulation/mode_integration.py +0 -507
  475. tidy3d-2.13.0.dev0/tidy3d/components/simulation/model.py +0 -1329
  476. tidy3d-2.13.0.dev0/tidy3d/components/simulation/monitors.py +0 -912
  477. tidy3d-2.13.0.dev0/tidy3d/components/simulation/rf_integration.py +0 -120
  478. tidy3d-2.13.0.dev0/tidy3d/components/simulation/runtime.py +0 -414
  479. tidy3d-2.13.0.dev0/tidy3d/components/simulation/sources.py +0 -551
  480. tidy3d-2.13.0.dev0/tidy3d/components/simulation/tfsf.py +0 -985
  481. tidy3d-2.13.0.dev0/tidy3d/components/simulation/visualization.py +0 -835
  482. tidy3d-2.13.0.dev0/tidy3d/components/simulation/yee.py +0 -258
  483. tidy3d-2.13.0.dev0/tidy3d/components/source/adjoint_helpers.py +0 -262
  484. tidy3d-2.13.0.dev0/tidy3d/components/source/base.py +0 -236
  485. tidy3d-2.13.0.dev0/tidy3d/components/source/current.py +0 -414
  486. tidy3d-2.13.0.dev0/tidy3d/components/source/field.py +0 -1617
  487. tidy3d-2.13.0.dev0/tidy3d/components/source/time.py +0 -714
  488. tidy3d-2.13.0.dev0/tidy3d/components/source/utils.py +0 -34
  489. tidy3d-2.13.0.dev0/tidy3d/components/spice/analysis/ac.py +0 -101
  490. tidy3d-2.13.0.dev0/tidy3d/components/spice/analysis/dc.py +0 -298
  491. tidy3d-2.13.0.dev0/tidy3d/components/spice/sources/ac.py +0 -61
  492. tidy3d-2.13.0.dev0/tidy3d/components/spice/sources/dc.py +0 -166
  493. tidy3d-2.13.0.dev0/tidy3d/components/structure.py +0 -1428
  494. tidy3d-2.13.0.dev0/tidy3d/components/tcad/analysis/heat_simulation_type.py +0 -177
  495. tidy3d-2.13.0.dev0/tidy3d/components/tcad/bandgap.py +0 -151
  496. tidy3d-2.13.0.dev0/tidy3d/components/tcad/boundary/charge.py +0 -190
  497. tidy3d-2.13.0.dev0/tidy3d/components/tcad/boundary/heat.py +0 -337
  498. tidy3d-2.13.0.dev0/tidy3d/components/tcad/data/monitor_data/charge.py +0 -735
  499. tidy3d-2.13.0.dev0/tidy3d/components/tcad/data/sim_data.py +0 -846
  500. tidy3d-2.13.0.dev0/tidy3d/components/tcad/data/types.py +0 -29
  501. tidy3d-2.13.0.dev0/tidy3d/components/tcad/doping.py +0 -433
  502. tidy3d-2.13.0.dev0/tidy3d/components/tcad/doping_utils.py +0 -326
  503. tidy3d-2.13.0.dev0/tidy3d/components/tcad/generation_recombination.py +0 -837
  504. tidy3d-2.13.0.dev0/tidy3d/components/tcad/grid.py +0 -750
  505. tidy3d-2.13.0.dev0/tidy3d/components/tcad/mesher.py +0 -36
  506. tidy3d-2.13.0.dev0/tidy3d/components/tcad/mobility.py +0 -531
  507. tidy3d-2.13.0.dev0/tidy3d/components/tcad/monitors/abstract.py +0 -91
  508. tidy3d-2.13.0.dev0/tidy3d/components/tcad/monitors/charge.py +0 -223
  509. tidy3d-2.13.0.dev0/tidy3d/components/tcad/monitors/mesh.py +0 -33
  510. tidy3d-2.13.0.dev0/tidy3d/components/tcad/simulation/heat_charge.py +0 -3901
  511. tidy3d-2.13.0.dev0/tidy3d/components/tcad/source/abstract.py +0 -49
  512. tidy3d-2.13.0.dev0/tidy3d/components/tcad/types.py +0 -96
  513. tidy3d-2.13.0.dev0/tidy3d/components/thin_lens.py +0 -149
  514. tidy3d-2.13.0.dev0/tidy3d/components/time_modulation.py +0 -328
  515. tidy3d-2.13.0.dev0/tidy3d/components/transformation.py +0 -223
  516. tidy3d-2.13.0.dev0/tidy3d/components/types/monitor.py +0 -64
  517. tidy3d-2.13.0.dev0/tidy3d/components/types/monitor_data.py +0 -85
  518. tidy3d-2.13.0.dev0/tidy3d/components/types/third_party.py +0 -18
  519. tidy3d-2.13.0.dev0/tidy3d/components/types/time.py +0 -27
  520. tidy3d-2.13.0.dev0/tidy3d/components/validators.py +0 -715
  521. tidy3d-2.13.0.dev0/tidy3d/components/viz/__init__.py +0 -110
  522. tidy3d-2.13.0.dev0/tidy3d/components/viz/axes_utils.py +0 -413
  523. tidy3d-2.13.0.dev0/tidy3d/components/viz/descartes.py +0 -113
  524. tidy3d-2.13.0.dev0/tidy3d/components/viz/flex_style.py +0 -46
  525. tidy3d-2.13.0.dev0/tidy3d/components/viz/plot_sim_3d.py +0 -215
  526. tidy3d-2.13.0.dev0/tidy3d/components/workflow.py +0 -365
  527. tidy3d-2.13.0.dev0/tidy3d/config/README.md +0 -95
  528. tidy3d-2.13.0.dev0/tidy3d/config/profiles.py +0 -64
  529. tidy3d-2.13.0.dev0/tidy3d/config/sections.py +0 -919
  530. tidy3d-2.13.0.dev0/tidy3d/constants.py +0 -360
  531. tidy3d-2.13.0.dev0/tidy3d/em/translate/__init__.py +0 -128
  532. tidy3d-2.13.0.dev0/tidy3d/em/translate/adam_optimizer/data.py +0 -36
  533. tidy3d-2.13.0.dev0/tidy3d/em/translate/autograd.py +0 -36
  534. tidy3d-2.13.0.dev0/tidy3d/em/translate/base.py +0 -92
  535. tidy3d-2.13.0.dev0/tidy3d/em/translate/eme/task.py +0 -25
  536. tidy3d-2.13.0.dev0/tidy3d/em/translate/fdtd/data.py +0 -37
  537. tidy3d-2.13.0.dev0/tidy3d/em/translate/fdtd/task.py +0 -39
  538. tidy3d-2.13.0.dev0/tidy3d/em/translate/file/data.py +0 -50
  539. tidy3d-2.13.0.dev0/tidy3d/em/translate/file/task.py +0 -41
  540. tidy3d-2.13.0.dev0/tidy3d/em/translate/heat/task.py +0 -25
  541. tidy3d-2.13.0.dev0/tidy3d/em/translate/heat_charge/task.py +0 -31
  542. tidy3d-2.13.0.dev0/tidy3d/em/translate/map.py +0 -208
  543. tidy3d-2.13.0.dev0/tidy3d/em/translate/modal_cm/__init__.py +0 -7
  544. tidy3d-2.13.0.dev0/tidy3d/em/translate/modal_cm/data.py +0 -38
  545. tidy3d-2.13.0.dev0/tidy3d/em/translate/modal_cm/task.py +0 -43
  546. tidy3d-2.13.0.dev0/tidy3d/em/translate/mode/task.py +0 -27
  547. tidy3d-2.13.0.dev0/tidy3d/em/translate/mode_solver/task.py +0 -41
  548. tidy3d-2.13.0.dev0/tidy3d/em/translate/sample_sets.py +0 -182
  549. tidy3d-2.13.0.dev0/tidy3d/log.py +0 -540
  550. tidy3d-2.13.0.dev0/tidy3d/material_library/material_library.py +0 -2980
  551. tidy3d-2.13.0.dev0/tidy3d/material_library/material_reference.py +0 -231
  552. tidy3d-2.13.0.dev0/tidy3d/packaging.py +0 -359
  553. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/README.md +0 -462
  554. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/functions.py +0 -880
  555. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/invdes/filters.py +0 -321
  556. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/invdes/parametrizations.py +0 -385
  557. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/invdes/projections.py +0 -187
  558. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/invdes/symmetries.py +0 -236
  559. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/primitives/misc.py +0 -139
  560. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/safe_update.py +0 -541
  561. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/types.py +0 -6
  562. tidy3d-2.13.0.dev0/tidy3d/plugins/autograd/utilities.py +0 -259
  563. tidy3d-2.13.0.dev0/tidy3d/plugins/design/method.py +0 -1084
  564. tidy3d-2.13.0.dev0/tidy3d/plugins/dipole_emission/data_array.py +0 -66
  565. tidy3d-2.13.0.dev0/tidy3d/plugins/dispersion/fit.py +0 -836
  566. tidy3d-2.13.0.dev0/tidy3d/plugins/dispersion/web.py +0 -380
  567. tidy3d-2.13.0.dev0/tidy3d/plugins/invdes/README.md +0 -563
  568. tidy3d-2.13.0.dev0/tidy3d/plugins/invdes/__init__.py +0 -58
  569. tidy3d-2.13.0.dev0/tidy3d/plugins/invdes/design.py +0 -425
  570. tidy3d-2.13.0.dev0/tidy3d/plugins/invdes/initialization.py +0 -141
  571. tidy3d-2.13.0.dev0/tidy3d/plugins/invdes/optimizer.py +0 -294
  572. tidy3d-2.13.0.dev0/tidy3d/plugins/invdes/polyslab_set.py +0 -493
  573. tidy3d-2.13.0.dev0/tidy3d/plugins/invdes/region.py +0 -391
  574. tidy3d-2.13.0.dev0/tidy3d/plugins/invdes/transformation.py +0 -97
  575. tidy3d-2.13.0.dev0/tidy3d/plugins/klayout/README.md +0 -9
  576. tidy3d-2.13.0.dev0/tidy3d/plugins/klayout/__init__.py +0 -23
  577. tidy3d-2.13.0.dev0/tidy3d/plugins/pytorch/wrapper.py +0 -112
  578. tidy3d-2.13.0.dev0/tidy3d/plugins/resonance/resonance.py +0 -442
  579. tidy3d-2.13.0.dev0/tidy3d/plugins/smatrix/component_modelers/base.py +0 -357
  580. tidy3d-2.13.0.dev0/tidy3d/plugins/smatrix/run.py +0 -264
  581. tidy3d-2.13.0.dev0/tidy3d/version.py +0 -3
  582. tidy3d-2.13.0.dev0/tidy3d/web/README.md +0 -270
  583. tidy3d-2.13.0.dev0/tidy3d/web/__init__.py +0 -77
  584. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/autograd.py +0 -1877
  585. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/backward.py +0 -1405
  586. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/constants.py +0 -36
  587. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/context.py +0 -393
  588. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/engine.py +0 -333
  589. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/forward.py +0 -139
  590. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/io_utils.py +0 -231
  591. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/parallel_adjoint.py +0 -506
  592. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/strategy.py +0 -1012
  593. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/types.py +0 -291
  594. tidy3d-2.13.0.dev0/tidy3d/web/api/autograd/utils.py +0 -179
  595. tidy3d-2.13.0.dev0/tidy3d/web/api/cacert.pem +0 -4527
  596. tidy3d-2.13.0.dev0/tidy3d/web/api/container.py +0 -4437
  597. tidy3d-2.13.0.dev0/tidy3d/web/api/material_library.py +0 -64
  598. tidy3d-2.13.0.dev0/tidy3d/web/api/mode.py +0 -796
  599. tidy3d-2.13.0.dev0/tidy3d/web/api/run.py +0 -347
  600. tidy3d-2.13.0.dev0/tidy3d/web/api/task_api.py +0 -1581
  601. tidy3d-2.13.0.dev0/tidy3d/web/api/tidy3d_stub.py +0 -236
  602. tidy3d-2.13.0.dev0/tidy3d/web/api/webapi.py +0 -488
  603. tidy3d-2.13.0.dev0/tidy3d/web/api/workflow_batch.py +0 -834
  604. tidy3d-2.13.0.dev0/tidy3d/web/cache.py +0 -1048
  605. tidy3d-2.13.0.dev0/tidy3d/web/cli/develop/packaging.py +0 -122
  606. tidy3d-2.13.0.dev0/tidy3d/web/core/cache.py +0 -6
  607. tidy3d-2.13.0.dev0/tidy3d/web/core/client_identity.py +0 -51
  608. tidy3d-2.13.0.dev0/tidy3d/web/core/exceptions.py +0 -19
  609. tidy3d-2.13.0.dev0/tidy3d/web/core/http_util.py +0 -334
  610. tidy3d-2.13.0.dev0/tidy3d/web/core/s3utils.py +0 -476
  611. tidy3d-2.13.0.dev0/tidy3d/web/core/task_core.py +0 -1204
  612. tidy3d-2.13.0.dev0/tidy3d/web/core/task_info.py +0 -341
  613. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/AGENTS.md +0 -0
  614. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/CLAUDE.md +0 -0
  615. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/COPYRIGHT +0 -0
  616. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/LICENSE +0 -0
  617. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/changelog.d/README.md +0 -0
  618. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/changelog.d/template.md +0 -0
  619. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/dev.Dockerfile +0 -0
  620. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/schemas/README.md +0 -0
  621. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/README.md +0 -0
  622. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/__main__.py +0 -0
  623. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/_rf_migration.py +0 -0
  624. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/_runtime.py +0 -0
  625. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/_testing/__init__.py +0 -0
  626. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/compat.py +0 -0
  627. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/README.md +0 -0
  628. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/__init__.py +0 -0
  629. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/boxes.py +0 -0
  630. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/field_map.py +0 -0
  631. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/field_source_pca.py +0 -0
  632. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/field_source_temporal.py +0 -0
  633. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/functions.py +0 -0
  634. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/monitor_names.py +0 -0
  635. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/parallel_adjoint_bases.py +0 -0
  636. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/snapping.py +0 -0
  637. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/spacing.py +0 -0
  638. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/autograd/utils.py +0 -0
  639. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/base_sim/__init__.py +0 -0
  640. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/base_sim/data/__init__.py +0 -0
  641. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/base_sim/data/monitor_data.py +0 -0
  642. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/base_sim/source.py +0 -0
  643. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/__init__.py +0 -0
  644. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/em_fields.py +0 -0
  645. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/index.py +0 -0
  646. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/README.md +0 -0
  647. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/_constants.py +0 -0
  648. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/_types.py +0 -0
  649. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/_utils.py +0 -0
  650. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/field/_em_algebra.py +0 -0
  651. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/field/_em_grid.py +0 -0
  652. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/field/_em_io.py +0 -0
  653. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/field/_em_metrics.py +0 -0
  654. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/field/electromagnetic.py +0 -0
  655. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/field/time.py +0 -0
  656. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/flux.py +0 -0
  657. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/mode/__init__.py +0 -0
  658. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/mode/data.py +0 -0
  659. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/mode/overlap.py +0 -0
  660. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/mode/time.py +0 -0
  661. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/projection/__init__.py +0 -0
  662. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/projection/_types.py +0 -0
  663. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/projection/angle.py +0 -0
  664. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/projection/cartesian.py +0 -0
  665. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/projection/diffraction.py +0 -0
  666. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/monitor_data/projection/kspace.py +0 -0
  667. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/point_cloud.py +0 -0
  668. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/unstructured/__init__.py +0 -0
  669. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/unstructured/surface.py +0 -0
  670. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/unstructured/tetrahedral.py +0 -0
  671. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/unstructured/triangular.py +0 -0
  672. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/validators.py +0 -0
  673. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/data/zbf.py +0 -0
  674. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/diffraction.py +0 -0
  675. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/docstrings.py +0 -0
  676. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/eme/__init__.py +0 -0
  677. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/eme/data/__init__.py +0 -0
  678. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/eme/data/monitor_data.py +0 -0
  679. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/eme/data/stage.py +0 -0
  680. {tidy3d-2.13.0.dev0/tidy3d/components/geometry → tidy3d-2.13.0.dev1/tidy3d/components/fast_heat}/__init__.py +0 -0
  681. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/field_projection/README.md +0 -0
  682. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/field_projection/__init__.py +0 -0
  683. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/field_projection/approximate_angle.py +0 -0
  684. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/field_projection/approximate_paired.py +0 -0
  685. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/field_projection/common.py +0 -0
  686. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/field_projection/exact.py +0 -0
  687. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/file_util.py +0 -0
  688. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/frequencies.py +0 -0
  689. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/geometry/base/utils.py +0 -0
  690. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/geometry/float_utils.py +0 -0
  691. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/geometry/triangulation.py +0 -0
  692. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/geometry/vertex_utils.py +0 -0
  693. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/__init__.py +0 -0
  694. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/corner_finder.py +0 -0
  695. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/grid_1d/__init__.py +0 -0
  696. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/grid_1d/auto.py +0 -0
  697. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/grid_1d/base.py +0 -0
  698. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/refinement/edges.py +0 -0
  699. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/refinement/gaps.py +0 -0
  700. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/refinement/inplane.py +0 -0
  701. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/spec/__init__.py +0 -0
  702. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/spec/entities.py +0 -0
  703. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/spec/factories.py +0 -0
  704. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/spec/localization.py +0 -0
  705. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/spec/model.py +0 -0
  706. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/grid_spec/spec/sizing.py +0 -0
  707. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/grid/yee_areas.py +0 -0
  708. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/index.py +0 -0
  709. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/material/README.md +0 -0
  710. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/material/__init__.py +0 -0
  711. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/material/tcad/__init__.py +0 -0
  712. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/material/tensor_rotation.py +0 -0
  713. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/material/types.py +0 -0
  714. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/medium/README.md +0 -0
  715. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/medium/custom/__init__.py +0 -0
  716. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/medium/roughness.py +0 -0
  717. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/__init__.py +0 -0
  718. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/base.py +0 -0
  719. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/data/__init__.py +0 -0
  720. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/data/data_array.py +0 -0
  721. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/data/dataset.py +0 -0
  722. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/data/monitor_data.py +0 -0
  723. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/formulas/__init__.py +0 -0
  724. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/formulas/circuit_parameters.py +0 -0
  725. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/impedance_spec.py +0 -0
  726. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/mode_spec.py +0 -0
  727. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/monitor.py +0 -0
  728. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/path_integrals/__init__.py +0 -0
  729. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/path_integrals/factory.py +0 -0
  730. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/path_integrals/integrals/__init__.py +0 -0
  731. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/path_integrals/integrals/base.py +0 -0
  732. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/path_integrals/specs/__init__.py +0 -0
  733. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/path_integrals/specs/base.py +0 -0
  734. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/path_integrals/types.py +0 -0
  735. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/path_integrals/viz.py +0 -0
  736. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/microwave/types.py +0 -0
  737. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/mode/LICENSE +0 -0
  738. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/mode/__init__.py +0 -0
  739. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/mode/data/__init__.py +0 -0
  740. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/mode/derivatives.py +0 -0
  741. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/mode/transforms.py +0 -0
  742. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/run_time_spec.py +0 -0
  743. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/simulation/README.md +0 -0
  744. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/source/__init__.py +0 -0
  745. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/source/frame.py +0 -0
  746. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/source/freq_range.py +0 -0
  747. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/spice/__init__.py +0 -0
  748. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/spice/analysis/__init__.py +0 -0
  749. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/spice/sources/__init__.py +0 -0
  750. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/spice/sources/types.py +0 -0
  751. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/spice/types.py +0 -0
  752. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/subpixel_spec.py +0 -0
  753. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/__init__.py +0 -0
  754. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/analysis/__init__.py +0 -0
  755. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/boundary/__init__.py +0 -0
  756. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/boundary/abstract.py +0 -0
  757. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/boundary/specification.py +0 -0
  758. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/data/__init__.py +0 -0
  759. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/data/monitor_data/__init__.py +0 -0
  760. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/data/monitor_data/abstract.py +0 -0
  761. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/data/monitor_data/heat.py +0 -0
  762. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/data/monitor_data/mesh.py +0 -0
  763. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/effective_DOS.py +0 -0
  764. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/monitors/__init__.py +0 -0
  765. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/monitors/heat.py +0 -0
  766. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/simulation/__init__.py +0 -0
  767. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/simulation/heat.py +0 -0
  768. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/source/__init__.py +0 -0
  769. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/source/coupled.py +0 -0
  770. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/source/heat.py +0 -0
  771. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/tcad/viz.py +0 -0
  772. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/time.py +0 -0
  773. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/types/__init__.py +0 -0
  774. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/types/base.py +0 -0
  775. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/types/mode_spec.py +0 -0
  776. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/types/simulation.py +0 -0
  777. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/types/utils.py +0 -0
  778. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/types/workflow.py +0 -0
  779. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/viz/flex_color_palettes.py +0 -0
  780. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/viz/layout.py +0 -0
  781. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/viz/plot_params.py +0 -0
  782. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/viz/styles.py +0 -0
  783. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/components/viz/visualization_spec.py +0 -0
  784. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/config/__init__.py +0 -0
  785. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/config/deprecations.py +0 -0
  786. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/config/loader.py +0 -0
  787. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/config/manager.py +0 -0
  788. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/config/migrations.py +0 -0
  789. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/config/registry.py +0 -0
  790. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/config/schema_utils.py +0 -0
  791. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/__init__.py +0 -0
  792. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/adam_optimizer/__init__.py +0 -0
  793. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/adam_optimizer/task.py +0 -0
  794. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/eme/__init__.py +0 -0
  795. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/eme/data.py +0 -0
  796. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/fdtd/__init__.py +0 -0
  797. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/file/__init__.py +0 -0
  798. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/heat/__init__.py +0 -0
  799. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/heat/data.py +0 -0
  800. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/heat_charge/__init__.py +0 -0
  801. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/heat_charge/data.py +0 -0
  802. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/mode/__init__.py +0 -0
  803. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/mode/data.py +0 -0
  804. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/mode_solver/__init__.py +0 -0
  805. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/mode_solver/data.py +0 -0
  806. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/volume_mesh/__init__.py +0 -0
  807. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/volume_mesh/data.py +0 -0
  808. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/em/translate/volume_mesh/task.py +0 -0
  809. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/exceptions.py +0 -0
  810. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/material_library/__init__.py +0 -0
  811. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/material_library/parametric_materials.py +0 -0
  812. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/material_library/util.py +0 -0
  813. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/__init__.py +0 -0
  814. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/autograd/__init__.py +0 -0
  815. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/autograd/constants.py +0 -0
  816. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/autograd/differential_operators.py +0 -0
  817. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/autograd/invdes/__init__.py +0 -0
  818. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/autograd/invdes/misc.py +0 -0
  819. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/autograd/invdes/penalties.py +0 -0
  820. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/autograd/optimizers.py +0 -0
  821. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/autograd/primitives/__init__.py +0 -0
  822. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/autograd/primitives/interpolate.py +0 -0
  823. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/design/README.md +0 -0
  824. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/design/__init__.py +0 -0
  825. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/design/design.py +0 -0
  826. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/design/parameter.py +0 -0
  827. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/design/result.py +0 -0
  828. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/dipole_emission/README.md +0 -0
  829. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/dipole_emission/__init__.py +0 -0
  830. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/dipole_emission/constants.py +0 -0
  831. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/dipole_emission/data.py +0 -0
  832. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/dipole_emission/study.py +0 -0
  833. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/dispersion/__init__.py +0 -0
  834. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/dispersion/fit_fast.py +0 -0
  835. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/dispersion/fit_web.py +0 -0
  836. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/expressions/README.md +0 -0
  837. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/expressions/__init__.py +0 -0
  838. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/expressions/base.py +0 -0
  839. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/expressions/functions.py +0 -0
  840. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/expressions/metrics.py +0 -0
  841. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/expressions/operators.py +0 -0
  842. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/expressions/types.py +0 -0
  843. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/expressions/variables.py +0 -0
  844. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/invdes/base.py +0 -0
  845. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/invdes/contours.py +0 -0
  846. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/invdes/penalty.py +0 -0
  847. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/invdes/result.py +0 -0
  848. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/invdes/self_intersection.py +0 -0
  849. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/invdes/utils.py +0 -0
  850. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/invdes/validators.py +0 -0
  851. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/klayout/drc/README.md +0 -0
  852. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/klayout/drc/__init__.py +0 -0
  853. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/klayout/drc/batch.py +0 -0
  854. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/klayout/drc/defaults.py +0 -0
  855. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/klayout/drc/drc.py +0 -0
  856. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/klayout/drc/results.py +0 -0
  857. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/klayout/util.py +0 -0
  858. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/microwave/__init__.py +0 -0
  859. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/mode/LICENSE +0 -0
  860. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/mode/README.md +0 -0
  861. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/mode/__init__.py +0 -0
  862. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/mode/mode_solver.py +0 -0
  863. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/mode/web.py +0 -0
  864. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/polyslab/__init__.py +0 -0
  865. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/polyslab/polyslab.py +0 -0
  866. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/pytorch/README.md +0 -0
  867. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/pytorch/__init__.py +0 -0
  868. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/resonance/__init__.py +0 -0
  869. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/__init__.py +0 -0
  870. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/analysis/__init__.py +0 -0
  871. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/analysis/antenna.py +0 -0
  872. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/analysis/modal.py +0 -0
  873. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/analysis/terminal.py +0 -0
  874. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/component_modelers/__init__.py +0 -0
  875. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/component_modelers/modal.py +0 -0
  876. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/component_modelers/terminal.py +0 -0
  877. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/component_modelers/types.py +0 -0
  878. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/component_modelers/viz.py +0 -0
  879. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/data/__init__.py +0 -0
  880. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/data/base.py +0 -0
  881. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/data/data_array.py +0 -0
  882. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/data/modal.py +0 -0
  883. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/data/terminal.py +0 -0
  884. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/data/types.py +0 -0
  885. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/ports/__init__.py +0 -0
  886. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/ports/base.py +0 -0
  887. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/ports/base_lumped.py +0 -0
  888. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/ports/base_terminal.py +0 -0
  889. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/ports/coaxial_lumped.py +0 -0
  890. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/ports/modal.py +0 -0
  891. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/ports/rectangular_lumped.py +0 -0
  892. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/ports/types.py +0 -0
  893. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/ports/wave.py +0 -0
  894. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/types.py +0 -0
  895. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/smatrix/utils.py +0 -0
  896. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/waveguide/__init__.py +0 -0
  897. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/plugins/waveguide/rectangular_dielectric.py +0 -0
  898. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/py.typed +0 -0
  899. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/rf.py +0 -0
  900. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/style.mplstyle +0 -0
  901. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/system.py +0 -0
  902. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/updater.py +0 -0
  903. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/__init__.py +0 -0
  904. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/asynchronous.py +0 -0
  905. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/autograd/__init__.py +0 -0
  906. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/autograd/flux_monitor.py +0 -0
  907. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/autograd/hooks.py +0 -0
  908. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/connect_util.py +0 -0
  909. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/container_types.py +0 -0
  910. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/container_utils.py +0 -0
  911. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/material_fitter.py +0 -0
  912. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/run_options.py +0 -0
  913. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/states.py +0 -0
  914. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/api/workflow_dependencies.py +0 -0
  915. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/__init__.py +0 -0
  916. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/app.py +0 -0
  917. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/cache.py +0 -0
  918. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/config.py +0 -0
  919. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/constants.py +0 -0
  920. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/develop/__init__.py +0 -0
  921. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/develop/documentation.py +0 -0
  922. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/develop/index.py +0 -0
  923. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/develop/install.py +0 -0
  924. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/develop/tests.py +0 -0
  925. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/develop/utils.py +0 -0
  926. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/diagnostics.py +0 -0
  927. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/mcp.py +0 -0
  928. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/cli/readme.md +0 -0
  929. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/common.py +0 -0
  930. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/core/__init__.py +0 -0
  931. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/core/account.py +0 -0
  932. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/core/constants.py +0 -0
  933. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/core/core_config.py +0 -0
  934. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/core/file_util.py +0 -0
  935. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/core/stub.py +0 -0
  936. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/core/types.py +0 -0
  937. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/diagnostics.py +0 -0
  938. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/execution_cost_limit.py +0 -0
  939. {tidy3d-2.13.0.dev0 → tidy3d-2.13.0.dev1}/tidy3d/web/license.py +0 -0
@@ -0,0 +1,2730 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ <!-- Maintainer note: do not edit this file directly in regular PRs. Add Towncrier fragments in changelog.d/ and follow changelog.d/README.md. -->
9
+
10
+ <!-- towncrier release notes start -->
11
+
12
+ ## [2.13.0.dev1] - 2026-11-04
13
+
14
+ ### Added
15
+
16
+ - Added `EMEModeSolverMonitor.direction`, `EMESimulationData.port_modes_backward` and directional basis conversion for EME cells with distinct forward and backward modes.
17
+ - For EME results with `port_modes_backward`, `smatrix_in_basis` requires paired forward/backward bases per changed port, while `field_in_basis` also accepts a basis matching the excitation direction; these conversions require `tidy3d-extras` and an EME license.
18
+ - `CurrentBC` now drives charge contacts by total terminal current and solves their potentials, with support for multiple current-driven contacts, ohmic and Schottky contacts, and one swept `DCCurrentSource.current` on the accelerated charge solver.
19
+ - Current-driven contacts support small-signal analysis as open circuits, except isolated zero-current contacts, which must be the only current-driven contact and warn that their potential depends on the initial state.
20
+ - An ohmic `CurrentBC` may share a placement with `SurfaceRecombinationBC` or reach a heterojunction, but cannot do both; a nonzero current on a contact with no path to another contact is rejected.
21
+ - Current-sweep results are indexed by the solved potential of the swept contact.
22
+ - Added loss current density `Jx_loss`/`Jy_loss`/`Jz_loss` on `FieldStructureData` and `colocate_loss_current_density(...)` to place the components on common coordinates.
23
+ - Added `ProtectedDopingRef` for hosted charge simulations with surrogate-only local previews and encrypted doping profiles carried in HDF5; optical simulations and mode calculations ignore these references.
24
+ - Hosted charge runs with `ProtectedDopingRef` require the accelerated solver and at least two voltage points, allow only whole-domain `SteadyCapacitanceMonitor` recording, and omit solver logs and residual/CFL traces.
25
+ - Added `SimulationData.specific_absorption_rate(...)` and `specific_absorption_rate_from_densities(...)` for point SAR in W/kg using a `FieldStructureMonitor` and material mass densities.
26
+ - SAR calculations require mass densities for absorbing media, supplied by their heat media or explicitly in kg/um^3; 2D materials, lumped elements and automatic PEC frames contribute zero.
27
+ - Added `ProtectedOpticalMediumRef` for hosted FDTD and `ModeSimulation` with surrogate-only local previews and encrypted HDF5 payloads; JSON/YAML contain placeholders, and local solving, adjoint workflows and result renormalization are unsupported.
28
+ - Added `SurfaceFieldStructureMonitor` and `SurfaceFieldStructureData` for surface fields and electromagnetic surface-loss density on PEC and lossy-metal structures, including symmetry and overlap with 2D materials, lumped elements and automatic PEC frames.
29
+ - Added `SimulationData.per_structure_loss(...)` for surface and volumetric electromagnetic losses by structure in 3D; supply the corresponding monitors at matching frequencies, with unsampled losses reported as NaN.
30
+ - Added `ModeStructureMonitor`, `ModeStructureData` and `ModeSimulationData.field_structure(...)`, `optical_generation(...)` and `per_component_optical_generation(...)` for structure-resolved mode optical generation; the monitor requires `colocate=False` and all three electric-field components.
31
+ - Added experimental meshing for 3D heat, charge and conduction simulations through `mesher="experimental"` on unstructured grid specifications; `AutoUnstructuredGrid` is unsupported.
32
+ - The `TriangleMesh` constructors `from_stl`, `from_trimesh`, `from_triangles`, `from_vertices_faces`, `from_height_grid` and `from_height_function` take `remove_degenerate_faces` to remove near-zero-area triangles before building the mesh.
33
+ - Added automatic differentiation for `GeometryArray` base-geometry parameters, instance offsets and invertible instance transforms, and for geometry parameters and invertible affine matrices in `Transformed`.
34
+ - Added autograd support for `PolySlab.bulges`, and for `vertices` and `slab_bounds` of arc-containing `PolySlab`s, when `sidewall_angle=0` and `dilation=0`.
35
+ - Added `LombardiSurfaceDependence` through `CaugheyThomasMobility.surface_dependence` and `MasettiMobility.surface_dependence` for accelerated charge simulations; these models now serialize the field, so new files do not load in older clients.
36
+ - Added `TransferredElectronFieldDependence`, a high-field mobility model with the negative differential mobility of direct-gap III-V semiconductors, driven by the electric field or the quasi-Fermi gradient and selectable through `field_dependence` alongside `CanaliFieldDependence` (accelerated charge solver only).
37
+ - Added autograd gradients for supported `ThinLensBeam` parameters and `ThinLensOverlapMonitor` amplitudes in fixed homogeneous, isotropic, lossless plane media.
38
+ - Added `AlloyMobility`, the low-field mobility of a III-V alloy harmonically interpolated between two `CaugheyThomasMobility` end members by mole fraction, with an optional alloy-scattering term (accelerated charge solver only).
39
+ - Added temperature-dependent thermal conductivity and heat capacity on `SolidMedium`, including anisotropic conductivity and `InversePolynomialConductivity.from_resistivity(...)` for thermal-resistivity fits.
40
+ - Temperature-dependent thermal properties support heat simulations with conduction heat sources and accelerated self-heating charge simulations; models are clamped to `temperature_range`, and heat capacity has no effect in steady charge analyses.
41
+ - `SteadyGenerationRecombinationData` now reports active `shockley_reed_hall`, `auger`, `radiative`, `band_to_band_tunneling` and `distributed_generation` rates alongside `impact_ionization`, summing to `net_recombination`.
42
+ - Added quasi-Fermi-gradient-driven velocity saturation through `CanaliFieldDependence.driving_force` and `reference_density` on the accelerated charge solver; the default remains `"electric_field"`, and quasi-Fermi-driven DC solves may take up to twice as long.
43
+ - `CanaliFieldDependence` now serializes `driving_force`, so files written by this version do not load in older clients.
44
+ - Added `HeterojunctionSurfaceShockleyReedHallRecombination` and `HeterojunctionCaptureSide` for interface-trap recombination at a heterojunction, with per-side capture velocities.
45
+ - Added `LVSRunner` and `LVSResults` to the KLayout plugin for running KLayout's layout versus schematic (LVS) checks and loading their results.
46
+ - Added `Simulation.check_ports_reach_pml()` to identify mode ports whose connected structures do not span the absorbing layer, accounting for extrusion and grouped or unioned geometries.
47
+ - Set `config.validation.check_ports_reach_pml=True` for pre-upload mode-port warnings in full validation; warnings are disabled by default and skipped in fast mode, while the helper remains callable in any validation mode.
48
+ - Added second-order subpixel-smoothed projection through `smoothed_projection(..., order=2)` and `projection="ssp2"` in autograd and inverse-design filter-and-project helpers.
49
+ - Filter-and-project helpers also accept `projection="ssp1"` and periodic SSP derivatives with `padding="wrap"`; the design plugin requires 2D grids with equal physical cell spacing.
50
+ - Added `AnisotropicPermittivity` for charge media on the accelerated solver, with principal values and rotation or `from_components(...)` tensor construction and plotting of global-frame components.
51
+ - For strongly anisotropic charge permittivity, `linear_solver="direct"` is recommended; conduction simulations still require scalar permittivity.
52
+ - The accelerated charge solver warns when the `MasettiMobility` formula is not positive at some nodes for the local temperature and doping, where it sets the mobility to zero.
53
+ - Added `FieldStructureTimeMonitor` and `FieldStructureTimeData` for time-domain fields, static-conductivity loss current and power density, and instantaneous per-structure loss through `SimulationData.per_structure_loss(...)`.
54
+ - Time-domain loss reports NaN with a warning for lossy dispersive or nonlinear media and for surface-impedance metals without surface-loss recording; fully anisotropic and time-modulated media are unsupported.
55
+ - Added `record_in_pml=False` to field, medium, permittivity, flux and field-projection monitors to exclude PML/absorber layers from recordings and integration surfaces; the default is `True`, and the option is unavailable in `EMESimulation` and `ModeSimulation`.
56
+ - On the accelerated charge solver, a self-heating charge simulation now accepts `AnisotropicConductivity`, `RadiationBC`, a `ConvectionBC` with a positive `emissivity`, `ThermalContactResistance` except between two semiconductors or on a conductor, and `SolidMedium.velocity` except on a semiconductor.
57
+ - Added company shared workspace selection through `config.workspace.default` and helpers to move or duplicate tasks, list workspaces and members, and inspect activity; private remains the default workspace.
58
+ - `Simulation` accepts `LumpedVoltageSource`, the ideal voltage source FlexRF provides, and before upload rejects one that cannot set its voltage where the grid places it.
59
+ - Added `bh_strategy`, `velocity_clamp` and `init_velocity` to `tidy3d.plugins.design.MethodParticleSwarm`, exposing the pyswarms boundary handling, velocity clamp and initial swarm velocities.
60
+ - Added `ChargeToleranceSpec.linear_rel_tol`, the factor by which the iterative linear solver reduces the residual of the linear system at each nonlinear iteration of a charge simulation (default `1e-2`).
61
+ - Log remote simulation cache hits when `verbose=True` and correctly report their zero cost.
62
+ - `SurfaceFieldTimeMonitor` now accepts `sampling_dt` and `num_samples` to set its recording cadence in physical time or as a sample count, like `FieldTimeMonitor` and `FluxTimeMonitor`.
63
+ - With the accelerated charge solver, `SelberherrImpactIonization(formulation="GradQuasiFermi")` now also runs with self-heating and prescribed-temperature analyses (`SteadyChargeDCAnalysis`, `SSACAnalysis`), evaluating the quasi-Fermi levels at the local lattice temperature.
64
+ - Added incomplete dopant ionization through `SemiconductorMedium.donor_ionization` and `acceptor_ionization`, with `PearsonBardeenIonization`, `AltermattSchenkIonization`, `MultiSiteIonization` and `SteadyDopingMonitor` on the accelerated charge solver.
65
+ - Incomplete-ionization capacitance includes carriers bound to dopants, and `SlotboomBandGapNarrowing` preserves its fitted equilibrium minority-carrier density; media without an ionization model are unchanged.
66
+ - Added `DeviceCharacteristics.ac_photocurrent_voltage`, `ac_admittance_voltage` and `ac_capacitance_voltage` for accelerated charge small-signal analyses, reporting the response at the `SSACVoltageSource` contact versus bias and frequency.
67
+ - With `DistributedGeneration`, `ac_photocurrent_voltage` reports short-circuit photocurrent per unit generation-modulation depth for photodetector responsivity and transit-limited bandwidth calculations.
68
+ - Added Pockels and DC Kerr electro-optic perturbations through `ElectroOpticPerturbation` and `PerturbationAnisotropicMedium`, using `perturbed_mediums_copy(electric_field=...)`; only diagonal impermeability changes in simulation coordinates are applied.
69
+
70
+ ### Changed
71
+
72
+ - When passing `field_dependence` as a dictionary to a mobility model, include `"type": "CanaliFieldDependence"` or `"type": "TransferredElectronFieldDependence"`; passing model objects and loading saved simulations are unaffected.
73
+ - When passing `SurfaceRecombinationBC.model` as a dictionary, include `"type": "SurfaceShockleyReedHallRecombination"` or `"type": "HeterojunctionSurfaceShockleyReedHallRecombination"`; passing model objects and loading saved simulations are unaffected.
74
+ - On EME results without backward port modes, `smatrix_in_basis` and `field_in_basis` now reject a single backward basis; local EME requires forward mode data and rejects cells with non-diagonal `FullyAnisotropicMedium`, which should be run on the server.
75
+ - `SemiconductorMedium` materials whose `N_c`, `N_v`, `E_g` and `electron_affinity` agree within a 1e-12 relative tolerance, including ones that differ only in `attrs` or in the form of an equal effective DOS, now meet as a same-material junction, which accepts `SurfaceShockleyReedHallRecombination` and has no thermionic emission.
76
+ - A self-heating `SteadyChargeDCAnalysis` or `SSACAnalysis` no longer requires a `TemperatureMonitor`, and warns when no `TemperatureBC` or `ConvectionBC` removes the heat or a semiconductor has no `heat` medium.
77
+ - Sped up autograd tracer detection for models containing large numeric data arrays.
78
+ - Updated EME FlexCredit, runtime, memory and storage estimates for anisotropic cells requiring distinct forward and backward modes, including frequency interpolation.
79
+ - `CurrentBC.source` now specifies total terminal current in amperes, or amperes per micron of device depth in 2D, and symmetry applies to the whole-device current rather than a manually reduced current.
80
+ - An isothermal or prescribed-temperature charge analysis now warns about heat boundary conditions and heat sources, which it never applied.
81
+ - Sped up loading individual monitors from large result files.
82
+ - Rejected `symmetry` along the zero-size axis of a 2D `HeatChargeSimulation`, which the solvers could not mesh.
83
+ - A charge simulation now rejects a semiconductor whose electron and hole mobility models are of different types, which the solver refused only after submission.
84
+ - On the accelerated charge solver, a missing `electron_affinity` that decides the band offset between two semiconductors now warns.
85
+ - A `SemiconductorMedium.R` that lists a mechanism twice, except `DistributedGeneration`, now warns that only one entry is used.
86
+ - Multifrequency diffraction objectives in periodic simulations can now share adjoint runs when their in-plane wavevectors match.
87
+ - Reduced Tidy3D import time, including in the web GUI.
88
+ - Sped up autograd gradient computation and reduced its peak memory for `CustomMedium` gradients.
89
+ - Sped up structure plots (`plot`, `plot_eps`, and heat/charge property plots) for scenes with many structures or large `GeometryGroup`s.
90
+ - `HeatChargeSimulation` warns when all its contact entries name one metal structure with one source, since the charge simulation then has a single terminal.
91
+ - `FieldStructureMonitor` now supports overlap with 2D materials, lumped elements and automatic PEC frames; lumped elements and PEC frames use `structure_index=-2`.
92
+ - A self-heating charge simulation now warns that the heat medium of a `ChargeConductorMedium` is not used, since conductors take no part in its heat solve.
93
+ - `Medium2D.volumetric_equivalent` now returns `Medium` for constant-conductivity components, reducing time-stepping cost for lumped resistors, parallel RC networks and conductive 2D sheets without unnecessary pole-residue terms.
94
+ - With the accelerated charge solver, `HeatChargeSimulation` now warns when two `SemiconductorMedium` media that may meet have the same `N_c`, `N_v`, `E_g` and `electron_affinity` but a different `delta_E_g`, a difference that acts as a voltage source where they meet.
95
+ - Baseband source times now derive their characteristic frequency and `frequency_range()` from their fastest 10%-to-90% transition, so automatic grids without a `wavelength` resolve the transitions and mode sources solve at that frequency; the new optional `freq0` sets the frequency explicitly and is needed for steeply angled plane waves.
96
+ - Sped up `PolySlab.inside` for polygon slabs with a slanted sidewall (`sidewall_angle != 0`).
97
+ - Avoided loading web dependencies when importing `tidy3d.plugins.dispersion`.
98
+
99
+ ### Fixed
100
+
101
+ - Fixed EME mode matching, backward propagation and port-mode normalization for non-diagonal `FullyAnisotropicMedium` and anisotropic bends with `bend_medium_frame="global"`, keeping lossy port modes consistent with the S-matrix basis.
102
+ - Fixed overestimated gradients with respect to uniform medium parameters for structures crossing a periodic or Bloch boundary.
103
+ - On the accelerated charge solver, a doping box that ends on a contact or on a boundary of a semiconductor now dopes the nodes on that boundary, which rounding of the box bounds could leave undoped and turn an ohmic contact into a barrier.
104
+ - Fixed the electric field and current density of 2D charge simulations with `use_accelerated_solver=True` in the xz or yz plane, which dropped their z component.
105
+ - `HeatChargeSimulation` accepts a swept or SSAC-driven metal named by several `boundary_spec` entries with the same source on the accelerated charge solver.
106
+ - Corrected the sign of `DeviceCharacteristics.steady_dc_electron_capacitance` to match `SteadyCapacitanceData.electron_capacitance`, making both electron and hole capacitances positive in reverse bias.
107
+ - `Scene.plot_eps` and `Scene.eps_bounds` now plot static permittivity for charge-only `MultiPhysicsMedium`.
108
+ - Corrected complex-output gradients in the PyTorch wrapper.
109
+ - Fixed conversions between lossless `CustomMedium` and `CustomPoleResidue` models when conductivity is absent.
110
+ - Included custom-pulse delays in automatic simulation run times.
111
+ - Fixed `EMECoefficientMonitor` `n_complex` and `flux` data being stored under the wrong mode index in cells that drop an invalid mode, which also made `EMECoefficientDataset.normalized_copy` scale `A` and `B` by another mode's flux.
112
+ - Fixed the frequency scaling of gradients with respect to the imaginary part of a `CustomMedium.eps_dataset` for objectives at several frequencies.
113
+ - In a 2D charge simulation on the accelerated charge solver, doping boxes and `CustomDoping` or `DistributedGeneration` data that are finite along the out-of-plane axis are now taken at the simulation plane instead of losing a mesh-dependent part of the doping or generation.
114
+ - Fixed `DeviceCharacteristics` to report whole-device results for charge simulations with `symmetry` and `use_accelerated_solver=True`.
115
+ - Corrected the docs of `ChargeToleranceSpec.rel_tol`, the 2D `steady_dc_resistance_voltage` depth conversion and the `HurkxDirectBandToBandTunneling` example.
116
+ - Charge simulations now reject before upload Cartesian `TemperatureMonitor` recording and Cartesian `SteadyPotentialMonitor` recording in 2D or bias sweeps, preventing failed solves and incorrect recorded fields.
117
+ - `plot_structures_eps` with `scale="symlog"` and automatic limits no longer raises when the minimum permittivity is negative.
118
+ - Fixed autograd filters to preserve complex convolution results and constant-padding Gaussian-filter gradients, and to handle one-pixel conic filters and per-axis kernel sizes on inputs with singleton dimensions.
119
+ - Preserved `allow_gain` when converting between diagonal and fully anisotropic media.
120
+ - Avoided numerical cancellation when computing Gaussian pulse widths for narrow frequency ranges.
121
+ - An `InsulatingBC` that covers a contact face no longer replaces the contact, whatever the order of `boundary_spec`, unless its placement names the contact's metal.
122
+ - Fixed the `SteadyCapacitanceData` documentation to describe the central difference the capacitance uses.
123
+ - Fixed conductivity-axis resolution in fully anisotropic media with repeated principal permittivities.
124
+ - Fixed resonance analysis accepting mismatched sampling intervals by comparing time steps with a relative tolerance.
125
+ - A contact placed with `StructureStructureInterface` on one of several structures of one semiconductor medium no longer splits that medium at the faces between those structures, which with impact ionization could stop a sweep from converging.
126
+ - Preserved pixel positions and gradients in ramp projections.
127
+ - Fixed plotting of fully anisotropic media with principal permittivities or passive conductivities accepted within numerical tolerance.
128
+ - Fixed the potential reference on the accelerated charge solver to follow `VoltageBC`: the background semiconductor's electron affinity, otherwise that of the lowest-priority semiconductor structure.
129
+ - Preserved supplied medium settings in `Lorentz.from_nk` when the extinction coefficient is zero.
130
+ - The `GaussianDoping` documentation now gives the concentration at box edges and corners, and in a box thinner than twice `width` the plotted doping and the legacy charge solver now use the same profile as the accelerated charge solver.
131
+ - Preserved coordinates of singleton charge samples while accepting unlabeled singleton arrays in custom charge perturbations.
132
+ - Fixed `BacktrackingSafeUpdate` recovery for parameter arrays with different memory layouts.
133
+ - Fixed `IndexPerturbation.from_perturbation_delta_model` to evaluate delta values at the model reference frequency.
134
+ - Corrected the complex phase shown in perturbation plots.
135
+ - Preserved negative real permittivity in `DispersionFitter.from_complex_permittivity` when the imaginary part is omitted.
136
+ - Fixed optical permittivity queries, local mode solves and conductor-priority handling for `MultiPhysicsMedium` by using its optical component.
137
+ - `MultiPhysicsMedium` optical queries now report a missing `optical` field, and wrapping `Medium2D` is rejected at validation.
138
+ - Fixed zero `PolySlab.slab_bounds` gradients in two-dimensional simulations when the slice coordinate cannot be represented exactly in single precision.
139
+ - Fixed crashes in `PolySlab` geometry queries and plotting when its fields are traced by autograd; side-plane and tilted-plane intersections of a traced `PolySlab` now raise a clear error instead.
140
+ - Corrected temporal normalization of adjoint gradients for beam and custom field/current source parameters, including source bandwidth and forward normalization settings.
141
+ - Fixed `MasettiMobility` validation to check the high-doping asymptote at 300 K and the heat-boundary temperatures when the lattice temperature is solved for or not prescribed, instead of skipping the check.
142
+ - Fixed adjoint gradients for `PolySlab.slab_bounds` and axial `Cylinder.center`/`length` with a nonzero `sidewall_angle`.
143
+ - Fixed loading results without a solver log.
144
+ - Fixed `Simulation.to_gdstk`, `to_gds` and `to_gds_file` exports of structures extending infinitely across the export plane, including custom media, by clipping them to simulation bounds.
145
+ - Non-isothermal charge simulations now reject solids without a charge medium before upload; use `ChargeInsulatorMedium(permittivity=...)` for insulating solids, including the background, while isothermal charge simulations are unaffected.
146
+ - Fixed simulation PML warnings so each structure bound is checked against the boundary condition and PML thickness for its own axis and side.
147
+ - `HeatChargeSimulation` now logs each `linear_solver='direct'` warning once, instead of on every validation, so parameter sweeps and `Batch` runs no longer repeat it for every simulation.
148
+ - Fixed spurious growing modes in lossless mode solves, including magnetic-wall symmetry, and corrected normalization and orthogonalization weights at boundary cells and single-cell invariant axes.
149
+ - Fixed incorrect autograd gradients for `FieldMonitor` objectives in simulations with `symmetry`, including point monitors when `config.adjoint.parallel_run` is enabled.
150
+ - Fixed import-order-dependent failures with model subclasses, including inverse-design metrics.
151
+ - Fixed single-bias charge field monitors to use the same `voltage` coordinate as `device_characteristics`, including when a grounded contact is listed first.
152
+ - Fixed `HeatChargeSimulation.plot` and `plot_boundaries` boundary-condition plots for overlapping structures, multipart regions and holes; simulation results are unaffected.
153
+ - The Schottky barrier check on a `VarshniEnergyBandGap` semiconductor now uses the contact's lattice temperature, or the coldest heat-sink temperature in a self-heating run, instead of twice the simulation temperature.
154
+ - Fixed ohmic and Schottky contact voltage offsets with band-gap narrowing in accelerated charge simulations, shifting potential and energy-band outputs by up to half the local narrowing and potentially changing flat-band and breakdown voltages.
155
+ - Charge simulations combining `SlotboomBandGapNarrowing` with `fermi_dirac=True` no longer count carrier degeneracy twice, which changes results in regions doped above about 1e19 cm^-3.
156
+ - Broadband `PlaneWave` sources with a fixed in-plane wave vector (`FixedInPlaneKSpec`) in a dispersive background medium now inject the same in-plane wave vector at every frequency, the one their Bloch boundaries are set from.
157
+ - Corrected `PolySlab` vertex gradients in two-dimensional simulations and for nonzero `dilation` or `sidewall_angle`, including PEC cross-sections.
158
+ - Optical homogeneity checks for sources, monitors, field projection, and automatic absorbing boundaries ignore medium names and user attributes when the optical models match.
159
+ - Fixed local subpixel mode simulation results to use public Tidy3D data classes, allowing current and voltage integrals to accept the returned modes.
160
+ - Fixed `FieldProjector.from_near_field_data` projections from monitors extending into PML, including infinite monitors and windowed projections with `use_colocated_integration=False`.
161
+ - Fixed the accelerated charge solver giving the wrong current where two `SemiconductorMedium` media with the same band parameters and `delta_E_g` but different doping meet, such as separate n- and p-doped silicon media with `SlotboomBandGapNarrowing`.
162
+ - Fixed adjoint shape gradients next to acute or curved geometry edges, where the inside or outside permittivity was sampled on the wrong side of the adjacent face.
163
+ - `DiffractionData.amps` and `DiffractionData.power` now report zero for a diffraction order at frequencies where it is evanescent, and new runs also store zero diffraction fields there.
164
+ - Corrected shape gradients for PEC, PEC2D and surface-impedance lossy metals, including cutouts, dielectric contacts, uniform reciprocal anisotropic surroundings and two-dimensional simulations.
165
+ - Adjoint setup now warns when nearby metal, strongly curved surfaces, sources, monitors or unsupported surrounding media can reduce metal shape-gradient accuracy.
166
+ - Metal shape-gradient calculations now raise `AdjointError` before allocating data beyond `config.adjoint.memory_allotment_fraction` of available memory.
167
+ - Fixed `SelberherrImpactIonization` keeping the accelerated charge solver from converging at biases where the device current is negligible, such as a diode near 0 V or at low reverse bias, most often with the default `formulation="PQ"`; the generation-recombination monitor reports zero impact-ionization generation where both carrier currents are below numerical resolution.
168
+ - `DiffractionMonitor` amplitudes of nonzero orders no longer carry a grid-dependent phase error (about `pi * m / N` for order `m` with `N` cells per period).
169
+ - Fixed accelerated charge DC sweeps into strong inversion stopping short of thermal equilibrium, including MOS capacitors with no minority-carrier contact.
170
+ - Isothermal equilibrium sweeps without generation, tunneling or impact ionization now converge more quickly when contacts on connected semiconductor structures share one voltage, including on fine interface meshes.
171
+ - Fixed `EMESimulation` raising a generic `size` error instead of the `port_offsets` error when the two `port_offsets` add up to more than `size` along `axis`; the error now reports the offsets, their sum, and the size.
172
+ - Fixed `AutoGrid` failing with "AutoGrid coordinates ... do not match the simulation domain" when a snapping point lies on or within `dl_min` of a simulation edge, a structure extends past that edge, and unshadowed mesh overrides are present, as with `LayerRefinementSpec` corner refinement.
173
+ - Logging from several threads at once, as `Batch` uploads do, no longer fails intermittently inside the logger or mixes warning consolidation, capture or output suppression between threads.
174
+ - Corrected `cSi` material-library variant `Si_MultiPhysics` electron mobility from 1471 to 1417 cm²/V/s, reducing lightly doped values by up to 3.7%; set `mobility_n.mu=1471.0` to reproduce previous results.
175
+ - Fixed `PerturbationMedium.perturbed_copy` dropping the base `conductivity` of a lossy medium when its heat or charge perturbation changes only the permittivity, which made the perturbed medium lossless.
176
+ - Fixed `ComplexPolySlab.inside` misclassifying points at heights where the offset polygon self-intersects.
177
+ - Status checks, cost estimation, and monitoring of a blocked RF component modeler task now raise a `WebError` containing the server's block message.
178
+
179
+ ### Breaking Changes
180
+
181
+ - `CurrentBC` is no longer accepted in conduction simulations, on the non-accelerated charge solver, or on contacts touching only insulators.
182
+ - Constructing `BroadbandPulse` now requires the `tidy3d-extras` package, including when the pulse is not yet attached to a source.
183
+ - `ChargeInsulatorMedium`, `ChargeConductorMedium` and `SemiconductorMedium` no longer provide optical methods such as `eps_model`; read static `permittivity` instead and use `MultiPhysicsMedium(optical=..., charge=...)` for optical simulations.
184
+ - Charge media no longer accept `heat_spec` or optical settings (`frequency_range`, `allow_gain`, `nonlinear_spec`, `modulation_spec`); use `MultiPhysicsMedium(heat=..., charge=...)` for thermal coupling, while loaded legacy optical settings warn and are ignored.
185
+ - A `TriangleMesh` with near-zero-area triangles now fails validation instead of having those triangles removed automatically; pass `remove_degenerate_faces=True` to the constructor that builds it, such as `TriangleMesh.from_stl` or `TriangleMesh.from_triangles`, to remove them.
186
+ - `NumericalStructureConfig.compute_derivatives` no longer receives `derivative_helper`; the derivatives it needs are now declared as `NumericalDerivativeQuery` entries in `derivative_queries` and passed to it as `query_results`.
187
+ - `PointCloudFieldMonitor`, `PointCloudPermittivityMonitor` and `DipoleEmissionMonitor` are no longer `Box` subclasses; `center`, `size` and `bounds` are read-only and come from the bounding box of `points`.
188
+
189
+ ## [2.13.0.dev0] - 2026-09-30
190
+
191
+ ### Added
192
+
193
+ - Added `tidy3d.plugins.autograd.SafeUpdate` and `tidy3d.plugins.autograd.BacktrackingSafeUpdate`, integrated through `tidy3d.plugins.autograd.optimize(..., safe_update=...)`. The latter checks global backtracking candidates first, then optionally recovers the remaining update one parameter at a time. `bounds` and `safe_update` apply to the initial parameters before optimizer initialization and the first objective evaluation.
194
+ - `downsample` on `SpatialDataArray`, `TriangularGridDataset` and `TetrahedralGridDataset`, resampling a field onto a coarser uniform Cartesian grid.
195
+ - Added `tidy3d.plugins.klayout.BatchedDRCChecker` for hierarchical batched KLayout DRC and `max_results_per_cell` support in `tidy3d.plugins.klayout.DRCRunner.run()`, `tidy3d.plugins.klayout.run_drc_on_gds()`, and `tidy3d.plugins.klayout.DRCResults.load()`.
196
+ - Optional `downsample_dl` argument to `Scene.perturbed_mediums_copy` and `Simulation.perturbed_mediums_copy`, to help reduce custom medium size in large perturbed simulations.
197
+ - Added `AutoUnstructuredGrid` for TCAD meshing, including ratio-based baseline and targeted interface refinement, reference-relative manual region and line refinements, and helpers for mapping `DistanceUnstructuredGrid` sizing controls. The mapping preserves sizing parameters, but `AutoUnstructuredGrid` may refine explicit interface-boundary-condition surfaces that legacy `DistanceUnstructuredGrid` skipped.
198
+ - Field projection monitors, including `DirectivityMonitor`, accept `use_colocated_integration=False` to compute the far-field surface currents from fields at their native in-plane Yee-grid positions, including with `interval_space` spatial downsampling.
199
+ - Multi-mode `ModeABCBoundary`: pass a tuple of mode indices to `mode_index` to absorb several waveguide modes simultaneously at an `InternalAbsorber`. `primary_mode_index` selects the expected dominant mode and `tolerance` groups modes whose effective index is near-equal to the primary mode's at the central absorption frequency. The multi-mode form is only valid as `InternalAbsorber.boundary_spec`; the single-integer form is unchanged and remains valid as a domain boundary. A multi-mode absorber must also keep at least two grid cells between itself and the domain boundary it samples: below itself when absorbing in `+`, above when absorbing in `-`.
200
+ - `FieldTimeMonitor` and `FluxTimeMonitor` can now specify their temporal recording cadence by physical time (`sampling_dt`, seconds) or by a fixed number of uniformly spaced samples (`num_samples`), as alternatives to the integer-step `interval`. The three fields are mutually exclusive; an unset cadence still defaults to `interval=1`, so switching an existing monitor to a physical cadence requires clearing the interval in the same update, e.g. `monitor.updated_copy(interval=None, sampling_dt=...)`. Cadences finer than the simulation time step are clamped to one sample per step, and the field-decay shutoff can end the recording before the requested schedule completes.
201
+ - A `FieldStructureMonitor` and its `FieldStructureData` record matched electric field, diagonal complex permittivity, and per-Yee-component structure-ownership maps on their native Yee grids, exposing the derived displacement field `Dx`/`Dy`/`Dz` (in E-field units, with `colocate_displacement`) and `absorbed_power_density`. `SimulationData.plot_field(...)` also accepts these displacement components and `'D'` (their vector magnitude). `SimulationData.optical_generation(...)` turns that data into an `OpticalGenerationData` with absorbed power, band-gap-gated `generation_rate`, and `thermalization_heat_rate`, ready to feed the Heat/Charge solvers via `DistributedGeneration`/`HeatSource` for coupled optical→charge/heat workflows. `SimulationData.per_component_optical_generation(...)` returns the same quantities per electric-field component on each native Yee grid (no colocation), each tagged with its `component`, for interface-accurate per-component downstream use.
202
+ - Added experimental, opt-in PCA compression for compatible point, line, and planar
203
+ ``FieldData``-derived adjoint current sources with exact matching frequency and component sets.
204
+ Enable it with ``config.adjoint.field_source_reduction_mode = "pca"``; the default ``0.999``
205
+ energy coverage permits approximate compression, while ``1.0`` retains the full numerical rank.
206
+ - Added the material-local quasi-Fermi-gradient formulation to the Selberherr impact-ionization model for accelerated isothermal charge simulations in two and three dimensions.
207
+ - `SelfHeatingMonitor` and `SelfHeatingData` record the volumetric heat a `Conduction` or isothermal `Charge` simulation generates. `to_spatial_data_array(...)`, available on any heat-charge monitor data, converts a recorded field into a `HeatSource` rate for a separate `Heat` simulation, and `SelfHeatingData.total_power()` integrates the heat rate so the cost of that resampling can be checked. `HeatFromElectricSource` is no longer accepted in an isothermal charge simulation, which solves at several bias points; use the monitor instead. On a non-isothermal charge simulation it is ignored with a warning, since that already couples heat self-consistently.
208
+ - `SteadyChargeDCAnalysis.temperature` accepts a `SpatialDataArray`, so a `Charge` simulation can run on a prescribed, spatially varying lattice temperature: the temperature-dependent physics is evaluated on the supplied field, with no thermal solve and no feedback from the device. Leaving it `None` keeps the existing self-consistent coupling. Together with `SelfHeatingMonitor` this enables a manual charge → heat → charge iteration. Requires the accelerated charge solver, and warns if the field does not cover the semiconductor region.
209
+ - Added `SteadyGenerationRecombinationMonitor`, reporting the per-node net generation-recombination rate `U = R - G` entering the carrier continuity equations (recombination positive, generation negative), including every active mechanism, together with a per-mechanism breakdown, of which only impact-ionization generation is currently reported. Available only on the accelerated charge solver.
210
+ - Added ``"temporal"`` and ``"auto"`` field-source adjoint reduction modes to ``config.adjoint.field_source_reduction_mode``: ``"temporal"`` combines the retained spatial modes into one adjoint simulation using synthesized multi-tone source waveforms, and ``"auto"`` picks between that and the separate per-mode simulations.
211
+ - Added the `TIDY3D_EXECUTION_FLEXCREDIT_LIMIT` environment variable for setting a process-wide cumulative maximum FlexCredit estimate for Tidy3D cloud task execution. Blocked submissions raise `FlexCreditLimitExceededError` before any proposed task starts, and `web.execution_flexcredit_status()` reports the current maximum-cost reservations.
212
+ - Added `CanaliFieldDependence`, an extended Canali high-field velocity-saturation model that can be attached to `ConstantMobilityModel`, `CaugheyThomasMobility`, and `MasettiMobility` through their new `field_dependence` parameter (accelerated charge solver only). Velocity saturation must be specified for both carriers of a medium or for neither. Every mobility model now serializes `field_dependence`.
213
+ - Added structural preprocessing cache reuse for compatible ordinary FDTD simulations. Set
214
+ `store_preprocess_cache=True` on a producer job, then pass its task ID through `parent_tasks` to
215
+ compatible child runs. See [How do I reuse structural preprocessing in a source
216
+ sweep?](https://docs.flexcompute.com/projects/tidy3d/en/latest/faq/docs/faq/how-do-i-reuse-structural-preprocessing-in-a-source-sweep.html).
217
+ - Added `MethodZip` for deterministic paired parameter sweeps, pairing values by index across named parameters and producing N cases from N values per parameter; unequal lengths are rejected.
218
+ - Added `HurkxTrapAssistedTunneling`, a field enhancement of Shockley-Read-Hall recombination by elastic band-to-trap tunneling, set through the new `field_enhancement` parameter of `ShockleyReedHallRecombination` and `SurfaceShockleyReedHallRecombination`: it shortens the bulk carrier lifetimes and raises the surface recombination velocities according to the local electric field and the tunneling effective masses `m_t_n`, `m_t_p`. Available only on the accelerated charge solver.
219
+ - 1D (line) and point monitors now work in `Charge` simulations. Such a monitor has no unstructured representation, so its recorded field comes back as a bias-resolved Cartesian `SpatialVoltageDataArray`; select a bias with `to_spatial_data_array(voltage=...)`. A line monitor's field can be plotted with `plot_field(...)` or `SteadyEnergyBandData.plot(...)`; a point monitor holds one value per bias, which is read from the data array directly.
220
+ - `UnsteadyHeatAnalysis.initial_temperature` accepts a spatially varying `SpatialDataArray` in addition to a scalar, e.g. the temperature profile of a previous heat simulation, for cooling or heater shut-off analyses. Mesh nodes outside the field's bounding box start at the new `background_temperature` (default 300 K).
221
+ - Added `HeatChargeSimulation.linear_solver`, selecting between the default iterative linear solver and a sparse direct one that is more robust where the iterative solver stalls. On large meshes the direct solver's larger memory requirement can increase queue time, and its runtime can be longer or shorter than the iterative solver's depending on the case. It applies to charge, heat and conduction simulations alike.
222
+ - `SteadyConvergenceData.cfl_history` (new `CFLHistoryDataArray`) records the CFL number the charge solver held at each Newton iteration of every sweep bias, dimensioned `(v, pseudo_step)` to share the `pseudo_step` axis with `residual_history`. Reading the two together shows, for a bias that did not converge, whether the CFL had reached its `cfl_min` bound, its `cfl_number` bound, or was still adapting between them. When the trace for a non-converged bias conclusively ends on one bound, the non-convergence warning issued when the simulation finishes now names it.
223
+ - Added the `Pc` low-doping cutoff and `mu_min2` transition-term floor to `MasettiMobility`, completing the Masetti model for boron-doped silicon; the defaults (`Pc=0`, `mu_min2` equal to `mu_0`) keep existing results unchanged.
224
+ - Added direct autograd support for the parameters of uniform `Lorentz`, `Drude`, `Debye`, and `Sellmeier` media (`eps_inf` and `coeffs`); gradients for those media and for the poles and residues of `PoleResidue` and `CustomPoleResidue` now agree with finite differences.
225
+ - Remote adjoint gradients now reject surface sample sets larger than 5 GB before upload, with an error that names the largest structures and the settings to change to reduce the size.
226
+ - Added optional structural preprocessing-cache reuse to dipole emission studies.
227
+
228
+ ### Changed
229
+
230
+ - `config.adjoint.monitor_interval_poly` and `config.adjoint.monitor_interval_custom` no longer affect standard shape (geometry) gradients, whose surface point-cloud sampling density is controlled by `config.adjoint.default_wavelength_fraction`; the interval settings still apply to the volumetric adjoint monitors used for medium, numerical-structure, and custom-vjp derivative paths.
231
+ - `SurfaceRecombinationBC` is now rejected at setup time when its placement names both sides of an interface that has no semiconductor side, or that is a heterojunction.
232
+ - A `VoltageBC` with `model="ohmic"` is now rejected at setup time when its placement names both sides of an interface with an insulator side and no semiconductor side, unless the other side is a `ChargeConductorMedium` carrying `work_function`.
233
+ - Shape gradients at boundary points with PEC on both sides are now exactly zero (previously a half-weighted PEC/dielectric blend), so gradients of overlapping PEC structures may change.
234
+ - `SurfaceRecombinationBC` no longer adds recombination where its surface meets an ohmic contact, which already fixes the carrier concentrations there, so results shift slightly for setups with that arrangement.
235
+ - `electron_affinity` is required on every `SemiconductorMedium`, including the background `medium`, when a charge simulation includes an insulator-only gate terminal. Different semiconductor electron affinities establish heterojunction band offsets and can change results.
236
+ - Charge terminals are now identified by the `ChargeConductorMedium` structure a contact is made on. One metal declared through several `boundary_spec` entries, or spanning several material zones, is swept, driven and current-summed as a single electrode; two different metals no longer merge into one contact even when they share a bias. A metal named by two `VoltageBC` entries whose sources prescribe different drives is rejected at validation time, so a saved simulation with such a setup no longer loads: a metal is equipotential. Sources are compared by what they prescribe, so a different `name` or `attrs` is not a disagreement and `GroundVoltage()` counts as `DCVoltageSource(voltage=0)`.
237
+ - A `VoltageBC` whose placement puts a contact face on an insulator requires the accelerated charge solver; `use_accelerated_solver=False` is now rejected for such a simulation. This covers both a gate over an oxide and an ohmic or Schottky contact whose metal is clad by an insulator, because only the accelerated solver references such a face to the metal work function.
238
+ - A charge `VoltageBC` that matches no meshed face is now reported even when another `VoltageBC` with identical settings does match, and two `VoltageBC` entries with different contact models that resolve to the same face are rejected.
239
+ - The accelerated charge solver rejects an insulator contact face whose terminal reaches the semiconductor but shares no mesh node with it, since such a face cannot take its potential reference from the semiconductor. It also rejects touching contacts of different terminals that prescribe incompatible potentials or small-signal drives at a shared point, and warns once when the built-in potential along a contact tied to an insulator face varies by more than kT/q.
240
+ - Reduced peak memory when computing `TriangleMesh` geometry gradients by chunking surface-gradient interpolation and accumulation.
241
+ - `colocate` is locked to `True` for flux and field-projection monitors; the surface-integration scheme is controlled solely by `use_colocated_integration`.
242
+ - An `InternalAbsorber` placed against a domain boundary is now rejected: its PEC backing plate sits on the absorber's non-absorbing side and would fall outside the simulation. Move the absorber one cell further in, or absorb at the edge with a domain boundary condition.
243
+
244
+ When a `ModeABCBoundary` absorbs more than one mode as `InternalAbsorber.boundary_spec`, its `plane` no longer has any effect: the absorber's own box and position determine where the modes are solved.
245
+ - Changed adaptive shape-gradient sampling to resolve per structure from the simulation definition
246
+ and all adjoint frequencies; ``config.adjoint.minimum_spacing_fraction`` remains the active lower
247
+ bound as a fraction of the shortest free-space adjoint wavelength.
248
+
249
+ Geometry sampling metadata on ``DerivativeInfo`` (``adaptive_vjp_spacing()``,
250
+ ``discretization_wavelength()``, and the clip-context material length scale) is now resolved per
251
+ structure from the simulation definition rather than from chunked permittivity data, and only for
252
+ structures with a traced geometry path. A ``custom_vjp`` callback on a structure whose traced fields
253
+ are all under ``medium`` now raises ``AdjointError`` from those accessors instead of returning a
254
+ value derived from the adjoint monitor data; all other derivative inputs are unchanged.
255
+ - Changed cylinder geometry adjoint calculations to use symmetric angular sampling of the cylinder surface.
256
+ - The ``"Selberherr"`` and ``"PQ"`` impact-ionization formulations now take their driving force from the conduction-band-edge gradient rather than the electric field, and their generation rate vanishes at zero bias. Ionization is unchanged in a uniform material under bias; a band offset across a heterojunction no longer acts as a driving force.
257
+ - `TriangleMesh.inside()` now warns once when it uses `trimesh`'s slower pure-Python `ray_triangle` backend instead of Embree.
258
+ - Adjoint simulations now warn when they end before their fields decay below the shutoff threshold that the forward simulation reached, since gradients from a truncated adjoint are biased without any visible failure.
259
+ - Charge simulations with a non-uniform lattice temperature (self-heating or a prescribed temperature field) now evaluate carrier flux, terminal currents and small-signal response with one temperature per mesh edge, so terminal currents balance under a temperature gradient. With Fermi-Dirac statistics the degeneracy-factor terms of the Jacobian and small-signal response use that same edge temperature, and the self-heating source is assembled with that edge temperature and with the carrier mobility the transport uses, so its power balance closes under a temperature gradient and with velocity saturation. Results for such simulations may shift slightly; isothermal simulations are unaffected.
260
+ - EME now reports setup errors earlier for unsupported mode-solver settings, including group-index calculation and non-increasing custom interpolation frequencies. If an older EME data file reports inconsistent mode frequencies during extraction or basis conversion, re-run the simulation to regenerate it.
261
+ - Reduced the size of gzip-packaged SimulationData results containing large monitor arrays.
262
+ - Changed `tidy3d mcp` to delegate to the independently released `tidy3d-mcp` runtime while preserving the integrated Tidy3D command.
263
+ - Documented the Tidy3D units of `SolidMedium.capacity` and `FluidMedium.specific_heat`, and recommend their `from_si_units()` constructors as the entry point.
264
+ - Shape (geometry) gradients in `autograd` are now substantially cheaper to compute — adjoint fields are recorded only at structure surfaces (pre-sampled point clouds) instead of over entire structure volumes, which shrinks recorded monitor data, downloads, and gradient postprocessing time and memory.
265
+ - The default `ChargeToleranceSpec.cfl_min` is now `1`. Charge simulations that do not set `cfl_min` may behave slightly differently.
266
+ - Users can now request any positive whole-number vGPU allocation supported by their license instead of being limited to 1, 2, 4, or 8. Requests above the license limit are rejected with a clear message before submission.
267
+ - Improved `PolySlab` arc-discretization performance without changing the generated coordinates.
268
+ - `TriangleMesh` shape gradients use fewer surface sample points on long, thin triangles.
269
+ - Adjoint shape-gradient surface-sampling spacing is now bounded below by the smallest grid step near each traced structure as well as by `config.adjoint.minimum_spacing_fraction` of the shortest adjoint wavelength, whichever is larger, so surfaces are no longer sampled more finely than the simulation grid; this reduces the number of sample points and memory for PEC and metal structures.
270
+
271
+ ### Fixed
272
+
273
+ - Fixed mode solver material classification to inspect the optical component of a `MultiPhysicsMedium`, so a wrapped `FullyAnisotropicMedium` selects the tensorial solver and a wrapped `LossyMetalMedium` is seen by the surface-impedance conductor check behind `precision="auto"`.
274
+ - Fixed PEC shape gradients so ordinary surface samples are no longer handled as one-dimensional
275
+ edges.
276
+ - NumPy arrays and other array-likes now work as selectors along non-spatial dimensions of unstructured datasets, in `sel()`, `isel()`, and `interp()`.
277
+ - Fixed `SurfaceRecombinationBC` being rejected on an interface between two materials that both take part in the charge simulation, such as a semiconductor/insulator interface or a junction between two differently doped regions of the same material.
278
+ - Fixed longitudinal mode-field grid corrections and near-zero clipping at simulation boundaries.
279
+ - Fixed `VoltageBC` contacts placed on an insulator (a gate over an oxide) in charge simulations: the gate potential is now referenced to the metal's `work_function`, giving the correct flat-band voltage instead of one shifted by the work function minus the semiconductor electron affinity. Two existing setups shift with it: a gate whose metal already carried a `work_function` for an unrelated Schottky contact, and the oxide-clad face of a Schottky contact that reaches no semiconductor node of its own.
280
+ - `AutoGrid` no longer over-refines the regions on either side of a narrow feature when the maximum step size in effect there is much coarser than the spacing between nearby structure boundaries. Steps now coarsen away from the feature by up to the `max_scale` ratio instead of one side being tiled uniformly at the feature's own step size, which also made two regions equally distant from the feature grid differently. `QuasiUniformGrid` is affected in the same way: when an interval between structure boundaries or snapping points is shorter than the requested `dl`, the rest of the axis is no longer refined below `dl` on account of it, and the cells stay within `dl` and the `max_scale` ratio while generally being fewer and coarser.
281
+ - Reduced mode-solver setup time when `precision="auto"` or a tensorial solver has to be selected, with classification results unchanged. Most noticeable for EME, where every cell plane paid this cost.
282
+ - TriangleMesh shape gradients now require a closed, outward-oriented volume mesh.
283
+ - `perturbed_mediums_copy()` accepts a plain spatial `xarray.DataArray` on every path, and rejects one still carrying a non-spatial coordinate with a message naming the field and how to drop it.
284
+ - Fixed fully anisotropic mode operators for magnetic coupling, invariant dimensions, PML, and backward propagation.
285
+ - On a periodic axis whose neighbouring regions have different step sizes, `AutoGrid` now sizes the cells near the boundary from the region actually adjacent across it; they could previously come out coarser or finer than intended, while still respecting the local maximum step size and the `max_scale` ratio.
286
+ - The error from `Job.task_id` on a multi-step job, which every `HeatSimulation` and `HeatChargeSimulation` job is, now names `job.estimate_cost()` and `job.real_cost()` alongside `job.task_ids`.
287
+ - Fixed mode-field rotation across the angular branch cut and bend preprocessing of off-plane media.
288
+ - Fixed subpixel continuity for derived custom media whose parent is the first material entry.
289
+ - Fixed slanted `PolySlab.inside()` and `Transformed.inside()` for same-shape coordinate inputs supplied as scalars, lists, or arrays, and fixed `Transformed.inside_meshgrid()` for transformed slanted `PolySlab` geometries with 1D coordinate vectors.
290
+ - Fixed the local field projection (`FieldProjector`) handling of integration bounds, spatially downsampled near fields, and projection windowing, so that locally projected fields agree much more closely with server-side projections of the same near-field data.
291
+ - Fixed slightly mistuned absorption in `ABCBoundary` and `ModeABCBoundary`: the propagation index, including an explicitly set `permittivity`, now accounts for the grid's numerical dispersion, which improves absorption most on coarse meshes.
292
+ - Surface monitors now reject an empty `fields` tuple up front, rather than being accepted and then failing when their data is loaded.
293
+ - Fixed inaccurate adjoint shape gradients for field-monitor objectives with staggered field samples near absorbing simulation boundaries.
294
+ - Fixed a small permittivity error at dielectric-vacuum interfaces when `edge_singularity_correction` is enabled, which slightly shifted results for geometries such as metal traces on a substrate.
295
+ - Fixed excess reflection from `InternalAbsorber` / `ModeABCBoundary` absorbers when a conductor passes through the absorber plane with `edge_singularity_correction` enabled.
296
+ - Fixed the small-signal AC conductance of charge simulations with Fermi-Dirac statistics, which omitted the carrier-density dependence of the degeneracy factor and was overestimated at high doping.
297
+ - A `HeatSource` with a spatially varying `rate` (a `SpatialDataArray`) is now applied instead of being silently ignored, so affected heat simulations no longer solve as if no heat were generated.
298
+ - Fixed vacuum fallback when serialized `CustomMedium` data arrays are unavailable.
299
+ - Fixed `CustomMedium` adjoint validation to reject gradients for inactive data representations.
300
+ - `CustomAnisotropicMedium.is_spatially_uniform` now returns `True` only when all tensor components are spatially uniform, and `False` when any component varies in space.
301
+ - A `TemperatureMonitor` in an isothermal `Charge` simulation now reports the uniform lattice temperature the run was solved at instead of 0 K.
302
+ - Fixed instability of an `InternalAbsorber` whose plane crosses a conductor, which could make the simulation diverge while the equivalent `ModeABCBoundary` placed at a domain edge stayed stable.
303
+ - A `MeshOverrideStructure` with `shadow=False` whose boundary falls very close to a grid snapping point now reuses that snapping point as its boundary, instead of adding a separate grid line beside it and refining the resulting sliver. Meshes in affected setups may have slightly fewer or shifted grid lines than before.
304
+ - Fixed batches restored with `Batch.from_file()` failing to serialize again or load in a fresh Python process.
305
+ - The ``fill_fraction_box`` metric now uses the tangential projection of the bounding box, so direct queries, filtering, and sorting ignore its position and extent along the mode-plane normal axis. Mode sources and monitors in ``Simulation``, user-supplied mode monitors and cell modes in ``EMESimulation``, ``ModeSimulation``, and ``ModeSolver`` now validate that the box intersects the effective mode-solving domain along both tangential axes before solving. Direct ``ModeSolverData.sort_modes()`` calls remain permissive: a tangentially disjoint box produces an all-zero metric.
306
+ - Fixed `ModeSolver` accepting custom microwave impedance paths outside the mode plane.
307
+ - Fixed `web.load_simulation()` and `web.download_json()` failing for mode solver and component modeler tasks, and `web.download_simulation()` failing for component modeler tasks (modeler batch ids remain unsupported by these functions).
308
+ - Lossy conductive media are no longer treated as perfect conductors by the mode solver at low frequency.
309
+ - Fixed validation so semiconductor simulations with electrical boundary conditions require an
310
+ explicit charge `analysis_spec`.
311
+ - Fixed `ModeSimulation.reduced_simulation_copy` to preserve permittivity and medium monitors and their complete sampled regions.
312
+ - Fixed EME mode-solver monitor frequency handling for interpolated cell modes, including reduced-data storage, basis conversion, and cases where some requested modes are unavailable.
313
+ - Fixed mode solves failing with an `IndexError` when the mode plane coincided with, or lay beyond, the outermost grid point along its normal direction. Where the correction could still be computed it was in some cases taken from the wrong side of the plane. Finite-grid corrections are now computed against the original simulation grid, and are skipped with a warning when the plane is not bracketed by that grid. A mode plane placed exactly on the simulation boundary is now rejected with an explanatory error instead of failing inside the grid machinery.
314
+ - Fixed `Simulation.to_gds_file()` retaining lower-priority geometry on the same GDS layer beneath thresholded custom-medium structures, including custom optical media wrapped in `MultiPhysicsMedium`.
315
+ - Fixed EME validation and classification to inspect the electromagnetic material stored in `MultiPhysicsMedium.optical`. A wrapped `AnisotropicMedium`, `FullyAnisotropicMedium` or custom medium is now seen by the bent-anisotropy checks, the global-frame custom-medium guard, and the reciprocity check that rejects non-reciprocal fully anisotropic media, all of which previously treated a wrapped medium as absent.
316
+ - Fixed 2D unstructured charge monitor data to preserve separate material-side values at coincident interface nodes.
317
+ - Fixed frequency tracking rotating mode phases instead of aligning them, and mode profiles not being normalized in the dot-product convention their amplitudes are decomposed in. Recorded amplitudes and phases can change for lossy modes, so stored results may need re-baselining.
318
+ - Adjoint runs now immediately report failed simulation tasks, including server-provided failure details, instead of processing unavailable gradient data.
319
+ - Fixed a duplicated density unit conversion that made the transient heat characteristic-time estimate 1e18 too small, so the excessive-simulation-time warning fired for every physically meaningful `UnsteadyHeatAnalysis`.
320
+ - In a 2D `Charge` simulation, a monitor that is also flat along one of the two resolved axes now records a line instead of failing. `SteadyCapacitanceMonitor`, `SteadyElectricFieldMonitor` and `SteadyCurrentDensityMonitor` still need two non-zero dimensions, and now say so before the simulation runs rather than failing during postprocessing.
321
+ - `HeatChargeSimulation` now reports a heat boundary condition placed where no solid material is present: an error when nothing else anchors the temperature -- previously the condition was silently dropped, and a steady solve left unanchored that way returned non-physical values under a successful task status -- and a warning when another condition still anchors it.
322
+ - A slice taken across a material interface no longer reports one material on both sides of it. Where the grid holds a node per side — how a heterojunction carries its band offset, or a contact resistance its temperature step — a line profile now keeps both values at distinct coordinates, separated by a small fraction of the local sample spacing, so the step is no longer merged away when the profile is selected from, interpolated, or reordered. Because both samples now sit just off the interface, its own coordinate no longer names one: select a side, or pass `method="nearest"`. A 2D plane slice of a 3D simulation is fixed the same way. A slice lying exactly along an interface can only report one side and now warns, instead of silently choosing one by its position in the grid. Slicing a tetrahedral dataset works again where the plane cuts a cell at more than two of its vertices.
323
+ - `UnsteadyHeatAnalysis.initial_temperature` and `background_temperature` now reject infinite and NaN scalars, and a `SpatialDataArray` initial temperature must be real, non-empty and on finite coordinates. These previously passed validation and reached the solver as an unusable initial condition.
324
+ - Custom doping is no longer dropped at a doping box face whose coordinate is not representable in single precision, such as the ±0.11 µm bounds of a 220 nm layer. A mesh node sitting exactly on such a face was treated as outside the box and doped to zero; it now takes the box's concentration. Charge results for devices with a junction on a layer face change accordingly.
325
+ - Fixed two-element real arrays being incorrectly parsed as complex numbers during deserialization.
326
+ - Fixed symmetric ``Simulation.to_gds`` and ``Simulation.to_gds_file`` exports for nonzero simulation centers to reflect around the simulation center.
327
+ - Changing `config.adjoint.default_wavelength_fraction` or `config.adjoint.minimum_spacing_fraction` no longer warns that remote gradients ignore them; both now take effect for remote gradients.
328
+ - Fixed 3D PEC shape gradients so that surface points within half a grid cell of an edge are integrated as PEC instead of dielectric.
329
+
330
+ ### Removed
331
+
332
+ - Removed `tidy3d.plugins.microwave` and the terminal half of `tidy3d.plugins.smatrix`, including `TerminalComponentModeler`, its lumped and wave ports and the RF material library, after their move to `flexcompute-rf`; the old import paths now report the `flexcompute.rf.tidy3d` replacement before they fail, and the modal component modeler is unaffected.
333
+
334
+ ### Breaking Changes
335
+
336
+ - Removed `sweep_index` from sweep-invariant EME mode, flux, correction, and aggregate-overlap data; singleton axes in released legacy result datasets are normalized, while multi-entry legacy axes must be selected or migrated before loading.
337
+ - Removed `EMESweepSpec.sweep_modes` and `EMESimulationData.port_modes_list_sweep`; `EMESimulationData.port_modes_tuple` now exposes the single shared port basis used by all supported sweeps.
338
+ - EME overlap FlexCredit estimates now include both per-cell self-overlap and per-interface cross-overlap tasks, including the union of interfaces required by periodicity sweeps, so estimated costs increase for existing jobs.
339
+ - Removed the deprecated `EMEFreqSweep`; list physical frequencies directly in `EMESimulation.freqs` and use `EMEModeSpec.interp_spec`, or migrate saved frequency-sweep results with an earlier Tidy3D version by multiplying their base frequencies by `freq_scale_factors`.
340
+ - Selecting a `voltage` when plotting charge monitor data now requires a bias the simulation solved at; a value between two recorded bias points raises `DataError` instead of quietly snapping to the nearest one. This applies to unstructured (2D and 3D) monitor data as well as the Cartesian data recorded by a line or point monitor.
341
+
342
+ ### Planned Deprecation
343
+
344
+ - Deprecated the `FieldProjector.trapezoid` helper, which is no longer used by the local field projection and will be removed in Tidy3D 2.13; use `numpy.trapezoid` instead.
345
+ - `tidy3d.rf` now carries only the RF classes defined under `tidy3d.components` and will be removed in 3.0; RF development continues in `flexcompute.rf.tidy3d`.
346
+ - Explicitly setting ``precision="single"`` or ``precision="auto"`` on optical, EME, or microwave/RF mode specs is deprecated; use ``"double"`` instead, which is already the default for all of them. ``"auto"`` resolves to single precision unless the mode solve contains a good conductor, so it carries the same accuracy risk.
347
+ - `unstructured=False` is deprecated on `TemperatureMonitor` and `SteadyPotentialMonitor`, the only heat-charge monitors that still accept it, and will be removed in Tidy3D 3.0; use `to_spatial_data_array()` on the monitor data where a Cartesian `SpatialDataArray` is needed.
348
+
349
+ ## [2.12.1] - 2026-09-29
350
+
351
+ ### Added
352
+
353
+ - Added `config.validation.mode = "fast"` and `from_file(..., validate="fast")`, which skip tidy3d's check validators while keeping pydantic type checking, every validator that derives a value, and serialization, so already validated data loads several times faster; the per-call override is context-local and the option is never saved to disk.
354
+ - Added `DipoleEmissionStudyData.angular_radiation_transfer()` and `angular_radiation_transfer_at_positions()` for bulk-normalized dipole radiation into each far-field direction.
355
+
356
+ ### Changed
357
+
358
+ - Changed the dipole emission plugin to deprecate `DipoleEmissionStudyData.radiation_intensity_transfer()` and its position-resolved counterpart in favor of the angular radiation transfer methods.
359
+
360
+ ### Fixed
361
+
362
+ - Reduced validation time when bent anisotropic EME simulations use length sweeps or are reused during mode-solver setup.
363
+ - `HeatChargeSimulation` now detects invalid volume-mesh connectivity early and retries automatically instead of failing later with an unclear conversion error.
364
+ - `HeatChargeSimulation` now warns when `relative_min_dl` overrides a mesh size requested through `dl_bulk` or through a grid refinement region or line.
365
+ - Fixed the dipole emission plugin's radiation intensity for non-unit collection index and source amplitude, and matched `DipoleEmissionStudyData` transfer normalization to the simulated source spectrum.
366
+ - Setting `config.microwave.suppress_rf_license_warning` to `True` now suppresses the RF license warning emitted during simulation validation.
367
+
368
+ ### Planned Deprecation
369
+
370
+ - `tidy3d.plugins.microwave` and the terminal component modeler with its lumped, coaxial and wave ports are deprecated and move to Flexcompute RF (`flexcompute.rf.tidy3d`) in Tidy3D 2.13; the remaining RF classes are deprecated and will be removed in 3.0.
371
+
372
+ ## [2.12.0] - 2026-07-24
373
+
374
+ ### Added
375
+
376
+ - Added `CornerFinderSpec.corner_rounding_collapse_extent` so `LayerRefinementSpec` can recover sharp corners that pass the legacy angle threshold from small rounded or chamfered imported geometry.
377
+ - Added `ImpedanceSpec` to support complex-valued `LumpedPort` impedance. The `impedance` field now accepts either a plain real number (e.g. ``50``) or an `ImpedanceSpec(impedance=..., frequency=...)` for complex-valued loads. A complex impedance ``Z = R + jX`` is mapped to a series RL or RC load at the given measurement frequency, enabling reactive terminations in S-parameter simulations. Purely reactive loads (``Re(Z) = 0``) are not supported; ``Re(Z)`` must be strictly positive to ensure a stable FDTD pole.
378
+ - Added a dedicated PyTorch wrapper plugin documentation page under ``api/plugins/pytorch``.
379
+ - Added autograd support for `ClipOperation` geometry derivatives, including union, difference, intersection, and symmetric_difference.
380
+ - Added the `tidy3d mcp` command for running the Tidy3D MCP server from the active Tidy3D environment.
381
+ - Added `Palik_NoLoss` material-fitter refits for the low-loss Palik ranges of GaAs, Ge, SiO2, and cSi, and `Palik_LowLoss` variants for the previous Palik fits of GaAs, Ge, InP, SiO2, and cSi.
382
+ - Added per-interface physical residual diagnostics for EME: incident-normalized squared tangential E/H field residuals, corresponding non-PML-aperture residuals, and the flux-weighted power conservation defect, stored on ``EMESimulationData.diagnostics`` when ``EMESimulation.eme_diagnostics=True``.
383
+ - Added a `progress` keyword (default `True`) to `EMESimulation.compute_overlaps`, `EMESimulation.propagate_from_overlaps`, and `EMESimulation.propagate` that shows a per-phase `rich` progress bar on the logging console; pass `progress=False` to silence it.
384
+ - Accelerated charge solver support for the Masetti mobility model.
385
+ - `DeviceCharacteristics.dc_convergence` (new `SteadyConvergenceData`) flags per-bias Newton convergence and exposes the per-iteration residual trace, so callers can mask the I-V/C-V curves by the converged biases and inspect at which iteration each bias crossed the tolerance.
386
+ - Added support for explicit payment type, priority, and vGPU allocation settings when submitting component modeler batch tasks.
387
+ - `TFSF` source now exposes an `angular_spec` field (`FixedInPlaneKSpec` or `FixedAngleSpec`) mirroring `PlaneWave`, enabling fixed-angle (frequency-independent propagation direction) TFSF setups for isolated scatterers. Fixed-angle TFSF rejects `Periodic` and `BlochBoundary` transverse boundaries and is intended to be used with absorbing (`PML`/`Absorber`/`StablePML`) transverse boundaries; 2D simulations may keep the conventional `Periodic` on the zero-width out-of-plane axis as long as the wave's k-vector has no component along it.
388
+ - Added ``PointCloudFieldMonitor`` and ``PointCloudFieldData`` for frequency-domain E/H field sampling at custom point-cloud coordinates. ``PointCloudFieldData`` is indexed by point, so structured-grid field plotting helpers such as ``SimulationData.plot_field()`` do not support it.
389
+ - Added `SteadyChargeResidualMonitor`, a debug-grade Charge-simulation monitor that records the per-node signed residual of each governing equation (`residual_potential` for the Poisson equation, `residual_electrons` for the electron continuity equation, `residual_holes` for the hole continuity equation, plus `residual_temperature` for the heat equation when the thermal solver is active). The values are dimensionless and on the same scale as the simulation's convergence tolerance, so the nodes with the largest magnitude are where the solution least satisfies the equations, helping locate the least-converged regions. Available only through the accelerated solver.
390
+ - Added the dipole emission study plugin, including `DipoleEmissionMonitor`, core `DipoleEmissionData` monitor outputs, plugin `DipoleEmissionStudyData` results, `SphericalAngleDataArray`, compact stored `radiation_intensity` outputs, study-level derived `radiation_intensity_transfer` properties, optional position- and axis-dependent integration weights, and optional selected-position radiation-intensity samples.
391
+ - Added `Dx`, `Dy`, and `Dz` output support to `PointCloudFieldMonitor`, reconstructing `D / epsilon_0` from raw E-field samples and diagonal Yee permittivity; sampled off-diagonal Yee permittivity emits a warning and uses diagonal components only.
392
+ - Added `gds_precision` to `Geometry.to_gds_file()`, `Structure.to_gds_file()`, and `Simulation.to_gds_file()` to control the coordinate precision written to GDS exports.
393
+ - Added `merge_adjacent` to `Geometry.from_gds()`; set `merge_adjacent=True` to merge fractured same-layer GDS polygons during import for roundtrip reconstruction.
394
+ - HeatSimulation and HeatChargeSimulation cloud runs now create a volume mesh before running the solver; use web.run(), run_async(), Job.run(), Job.step(), Batch.run(), or Batch.step() instead of separate upload/start/monitor calls for these simulations. Uniform Heat/HeatCharge batches advance the mesh and solver workflow automatically, with Batch.run() starting each solver step as soon as that simulation's mesh step completes. Batch.estimate_cost() reports the summed cost of the shared next workflow step for supported uniform batches; after estimating the mesh step, run it first before estimating the solver step. Batch.estimate_cost() raises for mixed or non-uniform multi-step batches; use Job.estimate_cost() per job in those cases. Cache-only batch results may record `None` in `BatchData.task_ids` because no server task ID exists. Mixed batches containing both regular simulations and Heat/HeatCharge simulations run those groups separately; split them into separate batches for maximum parallelism.
395
+ - Added thermionic Schottky contacts to the accelerated charge solver (DC and small-signal AC). Schottky physics is an opt-in on `VoltageBC` via `model="schottky_mott"`; the Mott rule `phi_Bn = W - chi`, `phi_Bp = E_g - phi_Bn` is built from per-medium material properties — `work_function` on the adjacent `ChargeConductorMedium` and `electron_affinity` / `richardson_electron` / `richardson_hole` on the adjacent `SemiconductorMedium`. Default `model="ohmic"` is the standard ohmic contact. Schottky contacts compose with `SSACAnalysis` / `IsothermalSSACAnalysis`, enabling Mott-Schottky `1/C^2` extraction on Schottky diodes.
396
+ - Native autograd support for `FluxMonitor` using hidden forward field storage in autograd runs. Set `enable_adjoint=True` on `FluxMonitor` objects whose `.flux` output is used in an autograd objective; this stores hidden surface field data for all requested flux-monitor frequencies.
397
+ - Added `PalankovskiQuayApproxCarrierLifetime`: doping- and temperature-dependent SRH lifetime in the Palankovski–Quay empirical Scharfetter form. Supported by the accelerated charge solver only.
398
+ - Added faster adjoint source construction for `ModeMonitor`, `GaussianOverlapMonitor`, `AstigmaticGaussianOverlapMonitor`, and `DiffractionMonitor` data with many active amplitudes.
399
+ - Improved polygon triangulation performance using Shapely constrained Delaunay triangulation.
400
+ - `LayerRefinementSpec` now refines axis-unaligned in-plane metal edges (`in_plane_edge_refinement`, default `"mirror_corner"`) and resolves small disjoint metal geometries such as vias (`min_steps_per_geometry`, default `2`), with a tunable `CornerFinderSpec.axis_aligned_angle_threshold`; both are on by default and give existing setups a finer mesh, set them to `None` to keep the previous mesh.
401
+ - `ModeTimeMonitor` records time-domain modal amplitudes at a waveguide
402
+ cross-section, projecting the running Yee-grid fields onto the mode profiles
403
+ solved at a single frequency (`freq_spec`, defaulting to the first source's
404
+ central frequency).
405
+ - `SolidMedium` now accepts an optional `velocity` vector (in `um/s`; `from_si_units` takes `m/s` and converts), enabling a convective transport term in heat simulations for structures using that medium (both `capacity` and `density` are required when `velocity` is nonzero).
406
+ - `FluxMonitor` and `FluxTimeMonitor` now support staggered Yee-grid surface integration via `use_colocated_integration=False`, computed on the server with the same scheme as `FieldMonitor(colocate=False, use_colocated_integration=False)` flux, keeping tangential fields at their native Yee positions to avoid interpolation across material discontinuities, including under periodic and Bloch boundaries.
407
+ - `ThermalContactResistance` boundary condition for heat simulations: an interfacial thermal resistance (thermal contact / Kapitza resistance, in `K*um^2/W`; `from_si_units` takes `m^2*K/W`) placed on a `StructureStructureInterface` or `MediumMediumInterface` allows a temperature jump proportional to the heat flux across the interface between two touching solids.
408
+ - Added `tidy3d.web.refresh_licenses()` and `tidy3d configure --refresh-licenses` to clear cached local license entitlements so the next local license check fetches current server state. Successful API key or API endpoint configuration updates now refresh local license state automatically. Rejected configuration updates do not refresh local license state; when combined with explicit refresh, the command or call reports that the cache was not refreshed. If automatic refresh fails after configuration is saved, `tidy3d configure` exits nonzero and `web.configure(...)` raises while leaving the saved configuration in place.
409
+ - Schottky contacts (`VoltageBC` with `model="schottky_mott"`) now support Fermi-Dirac carrier statistics (`fermi_dirac=True` in the charge analysis spec), enabling Schottky devices with degenerately doped semiconductor regions in DC and small-signal AC analyses.
410
+ - Added `PointCloudPermittivityMonitor` for recording diagonal permittivity components for requested point clouds by sampling each component from its nearest native `Ex` / `Ey` / `Ez` Yee-grid location.
411
+ - `MeshOverrideStructure` accepts a `min_steps_per_size` field to set the grid size relative to the structure's bounding box (bounding box size divided by the requested number of steps, ignored on axes whose bounding box size is zero or infinite); when both `dl` and `min_steps_per_size` are set along a dimension, the finer grid size is used. `dl` is now optional (defaults to no override) so an override can be specified with `min_steps_per_size` alone.
412
+ - Added `penetrable` to `LossyMetalMedium`: when `True`, the metal is solved as a regular conductive medium with subpixel averaging `Simulation.subpixel.dielectric`, instead of the lossy-metal-specific handling selected by `Simulation.subpixel.lossy_metal`.
413
+ - Added `tidy3d.RadiationBC` gray-body surface radiation boundary condition and an optional `emissivity` field on `tidy3d.ConvectionBC` for combined convective-radiative heat exchange, supported in heat and conduction+heat simulations.
414
+ - Added `SurfaceRecombinationBC` for modeling Shockley-Read-Hall surface recombination and fixed interface sheet charge on semiconductor boundaries and zone interfaces, supported by the accelerated charge solver.
415
+ - Added `ThinLensProfile`, `ThinLensBeam`, and `ThinLensOverlapMonitor` for constructing,
416
+ injecting, and decomposing vectorial focused beams from a thin-lens angular spectrum.
417
+ - `LumpedResistor`, `LinearLumpedElement`, and `LumpedPort` now accept one-dimensional (line) geometries with two zero-size dimensions, in addition to planar geometries; a line element/port is realized as a single-grid-cell-wide `Medium2D` sheet whose normal axis is chosen at meshing time to straddle any adjacent material interface.
418
+ - `AnisotropicConductivity` for `SolidMedium.conductivity`, specifying an anisotropic (tensor) thermal conductivity via principal values `xx`, `yy`, `zz` plus an optional `rotation`. A scalar `conductivity` remains fully supported for isotropic materials. `SolidMedium.from_si_units` also accepts an `AnisotropicConductivity` (its principals are converted from SI units).
419
+ - Added `ElectromagneticFieldData.field_intensity()` for computing intensity from selected electric field components using the existing colocated intensity semantics.
420
+ - `VarshniEnergyBandGap` and `ConstantEnergyBandGap` now expose a `band_gap_energy(temperature)` method returning the energy band gap (in eV) at the requested temperature(s).
421
+ - Added `geometry_tolerance` to unstructured grid specs, raising the distance below which coincident geometric entities are fused during heat/charge meshing (refinement lines remain subject to a built-in `1e-6` um minimum length).
422
+ - Semiconductor heterojunction support in charge simulations: `SemiconductorMedium.electron_affinity` sets the band alignment at semiconductor/semiconductor interfaces, with thermionic-emission interface transport controlled by `richardson_electron` and `richardson_hole`.
423
+ - Added `tidy3d troubleshoot` CLI group with `connection`, `environment`, and `report` subcommands that produce paste-friendly support bundles matching the Tidy3D issue-report template, plus `tidy3d.web.diagnose_connection()`, `tidy3d.web.diagnose_environment()`, and `tidy3d.web.diagnose_report()` helpers for Python users.
424
+
425
+ ### Changed
426
+
427
+ - `WavePort` and `TerminalWavePort` mesh refinement now interprets `num_grid_cells` as the cell count along the *largest* transverse dimension (the smaller dimension is aspect-ratio-scaled), with the default raised from 5 to 12. Two grid-snapping points are also emitted at opposite corners of the port plane.
428
+ - Changed the default autograd `minimum_spacing_fraction` from 0.01 to 0.001; set it back to 0.01 in your config to keep previous spacing behavior.
429
+ - `UniformUnstructuredGrid.min_edges_per_circumference` and `min_edges_per_side` now accept `0`, which skips the corresponding local mesh-size contribution. A deprecation warning is emitted when either field is left at its default: the default will change to `0` in the next release. Set the fields explicitly to preserve the current behavior.
430
+ - Changed grid validation to raise a units error when `UniformGrid.dl` or generated `AutoGrid` / `QuasiUniformGrid` cell sizes are below 1e-6 um.
431
+ - Improved memory usage and runtime for autograd local far-field projections in the 3D paired approximate path used by Cartesian and k-space monitors with ``far_field_approx=True``.
432
+ - Reduced peak memory usage when differentiating exact local field projections (`far_field_approx=False`).
433
+ - Increased default `ChargeToleranceSpec.max_iters` from `30` to `120`; set it explicitly to keep the previous behavior.
434
+ - `HeatChargeSimulation.use_accelerated_solver=False` (selecting the CPU charge solver) is now validated at construction and raises a `ValidationError` on `use_accelerated_solver` for configurations the CPU solver cannot run: heat and conduction simulations (which always run on the GPU accelerated solver) and charge simulations using GPU-accelerated-only features such as `MasettiMobility` or SSAC `at_voltages` bias-point selection. The flag now defaults to `True` (was `Optional` defaulting to `None`) and continues to use the GPU accelerated charge solver.
435
+ - `TFSF` now rejects `Periodic` and `BlochBoundary` along its injection axis at simulation construction time. The wave reaching such a boundary would be re-injected into the scattered-field region, breaking the TFSF formulation; previously this misconfiguration was accepted and produced silently incorrect results.
436
+ - EME overlap and flux calculations now use the Yee-staggered integration convention used by mode normalization. This improves modal orthogonality and interface S-matrix reciprocity. EME scattering matrices may differ slightly from earlier versions, with the difference decreasing at higher grid resolution. `EMESimulationData.smatrix_in_basis`, the local-solver `EMESimulation.smatrix_in_basis`, and `EMESimulationData.field_in_basis` re-express the scattering matrix (or field) in this same Yee convention by default (matching how it was computed), switching to colocated integration when a target basis stores its fields colocated (`colocate=True`) or sits on a different grid than the port modes, where native-Yee integration is impossible; if such a target cannot provide colocated integration (e.g. a `colocate=False` `EMEModeSolverMonitor`), the call raises rather than silently mixing conventions. Note that `EMEModeSolverMonitor` — the usual way to provide a target basis — and field monitors default to `colocate=True`, so monitor-based rebasing uses the colocated path unless `colocate=False` is set on the target monitor. A target basis's own `use_colocated_integration` is not honored — the rebasing convention is otherwise fixed by the (Yee) port modes.
437
+ - Improved runtime and memory usage for local single-precision mode solver runs with lossless materials and `num_pml=(0, 0)`.
438
+ - Changed the default `cSi` material-library variant from `Green2008` to `Palik_LowLoss`. Accessing the `cSi` default medium implicitly now emits a migration warning. Callers that need pre-change results should request `Green2008` explicitly, including in the 1.2 to 1.45 um overlap where both variants are valid. `Palik_LowLoss` is valid from 1.2 to 250 um. `Green2008` covers pre-change results from 0.25 to 1.2 um, and `Palik_Lossy` is available from 0.1 to 1.4 um when the lossy Palik model is desired.
439
+ - Changed the `cSi` material-library `Si_MultiPhysics` optical model from `Green2008` to `Palik_LowLoss`, aligning it with the new `cSi` default optical model.
440
+ - Updated tidy3d MCP startup for FastMCP 3.2.4 compatibility and documented exact remote MCP endpoint URLs for custom deployments.
441
+ - Mesh override structures with `shadow=False` now reuse a nearby existing grid line instead of always inserting a new one at their bounding box, so refined regions add fewer grid lines; affected setups may see slightly fewer or shifted grid lines around such overrides.
442
+ - Changed adjoint gradients to skip sources whose effective magnitude underflows solver precision and treat those contributions as zero.
443
+ - `HeatChargeSimulation` now raises a setup error when heat-solver features are requested in a non-isothermal charge analysis: solid-medium advection (`SolidMedium.velocity`) and resistive interfaces (`ThermalContactResistance`) are applied by the heat solver (including heat coupled with electrical conduction) but were previously ignored silently in non-isothermal charge (coupled charge+heat) runs. Heat, conduction+heat, and isothermal charge analyses are unaffected. `ThermalContactResistance` is now also listed in the heat boundary-conditions API reference.
444
+ - Path integrals with ``extrapolate_to_endpoints=False`` (the default for current integrals) now use a centered box-rule treatment at the endpoints instead of linear extrapolation, slightly changing coarse-mesh results for ``AxisAlignedCurrentIntegral``, ``path_integrals_from_lumped_element``, ``CustomImpedanceSpec.from_bounding_box`` (used by ``TerminalWavePort``), lumped ports, and ``TerminalComponentModeler``. Voltage integrals (default ``extrapolate_to_endpoints=True``) are unchanged.
445
+ - Made `Geometry.to_gds_file()`, `Structure.to_gds_file()`, and `Simulation.to_gds_file()` raise `SetupError` when the requested precision is too fine for the exported coordinates or when exported coordinates are non-finite.
446
+ - EMEModeSpec.precision now defaults to "double"; set precision="auto" to resolve precision per EME cell -- double where that cell's mode solve contains a good conductor, single otherwise.
447
+ EME monitor storage-size estimates now account for the double-precision (complex128) data EME writes (previously about 2x low); simulations near the storage limit may now report a larger size or exceed it.
448
+ - Heat and HeatCharge solver tasks are now billed based on their associated computational cost, like other solvers. For Heat and HeatCharge workflow jobs, `Job.estimate_cost()` and `Batch.estimate_cost()` now explicitly state when an estimate is for the mesh step only and that `Job.step()` or `Batch.step()` should be run before estimating the solver step. For variable-cost charge solves, estimates now show a typical FlexCredit cost separately from the maximum cost when the server provides one. The billed charge-solver cost depends on the solver iterations run to convergence; this is usually much smaller than the maximum allowed iterations, but hard-to-converge cases can reach the maximum cost.
449
+ - Gaussian-like overlap monitors now require their monitor plane to lie in a homogeneous, isotropic background medium.
450
+ - The `relax_courant` option is now orientation independent and benefits a wider range of simulations.
451
+ - Consolidated the TCAD band-gap classes into a single module: `ConstantEnergyBandGap` and `VarshniEnergyBandGap` now live in `tidy3d.components.tcad.bandgap` (previously `tidy3d.components.tcad.bandgap_energy`, which has been removed) alongside `SlotboomBandGapNarrowing`. The public import path (`import tidy3d as td; td.ConstantEnergyBandGap`) is unchanged; only code importing directly from the internal `bandgap_energy` module path needs to update its import.
452
+ - Finest grid region visualization in `Simulation.plot_grid()` is now off by default; opt in by passing a nonzero `finest_grid_region_alpha`.
453
+
454
+ ### Fixed
455
+
456
+ - Suppressed the `Simulation` structure-at-boundary warning for structures touching `Periodic` or `BlochBoundary` edges, while keeping the warning for other boundary types unless structure extrusion is enabled.
457
+ - Improved auto-generated API documentation for classes with computed default values (e.g. ``NedeljkovicSorefMashanovich``), eliminating malformed Parameters sections and a long tail of other documentation build issues.
458
+ - Raise a validation error when an automatically added PEC frame (around a mode source with ``PECFrame`` or an internal absorber) overlaps the absorbing-boundary extrusion clipping region on any boundary with ``extrude_structures=True``. To opt out on a side that legitimately needs the source / absorber to reach the boundary (e.g. a wave-port source that spans the lateral domain via symmetry), pass ``extrude_structures=False`` to the boundary — either through ``Boundary.pml`` / ``Boundary.stable_pml`` / ``Boundary.absorber`` (now exposed there) or by constructing ``Boundary(plus=td.PML(extrude_structures=False), minus=td.PML(extrude_structures=False))`` explicitly.
459
+ - `TerminalComponentModeler.ports` and `ModalComponentModeler.ports` now use a discriminated union on the `type` field, so validation errors for a port dict are attributed to the correct port class instead of being scattered across every union branch.
460
+ - Fixed `PolySlabSet` to preserve its internal ring order across `safe_update()` and other vertex-space updates while still exporting area-sorted structures.
461
+ - Fixed mode solver picking the wrong sqrt root for lossless evanescent modes; direction is now resolved from time-averaged power flow with a passivity fallback.
462
+ - Fixed device characteristic DataArrays to expose value units and voltage coordinate units when simulation data is loaded.
463
+ - Fixed `EMESimulation.plot_3d()` to clip infinite structures to the simulation bounds.
464
+ - EME interface matching now uses the full solved modal basis as test rows, except modes with numerically unusable self-overlap, so high mode counts no longer slowly degrade S-matrix accuracy. Only the propagation trial basis is capped by ``EMEModeSweep.num_modes`` or ``EMEModeSpec.sort_spec.keep_modes``; modes flagged increasing (``Im(n_eff) < -EMEModeSpec.increasing_mode_tolerance``) remain available as test rows. The default increasing-mode tolerance now ignores roundoff-level negative imaginary effective indices in lossless cases. The per-cell ``EMEModeSpec.num_modes`` cap is raised from 100 to 1000 for convergence studies; practical mode counts remain limited by interface memory and dense interface/stacking runtime.
465
+ - Fixed edge singularity correction for geometry groups and difference boolean operations in conformal meshing.
466
+ - Fixed RF/modeler diverged runs to report a clear task status error instead of trying to download missing aggregate data.
467
+ - `TFSF` injection in a lossy source-side medium now normalises the user-specified unit amplitude at the injection plane (the TFSF box face) for both the legacy constant-in-plane-k path and the new fixed-angle path; previously the legacy aux PlaneWave's unit reference sat two cells outside the box, so the wave reaching the box face was decayed by `exp(-Im(kz)·2·dz)` in lossy media.
468
+ - `EMESimulationData.smatrix_in_basis`, `EMESimulation.smatrix_in_basis`, and `EMESimulationData.field_in_basis` now correctly handle modal bases that are not orthonormal in their overlap inner product — non-orthogonal combinations of port modes, modes on a different grid, or a custom field such as a Gaussian beam — and are exact for the same-modes round-trip. As a result, existing calls generally return a (corrected) different result; pass `skip_gram_normalization=True` to skip the normalization and recover the previous behavior, which is exact only when the bases are already orthonormal in this overlap convention. Incomplete mode or field data now raises `SetupError` rather than returning an incorrect S-matrix or field. `EMESimulationData.field_in_basis` rebases through the same trial-basis port modes as `smatrix_in_basis` (those kept on the S-matrix diagonal), so increasing-/`ModeSortSpec`-filtered and sweep-truncated modes are dropped consistently instead of leaking into the rebased field or being mis-rejected as incomplete data.
469
+ - Endpoint extrapolation in `AxisAlignedPathIntegral` and `AxisAlignedVoltageIntegral` (`extrapolate_to_endpoints=True`) no longer silently returns the un-extrapolated value with xarray >= 2025.11.
470
+ - Fixed a divergence issue in WavePort simulations where port edges are exactly aligned to the simulation grid.
471
+ - Updated CHARGE documentation to reflect the accelerated solver, including convergence and tolerance guidance.
472
+ - Fixed `ModeSimulation.epsilon()` when `config.simulation.use_local_subpixel` enables local subpixel averaging.
473
+ - Fixed `Simulation` GDS exports so vacuum/background cutouts are preserved more reliably, including when exporting holes on the default layer and when mixing mapped and unmapped media in the same layout.
474
+ - Corrected the `convergence_dv` description in `SteadyChargeDCAnalysis`: the accelerated charge solver applies it only to multi-voltage sweeps (inserting intermediate warm-start bias points), while the from-zero bias ramp it previously described applies to the legacy solver.
475
+
476
+ Validation now rejects providing more than one multi-voltage sweep array across `VoltageBC` sources of any type; previously a swept `SSACVoltageSource` alongside a swept `DCVoltageSource` was silently accepted with ambiguous sweep selection.
477
+ - Fixed EME coefficient normalization to use absolute real mode flux and leave zero-flux
478
+ modes unscaled. All four interface S-matrix blocks are renormalized with the
479
+ same absolute-real-flux rule, using flux data for both EME cells adjacent to
480
+ each interface. Downsampled `EMECoefficientMonitor` data must use
481
+ `eme_cell_interval_space=1` when requesting normalized interface S matrices.
482
+ Repeated-grid coefficient data must provide flux on the same virtual-cell
483
+ `eme_cell_index` coordinates before normalizing A/B fields.
484
+ - Fixed nonzero diffraction-order adjoint plane waves to use single-frequency injection and avoid broadband grazing-angle artifacts.
485
+ - `PolySlab` now accepts polygons with arc segments (`bulges`) that enclose a finite area even when their `vertices` are collinear; previously such polygons were rejected with "The polygon almost collapses to a 1D curve."
486
+ - Fixed repeated autograd gradient evaluations so matching cached adjoint results are reused.
487
+ - Fixed component modeler FlexCredit cost estimates that could be lower than the real cost when the simulation `run_time` is a `RunTimeSpec`; the estimate now resolves the run time from the modeler's port excitation instead of the source-less base simulation.
488
+ - Fixed excessive memory retention during `DesignSpace.run(fn_pre, fn_post)` workflows that run batched simulations.
489
+ - A non-penetrable `LossyMetalMedium` is now rejected as a component of an `AnisotropicMedium` at construction time.
490
+ - Fixed `structure_priority_mode` being ignored when a `WavePort` is converted to a mode solver via `to_mode_solver`/`to_mode_simulation`.
491
+ - Fixed autograd runs so unsupported traced source, medium, and geometry parameters are rejected during setup, before simulation submission.
492
+ - Fixed doping behavior at box boundaries in charge simulations, for all doping box types (`ConstantDoping`, `GaussianDoping`, `CustomDoping`): doping near a box edge is no longer dropped, two boxes that abut along a plane no longer double the doping on that shared plane (the later box in the list takes the shared plane), and overlapping boxes (such as a background plus an implant) now add together correctly. Doping plots reflect the same combined doping the simulation uses.
493
+ - Simulations now validate that the grid resolves each lumped element and port before upload: at least two cells are required along every axis transverse to the ``voltage_axis``. A too-coarse grid (for example a single cell across a transverse axis) previously failed during meshing with a cryptic "zero volume", ``IndexError``, or divide-by-zero; it now raises a clear error pointing at the offending axis. This applies to both planar and one-dimensional (line) elements.
494
+ - Fixed loading of solver-generated heat, charge, and mesh results so Tidy3D no longer emits misleading unused-point or missing-value warnings.
495
+ - Union fields on Tidy3D models are now validated against their ``type`` discriminator, so passing an object of the wrong type to a model field raises a clear error at construction instead of being silently accepted and failing later during serialization or a remote run.
496
+ - Fixed local EME staged propagation rejecting `EMEModeSpec.interp_spec` mode data stored on the reduced interpolation frequency grid (`reduce_data=True`); such mode data is now accepted and its overlaps interpolated up to the requested frequencies.
497
+ - Fixed remote autograd gradients to reuse compatible cached forward results when possible and automatically rerun the forward simulation when partial cached data is missing or no longer usable for the backward pass.
498
+ - Transient (`UnsteadyHeatAnalysis`) heat simulations with only Neumann-type boundary conditions (e.g. all `HeatFluxBC`) are no longer incorrectly rejected; the all-Neumann check now applies only to steady-state simulations, where the solution is otherwise undefined up to a constant.
499
+ - Corrected the fixed-angle far-field projection phase so oblique fixed-angle sources with an off-origin center produce the right projected pattern.
500
+ - Fixed `PolySlab` adjoint derivatives to use winding-invariant sidewall sampling based on offset polygon slices.
501
+ - Fixed the Bloch phase application for `DirectivityMonitor` far fields, which was previously dropped at domain-edge cells in simulations with Bloch boundaries.
502
+ - Clarified the `Job.step()` and `Batch.step()` error message when workflow results are already complete, including from the local cache, and restored upload-time cost estimate logs for multi-step workflow jobs.
503
+ - Fixed seven default material models whose coefficients deviated from their reference data: `Al` `'Rakic1995'` (real index was non-physical across the visible/NIR), `Cr` and `Be` `'Rakic1998BB'`, `Au` `'Olmon2012evaporated'` (no interband response in the visible), `Ag` `'Rakic1998BB'`, and `Pt` and `Ti` `'Werner2009'`. Validity ranges are unchanged; results change wherever these variants are used, explicitly or via the material default. For infrared-only simulations, the previous fewer-pole (lower-cost) coefficients remain available as `'Rakic1998BB_IR'` (`Cr`, `Be`, `Ag`) and `'Olmon2012evaporated_IR'` (`Au`) variants, restricted to the infrared bands where they match the reference data.
504
+ - Fixed a validation error caused by `LossyMetalMedium` mistakenly being added directly to the medium conversion of lumped elements.
505
+ - Fixed inline PyVista notebook plots sometimes failing to start interactive views.
506
+ - Fixed heat/charge meshing of abutting structures with finely tessellated (e.g. curved) boundaries, which could leave degenerate zero-volume elements that failed the solver's mesh check.
507
+ - Fixed `Scene.plot_structures_eps()` for unstructured custom-medium data with complex permittivities.
508
+ - Fixed flat `BatchData` result access for known skipped, failed, or incomplete batch tasks to raise a contextual `DataError` instead of a raw `KeyError`.
509
+ - Fixed `tidy3d.plugins.autograd.invdes.projections.smoothed_projection` returning density values outside `[0, 1]` due to floating-point precision.
510
+ - Fixed the sign and magnitude of autograd gradients with respect to `Cylinder.length`.
511
+ - Fixed post-submission cost estimation for batches of `ModalComponentModeler` and `TerminalComponentModeler`, which could cause `Batch.run()` and `Batch.monitor()` to fail.
512
+
513
+ ### Removed
514
+
515
+ - Removed deprecated `Scene.plot_heat_conductivity()`, `Scene.plot_structures_heat_conductivity()`, and `Scene.heat_conductivity_bounds()`; use `plot_heat_charge_property(property="heat_conductivity")`, `plot_structures_heat_charge_property(property="heat_conductivity")`, and `heat_charge_property_bounds(property="heat_conductivity")`.
516
+ - Removed deprecated `AbstractSimulation.plot_structures_heat_conductivity()` and `HeatChargeSimulation.plot_heat_conductivity()`; use `scene.plot_structures_heat_charge_property(property="heat_conductivity")` and `plot_property(property="heat_conductivity")`.
517
+ - Removed the deprecated legacy config API and legacy config migration paths.
518
+ - Removed `TopologyDesignRegion.params_uniform()`, `params_random`, `params_zeros`, `params_half`, `params_ones`, `AbstractOptimizer.initialize_result(params0)`, and `AbstractOptimizer.run(..., params0=...)`. For direct parameter arrays, replace the `TopologyDesignRegion.params_*` helpers with NumPy arrays using `region.params_shape`, such as `np.full(region.params_shape, value)`, `np.random.random(region.params_shape)`, `np.zeros(region.params_shape)`, `0.5 * np.ones(region.params_shape)`, or `np.ones(region.params_shape)`. For optimizer starting parameters previously passed as `params0`, configure the design region before constructing or updating the enclosing design and optimizer; use `CustomInitializationSpec(params=params0)` to preserve an existing array, or `RandomInitializationSpec(seed=...)` for reproducible random starts.
519
+ - Removed deprecated `SimulationData.plot_field(field_name="int")`, `SimulationData.plot_field(..., freq=...)`, and `SimulationData.plot_field(..., time=...)`; use `field_name="E", val="abs^2"`, `plot_field(..., f=...)`, and `plot_field(..., t=...)`.
520
+ - Removed deprecated `to_field_monitors()` method on terminal-based scattering-matrix ports (e.g. `LumpedPort`, `WavePort`); use `to_monitors()` instead.
521
+ - Removed the deprecated `conformal` flag from heat-charge monitors (`TemperatureMonitor`, `VolumeMeshMonitor`, and the `Steady*` charge monitors). Monitor geometry no longer affects meshing: the simulation mesh is never forced to conform to a monitor. For value-producing monitors (temperature, potential, and the other `Steady*` fields), planar and line monitors now return values interpolated from the computational grid, while volumetric monitors return the grid cells contained in the monitor region. Files saved with older versions load unchanged, as the flag is dropped automatically on load.
522
+
523
+ ### Planned Deprecation
524
+
525
+ - `Palik_Lossless` is deprecated as a material-library variant name; material-library lookup now warns and returns `Palik_LowLoss`, while `Palik_NoLoss` provides zero-loss Palik fits where supported by low-loss source ranges.
526
+
527
+ ## [2.11.2] - 2026-05-03
528
+
529
+ ### Added
530
+
531
+ - Added documentation page explaining the three S-parameter definitions (`pseudo`, `power`, `symmetric_pseudo`) in `TerminalComponentModeler`, including mathematical derivations, symmetry properties, and power calculations.
532
+ - `TerminalComponentModeler` now warns when its `freqs` exceeds the soft limit used by frequency-domain monitors.
533
+ - Added local EME support for expressing a propagated S-matrix in user-supplied port modes.
534
+
535
+ ### Changed
536
+
537
+ - Added `Result.real_cost` to the design plugin so pre/post runs can report billed FlexCredit usage after execution.
538
+ - Increased the maximum number of EME cells from 100 to 500.
539
+
540
+ ### Fixed
541
+
542
+ - Fixed mode solver to place PEC boundaries at the closest grid boundary outside the monitor plane, matching user expectations when using the plane bounds as PEC locations (common in RF workflows). Added `solver_field_bounds` to ensure accurate field interpolation near the hard boundary.
543
+ - Fixed `eps_model()` across Tidy3D media classes to consistently accept scalar, list, and NumPy array frequency inputs, including custom and anisotropic media.
544
+ - Fixed `ModeSimulation.from_mode_solver()` to infer a wavelength from the mode-solver-associated simulation source when converting simulations that use auto grid without an explicit `grid_spec.wavelength`.
545
+ - Fixed TFSF source validation to reject setups whose in-domain region collapses to zero extent along both tangential directions, such as 1D simulations.
546
+ - Fixed CustomPoleResidue adjoint postprocessing to preserve the frequency axis for zero-gradient multi-frequency chunks.
547
+ - Stabilized Tidy3D model JSON float formatting across supported pydantic-core versions.
548
+ - Fixed EME S-matrix basis conversion for `EMEModeSweep` results that request different numbers of modes at different sweep points.
549
+ - Fixed `TerminalComponentModeler` to snap `WavePort` internal absorbers and mode sources to the updated simulation grid (which includes the wavelength override and mesh overrides) rather than the original user-provided grid, preventing absorbers from landing off-grid in the final simulation.
550
+ - Fixed inline PyVista plots in Jupyter on Python 3.13+ so they render interactively instead of failing or falling back to a static image.
551
+
552
+ ## [2.11.1] - 2026-04-21
553
+
554
+ ### Added
555
+
556
+ - Added local EME propagation via `EMESimulation.propagate(mode_data)` and a per-element staged pipeline (`mode_simulations`, `stage_cell_modes`, `compute_cell_overlap`, `compute_interface_overlap`, `compute_cell_smatrix`, `compute_interface_smatrix`, `compute_smatrix`). For iterative design with many sweeps on the same modal basis, `compute_overlaps(mode_data)` + `propagate_from_overlaps(cell_overlaps, interface_overlaps)` amortizes the overlap stage. Intermediate results (`EMEStageCellOverlap`, `EMEStageInterfaceSMatrix`, etc.) are serializable and reusable across parameter sweeps. `EMEFreqSweep` is not supported; use `EMESimulation.freqs` directly. The local path does not support anisotropic media in bent cells with `bend_medium_frame="global"`; use `bend_medium_frame="co_rotating"` or the remote backend in that case.
557
+ - Added `filter_func` support to `MethodGrid` and `MethodMonteCarlo` in the design plugin so invalid parameter combinations can now be skipped during parameter sweeps.
558
+ - Added `plot_field_components()` to `ModeSimulationData` and `ModeSolver` for plotting multiple mode field components in one call.
559
+ - Added `FieldProjector.from_near_field_data()` for projecting directly from custom or modified `FieldData`.
560
+
561
+ ### Changed
562
+
563
+ - Improved near-field projection performance.
564
+ - Strip autograd tracers from DataArray plotting functions before plotting.
565
+ - Keep original simulation data from being zeroed out during the adjoint pipeline.
566
+ - Updated adjoint shape integration to sample interface permittivity directly from anisotropic simulation permittivity data.
567
+
568
+ ### Fixed
569
+
570
+ - Fixed `ValueError` shape mismatch in `Simulation.epsilon()` when a `CustomMedium` uses `ScalarFieldDataArray` with a frequency dimension, by squeezing the leftover `f` dimension after spatial interpolation in `eps_diagonal_on_grid`.
571
+ - Fixed wrapped `angle_theta` handling for glancing-incidence checks so values like `-pi/2` and `5*pi/2` are validated consistently in `ModeSpec` and angled field sources.
572
+ - Added frontend validation for TCAD refinement regions and lines so unsupported degenerate shapes are rejected before submission.
573
+ - Fixed plot function override for tidy3d data arrays.
574
+
575
+ ## [2.11.0] - 2026-04-06
576
+
577
+ ### Added
578
+
579
+ - Added `ModeSortSpec.keep_modes` which can be set to `"all"` to keep all modes in the mode solver (the default), `"filtered"` to keep only modes passing the filter defined by the `ModeSortSpec`, or an integer `N` to keep only the top `N` modes after filtering and sorting.
580
+ - Added `Grid.fine_mesh_info` property to identify and report locations where grid cell sizes are fine for understanding meshing hotspots.
581
+ - Added `GaussianOverlapMonitor` and `AstigmaticGaussianOverlapMonitor` for decomposing electromagnetic fields onto Gaussian beam profiles.
582
+ - Added flag `remove_fragments` to the base `UnstructuredGrid` to remove fragments in unstructured grids. This can ease meshing by eliminating internal boundaries in overlapping structures.
583
+ - Added `fill_fraction_box` as a new filtering and sorting key which computes the field-energy fill fraction within a specified bounding box (`ModeSortSpec.bounding_box`).
584
+ - Added visualization of finest grid regions in `Simulation.plot_grid()` with shaded regions highlighting areas of fine meshing.
585
+ - Added `GaussianPort` and `AstigmaticGaussianPort` for S-matrix calculations using Gaussian beam sources and overlap monitors.
586
+ - Added deprecation warning for `conformal` in TCAD heat/charge monitors when explicitly set; this option is ignored (treated as `False`) when meshing with `remove_fragments=True`.
587
+ - Added `symmetric_pseudo` option for `s_param_def` in `TerminalComponentModeler` which applies a scaling factor that ensures the S-matrix is symmetric in reciprocal systems.
588
+ - Added autograd support for `Sphere`.
589
+ - Added `GeometryArray` class for efficiently representing multiple copies of a base geometry at specified offsets with transformation matrices. Includes a convenience method `geometry.array(offsets=..., transforms=...)` on all geometry objects.
590
+ - Added validation warning in `HeatChargeSimulation` for very small `Cylinder` radii to help users avoid meshing and numerical issues.
591
+ - Added `DesignSpace` support for sweeping `WorkflowType` objects, including mode/EME simulations and component modelers.
592
+ - Added config versioning with automatic backward migrations by default; forward-compat is best-effort unless strict mode is enabled.
593
+ - Added in-memory caching for downloaded batch results, configurable via ``config.batch_data_cache``.
594
+ - Added `current_amplitude_definition` parameter to `UniformCurrentSource` for size-independent total current injection. Set to `"total"` to interpret the source amplitude as total current rather than current density.
595
+ - Added baseband source time classes (`BasebandStep`, `BasebandGaussianPulse`, `BasebandRectangularPulse`, `BasebandCustomSourceTime`) for transient RF simulations with real-valued time signals.
596
+
597
+ - Added `SurfaceFieldMonitor` and `SurfaceFieldTimeMonitor` for recording electromagnetic fields on PEC surfaces in frequency and time domains, along with corresponding data classes (`SurfaceFieldData`, `SurfaceFieldTimeData`) and documentation.
598
+ - - Add ``numerical_structures`` hook to custom autograd run paths for user-defined structure creation and gradients in simulation and component-modeler workflows.
599
+ - Added frequency-parametrized lossy dielectrics and lossy metals to the RF material library. Users can access the default medium via the ``medium`` property (fitted for the default microwave frequency range of 0.3-300 GHz) or get a medium fitted for a specific frequency range via ``medium_in_range(frequency_range)``. For dielectrics, if the requested range extends beyond the original fitting range, a new model is created with averaged properties and a warning is issued.
600
+ - Added autograd support for custom source gradients with respect to `field_dataset` and `current_dataset`.
601
+ - Added optional `vgpu_allocation` parameter to `web.run`, `web.run_async`, `Job`, and `Batch` to control virtual GPU allocation for cloud task submission.
602
+
603
+ - Added `TerminalWavePort` for terminal-driven modal excitation in transmission line simulations. Added `reference_impedance` field on both `WavePort` and `TerminalWavePort` to allow user-specified reference impedance for S-parameter calculations.
604
+ - Monitors with `colocate=False` now compute flux, dot product, and outer dot product directly on the Yee grid without interpolation, improving accuracy.
605
+ - Added `TerminalComponentModelerData.renormalize()` method for renormalizing S-parameters to arbitrary reference impedances, supporting scalar, per-port, and full-matrix impedance specifications.
606
+ - Added `use_colocated_integration` field on sources and monitors to control whether flux, dot products, and overlap integrals use colocated or native Yee grid fields. RF wave ports now default to non-colocated integration for improved accuracy.
607
+ - Added `bulges` parameter to `PolySlab` geometry for defining arc segments in 2D polygon cross-sections using the standard bulge convention (bulge = tan(theta/4)), enabling curved edges between vertices.
608
+ - Added `CircuitImpedanceModel` to support arbitrary RLC circuits in `LinearLumpedElement`. Users can construct it directly with a valid list of components or use the class method `from_spice()` for instantiation from a SPICE netlist.
609
+ - Implemented batch execution optimizations by reducing HTTP calls and increasing parallelization.
610
+ - Added ``pole_residue`` broadband method for ``ModeSource`` and ``GaussianBeam`` sources, using vector fitting with auxiliary differential equations as an alternative to Chebyshev interpolation for frequency-dependent field injection.
611
+ - Added adjoint support for `GaussianOverlapMonitor` and `AstigmaticGaussianOverlapMonitor`.
612
+ - Added autograd support for `center` derivatives on `CustomFieldSource` and `CustomCurrentSource` for dimensions where source `size > 0`.
613
+ - Added `plot_port` support for `LumpedPort`, `CoaxialLumpedPort`, and `WavePort` in `TerminalComponentModeler`.
614
+ - Added native Claude Code and Gemini CLI plugin manifests for the Tidy3D MCP integration.
615
+
616
+ - Added parallel adjoint execution for local gradients when `config.adjoint.parallel_run = True`; this only works for eligible monitors and can make gradient calculations up to 2x faster.
617
+ - Added EME support for `EMEModeSpec.increasing_mode_tolerance` so weakly increasing modes caused by numerical noise can be retained without changing the default `0.0` behavior. Added `EMEModeSpec.bend_medium_frame` to choose whether bent-cell media are interpreted in the global frame or as co-rotating with the local waveguide frame; bent custom media are currently supported only in the co-rotating interpretation.
618
+ - Added `WavePort.to_mode_simulation()` and improved standalone wave-port mode solving to preserve local mesh refinement, PEC frames, and port extrusions, while also allowing optional structure/grid overrides, configurable structure-priority handling, and auto mode-spec resolution from the prepared local simulation.
619
+ - Added config-backed `run` and `vgpu` web run options, including scoped `with tidy3d.config as tmp_config:` overrides.
620
+ - Added support for `FilterProject` and `ErosionDilationPenalty` on symmetry-reduced inverse-design regions.
621
+ - Enabled `GaussianBeam` and `AstigmaticGaussianBeam` gradients.
622
+ - Added `PolygonMarker` with explicit `hull` and `holes` fields, and `symmetric` flag on `EdgePairMarker` to distinguish same-layer vs cross-layer DRC violations.
623
+ - Added `interp_method` parameter to `NedeljkovicSorefMashanovich` to support different interpolation methods (`linear`, `nearest`, `zero`, `log`) for perturbation coefficients between tabulated wavelengths.
624
+
625
+ ### Changed
626
+
627
+ - Added deprecation warning for `TemperatureMonitor` and `SteadyPotentialMonitor` when `unstructured` parameter is not explicitly set. The default value of `unstructured` will change from `False` to `True` after the 2.11 release.
628
+ - Added `custom_vjp` and new custom run functions that provide hooks into adjoint for custom gradient calculations.
629
+ - Added validation to `GaussianDoping` to ensure `ref_con < concentration`, validate `source` face identifier, and warn the user when the box size is not sufficient for the specified transition width.
630
+ - Added warning in `LayerRefinementSpec` when `dl_min_from_gaps` (derived from automatic gap refinement) is very small relative to the lateral grid size for identifying cases where excessive grid refinement may occur due to very small detected gaps.
631
+ - Reduced computation time of `adaptive_vjp_spacing` for `GeometryGroup` by allowing permittivity based spacing value to be cached.
632
+ - Local caching is now enabled by default (set `td.config.local_cache.enabled=False` to opt out).
633
+ - Changed default `num_points` in `EMEModeSpec.interp_spec` from 3 to 5 for improved accuracy of frequency interpolation.
634
+ - Unstructured data plots are now "crinkled", showing the full mesh elements that cover given monitor boundaries. Previously, the mesh elements were "clipped" to the monitor boundaries.
635
+ - `Scene.perturbed_mediums_copy()` now generates unique medium names based on structure names, eliminating duplicate medium name warnings.
636
+ - Changed the default value of `fill_value` in `UnstructuredGridDataset.interp()` from `0` to `"extrapolate"`. This means points outside the mesh will now use nearest-neighbor extrapolation instead of being filled with zeros.
637
+
638
+ - Improved charge simulation documentation: clarified 2D vs 3D output units, added unit metadata to monitor data fields, and fixed docstring formatting and formula inaccuracies across TCAD components.
639
+ - Changed field decay checking from percentage-based intervals to a fixed number of time steps (default 400), enabling quicker automatic shutoff in long-running simulations.
640
+ - `Scene.perturbed_mediums_copy()` now generates unique medium names based on structure names, eliminating duplicate medium name warnings.
641
+ - Refactored adjoint source and monitor preparation internals to support parallel adjoint workflows.
642
+
643
+ - The fully tensorial mode solver (required for fully anisotropic media or non-zero `ModeSpec.angle_theta`) now requires `tidy3d-extras` for local runs; install with `pip install tidy3d[extras]` or run through the server.
644
+ - Mode solver normalization now uses the dot product with the monitor's `conjugated_dot_product` setting instead of flux magnitude.
645
+
646
+ - Lazy `SimulationData` objects now load monitors on demand instead of materializing every monitor up front.
647
+ - Improved local approximate field projection performance for forward and autodiff workloads.
648
+ - Improved CustomMedium adjoint postprocessing memory usage by chunking structure-frequency work, auto-selecting chunk sizes from available memory, and removing avoidable data copies in the chunked pipeline.
649
+ - Improved `Simulation.plot_grid()` performance by batching matplotlib draw calls for override structures and snapping points.
650
+
651
+ ### Fixed
652
+
653
+ - Fixed `CustomMedium` gradient calculation when field coordinates exactly align with boundaries.
654
+ - Fixed adjoint simulation `grid_spec` to align exactly with forward simulation for correct `FieldData` adjoint source power.
655
+ - Fixed frequency accumulation of gradients for custom dispersive media.
656
+ - Fixed `snap_box_to_grid` producing zero-size boxes when using `Expand` behavior with very small intervals centered on a grid point.
657
+ - Fixed sliver polygon artifacts in 2D material subdivision by filtering polygons based on grid cell size, preventing numerical issues with large-coordinate geometries.
658
+ - Fixed intermittent "API key not found" errors in parallel job launches by making configuration directory detection race-safe.
659
+ - Fixed local cache race conditions causing `FileNotFoundError`.
660
+ - Fixed redundant logging when `Batch.download()` skips existing files, and added `replace_existing` to `Batch.run()` so overwrite behavior can be controlled directly.
661
+ - Fixed redundant server lookups when loading simulation results.
662
+ - Updated docstrings for `DerivativeInfo` to more accurately reflect dataclass fields.
663
+ - Fixed `TerminalComponentModeler` serialization failure with `CustomGridBoundaries` by storing JSON-serializable grid metadata in `GridSpec.attrs`.
664
+ - Improved `ModeSolver.solve()` to suppress the accuracy warning when local subpixel averaging is enabled via `tidy3d-extras`, and expanded docstrings for `ModeSolver.solve()`, `ModeSimulation.run_local()`, `Simulation.epsilon()`, and `Simulation.epsilon_on_grid()` to document the `config.simulation.use_local_subpixel` option.
665
+ - Fixed `ModeSolver.validate_pre_upload` not validating `MicrowaveModeSpec` with `AutoImpedanceSpec`, causing cryptic server-side errors for invalid conductor geometries.
666
+ - Fixed local cache not storing results for `ModalComponentModeler` (and `TerminalComponentModeler`) runs, causing cache misses on repeated `web.run()` calls.
667
+ - Fixed spurious `ModeSimulation` error logs during deserialization of `SimulationDataMap` by adding discriminators to `SimulationType` and `SimulationDataType` unions.
668
+ - Fixed unintended model output in Jupyter notebooks during `import tidy3d` by preventing `Tidy3dBaseModel.__str__` from triggering notebook display side effects.
669
+
670
+ - Fixed premature simulation shutoff when sources have a delayed peak (e.g. large GaussianPulse offset), where zero field energy before the source activates was incorrectly interpreted as full decay.
671
+ - Improved KLayout executable discovery on macOS for Homebrew cask app-suite installs under `/Applications/KLayout`.
672
+ - Fixed angled mode-solving for ModeMonitor runs with GaussianBeam sources by preventing rotated-reference simulations from revalidating retained sources.
673
+ - Fixed loading of medium settings so empty `NonlinearSpec` inputs are ignored instead of unintentionally enabling nonlinearity.
674
+ - Reformulated axial ratio calculation to avoid catastrophic cancellation for near-linear polarization, and raised the safety-net cap from 100 (40 dB) to 1e5 (100 dB).
675
+
676
+ - Fixed `num_workers` propagation in batch async/autograd paths so explicit values are respected, while defaults are preserved when omitted. Upload/start uses a separate fixed concurrency of 64 workers.
677
+ - Batch upload/start now logs per-task errors during upload/validation/start.
678
+ - Fixed adjoint SimulationData splitting to match monitor data by monitor name, with warnings for missing or unexpected monitor entries.
679
+ - Fixed autograd derivatives for `CustomFieldSource` and `CustomCurrentSource` datasets to preserve complex-valued gradients instead of dropping the imaginary component.
680
+ - Fixed simulation validation failure when WavePort `extrude_structures` was enabled with named structures by assigning unique names to extruded structures.
681
+ - Fixed incorrect far-field results from ``DirectivityMonitor`` when symmetry is used.
682
+ - Fixed local ``FieldProjector.project_fields()`` runs to support ``verbose=False`` when progress-bar output needs to be suppressed.
683
+ - Fixed traced Cartesian field projection conversion so projected fields can be used directly as custom source datasets without producing object-dtype arrays during serialization.
684
+ - Fixed autograd deserialization of remote complex-array VJP payloads used by traced field and custom source gradients.
685
+
686
+ - Fixed EME bent-waveguide mode preprocessing for anisotropic media in the default global-frame interpretation by tracking cumulative bend angle per cell and rotating anisotropic tensor data in a Yee-grid-aware way that preserves subpixel sampling before each local mode solve. Before this fix, bent orientation-sensitive media were effectively interpreted in the co-rotating frame; set `EMEModeSpec.bend_medium_frame="co_rotating"` to preserve that behavior. Also allow only reciprocal fully anisotropic media in EME validation, include swept frequencies in bent anisotropy checks, and reject bent-cell length sweeps that would reuse anisotropic modes at the wrong absolute bend angle.
687
+ - Fixed `Box.surfaces_with_exclusion()` so exclude_surfaces is respected for box surface generation.
688
+ - `ModeSpec` now rejects non-finite bend_radius values during validation.
689
+ - Fixed traced projected field, poynting, mode-solver summary, and directivity datasets so accessing items preserves tidy3d `DataArray` behavior under autograd.
690
+ - Fixed `DesignSpace.estimate_cost()` so nested container outputs are estimated by summing all simulations and batches instead of undercounting them.
691
+ - Fixed local 2D field projection validation and single-cell Cartesian resampling failures in the Tidy3D client.
692
+ - Fixed KLayout DRC parser crash on directed edge-pairs from cross-layer rules (separation, overlap, enclosing).
693
+ - Removed premature deprecation warning from `RLCNetwork` as the intended replacement is not yet available.
694
+ - Fixed autograd backward postprocessing to enforce ascending, aligned frequency ordering between adjoint monitor metadata and field datasets.
695
+ - Fixed generated JSON schemas for geometries, monitors, and simulations so `center` now shows the correct default value `(0, 0, 0)` instead of `null`.
696
+ - Fixed exported JSON schemas to include defaults for fields defined with zero-argument default factories.
697
+ - Fixed `FieldProjectionAngleMonitor`, `FieldProjectionCartesianMonitor`, and `FieldProjectionKSpaceMonitor` validation so structures outside the simulation domain no longer trigger homogeneous-medium errors.
698
+ - Fixed abrupt PolySlab sidewall edge oversampling near the composite quadrature threshold and avoided single-point quadrature on tiny edge fragments.
699
+ - Increased `WavePort` structure extrusion tolerance so that structures whose vertices are slightly offset from the port plane are reliably captured during extrusion.
700
+ - Fixed a spurious zero-thickness geometry warning for finalized simulations containing lumped elements or converted 2D materials.
701
+
702
+ ### Breaking Changes
703
+
704
+ - `ModeSortSpec.sort_key` is now required with a default of `"n_eff"` (previously optional with `None` default). `ModeSortSpec.sort_order` is now optional with a default of `None`, which automatically selects the natural order based on `sort_key` and `sort_reference`: ascending when a reference is provided (closest first), otherwise descending for `n_eff` and polarization fractions (higher values first), ascending for `k_eff` and `mode_area` (lower values first).
705
+ - Changed the interpretation of `waist_distance` and `waist_distances` for backward-propagating Gaussian beams (`GaussianBeam`, `AstigmaticGaussianBeam`, `GaussianBeamProfile`, `AstigmaticGaussianBeamProfile`). Previously, the waist position was interpreted relative to the directed propagation axis, meaning switching `direction` from `+` to `-` would also flip the waist position in the global reference frame. Now, the waist position is defined consistently for both directions: a positive `waist_distance` always places the beam waist behind the source/monitor plane (toward the negative normal axis), regardless of propagation direction. This ensures reciprocity between Gaussian sources and overlap monitors used in port-based S-matrix calculations. Users with existing simulations using backward-propagating Gaussian beams with non-zero waist distances may need to adjust their values.
706
+ - Added optional automatic extrusion of structures at the simulation boundaries into/through PML/Absorber layers via `extrude_structures` field in class `AbsorberSpec`.
707
+ - 1D lumped elements (with zero lateral extent) are no longer allowed. Use a small finite lateral extent (e.g., `1e-6`) instead.
708
+ - Added `structure_priority_mode` for `TerminalComponentModeler` and default to `"conductor"` to ensure metal structures override dielectrics regardless of structure order, preventing order-dependent results in RF simulations.
709
+ - `web.Batch(simulations=...)` now requires string task names when simulations are passed as a dictionary. Numeric keys (for example `0`, `1`) are no longer converted automatically; convert them to strings first (for example `"0"`, `"1"`).
710
+
711
+ ### Planned Deprecation
712
+
713
+ - `RLCNetwork` (a deprecation warning is now issued). Use `CircuitImpedanceModel` instead. `AdmittanceNetwork` may be renamed to `AdmittanceModel` in a future release.
714
+
715
+ ## [2.10.2] - 2026-01-21
716
+
717
+ ### Added
718
+ - Added `warn_once` option to logging configuration (`td.config.logging.warn_once`) that causes each unique warning message to be shown only once per process, reducing noise from repeated validation warnings.
719
+ - `EMECoefficientMonitor` now supports all of the same fields as `EMESimulationData.coeffs`, with the benefit of downsampling. The fields can be selected via the `EMECoefficientMonitor.fields` property.
720
+
721
+ ### Changed
722
+ - Unified inside/outside permittivity handling for all geometries when computing shape gradients.
723
+ - Enabled PEC gradients for dielectric structures embedded in PEC through use of `background_medium` field in `Structure` which includes shapes with combinations of dielectric-dielectric and dielectric-PEC boundaries.
724
+ - Improved `ComponentModeler` task monitoring.
725
+
726
+ ### Fixed
727
+ - Fixed interpolation handling for permittivity and conductivity gradients in `CustomPoleResidue`.
728
+ - Fixed docstrings with missing Notes sections causing spurious parameters in Sphinx documentation.
729
+ - Fixed coordinate snapping in shape gradient computation to handle 0 normal and grid spacing components.
730
+ - Fixed duplicate printing of cost estimation of `Job`.
731
+ - Fixed `outer_dot` with EME port modes `interpolated_copy`.
732
+ - Fixed `_finalized_volumetric_structures` not respecting `structure_priority_mode` when no 2D materials or lumped elements are present.
733
+
734
+ ### Removed
735
+ - Removed support for inconsistent `interp_specs` in the EME grid.
736
+
737
+ ## [2.10.1] - 2026-01-14
738
+
739
+ ### Added
740
+ - Added priority attribute to `TopologyDesignRegion` to enable manual control of overlapping structures.
741
+ - `to_mat_file()` method is now available on `ModeSimulationData` and `HeatChargeSimulationData` for exporting results to MATLAB `.mat` files.
742
+ - Added autograd support for diagonal `AnisotropicMedium` and `CustomAnisotropicMedium` with diagonal permittivity tensor.
743
+ - Added support of numpy 2.4
744
+ - Added validation to `DCVoltageSource` that warns when duplicate voltage values are detected in the `voltage` array, including treating `0` and `-0` as the same value.
745
+
746
+ ### Changed
747
+ - For `HeatChargeSimulation` objects, the `plot` function now adds the simulation boundary conditions.
748
+ - Improved memory performance in `postprocess_adj` by using `isel` instead of `sel` for xarray slicing.
749
+
750
+ ### Fixed
751
+ - Fixed `AutoImpedanceSpec` validation to check path intersections against all conductors, not just filtered ones, as well as the mode plane bounds.
752
+ - Fixed `WavePort` validation so invalid `mode_spec` errors are no longer masked by a `KeyError`.
753
+ - Fixed adjoint gradients being treated as zero due to scale-dependent `np.allclose(..., atol=1e-8)` checks, which could skip adjoint simulations and return zero gradients.
754
+ - Fixed adjoint setup crashing when traced monitor outputs produce no adjoint sources, returning no adjoint simulations instead.
755
+ - Fixed autograd `interpn` compatibility with newer SciPy versions by avoiding dtype coercion during interpolation setup.
756
+ - Fixed interpolation handling for permittivity and conductivity gradients in CustomMedium.
757
+ - Restored original batch-load logging by suppressing per-task “Loading simulation…” messages.
758
+ - Fixed output range of `tidy3d.plugins.invdes.FilterAndProject` to be between 0 and 1.
759
+ - Cropped adjoint monitor sizes in 2D simulations to planar geometry intersection.
760
+ - Fixed `Batch.download()` silently succeeding when background downloads fail (e.g., gzip extraction errors).
761
+ - Handling of zero values when using `sim_data.plot_field` with `scale=dB`.
762
+ - Fixed `intersections_plane` method in `PolySlab`, which sometimes missed vertices for planes coincident with `PolySlab` side faces.
763
+ - Fixed `http_interceptor` crash on non-dict JSON responses
764
+ - Fixed gradient regression for `Box` geometries where outside permittivity was not being correctly sampled.
765
+
766
+ ## [2.10.0] - 2025-12-18
767
+
768
+ ### Added
769
+ - Added rectangular and radial taper support to `RectangularAntennaArrayCalculator` for phased array amplitude weighting; refactored array factor calculation for improved clarity and performance.
770
+ - Selective simulation capabilities to `TerminalComponentModeler` via `run_only` and `element_mappings` fields, allowing users to run fewer simulations and extract only needed scattering matrix elements.
771
+ - Added KLayout plugin, with DRC functionality for running design rule checks in `plugins.klayout.drc`. Supports running DRC on GDS files as well as `Geometry`, `Structure`, and `Simulation` objects.
772
+ - Added "mil" and "in" (inch) units to `plot_length_units`.
773
+ - Objective functions that involve running `tidy3d.plugins.smatrix.ComponentModeler` can be differentiated with autograd.
774
+ - Access field decay values in `SimulationData` via `sim_data.field_decay` as `TimeDataArray`.
775
+ - Added ability to set first-order absorbing boundary conditions on simulation domain boundaries using either `ABCBoundary` or `ModeABCBoundary` classes.
776
+ - Added `frame` field to `ModeSource` (default: `None`) and `WavePort` (default: `PECFrame()`). Setting this to `PECFrame(length=...)` automatically places a thin PEC frame of specified length around the source/port. The automatically created frames can be inspected using `Simulation._finalized` property.
777
+ - Added `InternalAbsorber` class for placing first-order absorbing boundary conditions on planes inside the simulation domain. Internal absorbers are automatically wrapped in a PEC frame with a backing PEC plate on the non-absorbing side.
778
+ - Added `absorber` field (default: `True`) to `WavePort` for automatically placing an absorber behind the port.
779
+ - Added `conjugated_dot_product` field in `ModeMonitor` (default: `True`) and `WavePort` (default: `False`) to allow selecting the conjugated or non-conjugated dot product for mode decomposition.
780
+ - Support for gradients with respect to the `conductivity` of a `CustomMedium`.
781
+ - Added `VerticalNaturalConvectionCoeffModel`, a model for heat transfer due to natural convection from a vertical plate. It can be used in `ConvectionBC` to compute the heat transfer coefficient from fluid properties, using standard Nusselt number correlations for both laminar and turbulent flow.
782
+ - Added `BroadbandModeABCSpec` class for setting broadband absorbing boundary conditions that can absorb waveguide modes over a specified frequency range using a pole-residue pair model.
783
+ - `Scene.plot_3d()` method to make 3D rendering of scene.
784
+ - Added native web and batch support to run `ModalComponentModeler` and `TerminalComponentModeler` workflows.
785
+ - Added `SimulationMap` and `SimulationDataMap` immutable dictionary-like containers for managing collections of simulations and results.
786
+ - Added `TerminalComponentModelerData`, `ComponentModelerData`, `MicrowaveSMatrixData`, and introduced multiple DataArrays for modeler workflow data structures.
787
+ - Added autograd support for dispersive material models: `Sellmeier`, `Drude`, `Lorentz`, `Debye` and their custom medium variants.
788
+ - Added check and exception for NaN data in the adjoint pipeline to raise issue to user before adjoint source creation failure.
789
+ - Added autograd support for `TerminalComponentModeler` and `ModalComponentModeler`.
790
+ - Added `initialize_params_from_simulation` to `tidy3d.plugins.autograd.invdes` to initialize topology design regions from an underlying simulation geometry.
791
+ - Added autograd support for sidewall angles in `td.Cylinder` and `td.PolySlab`.
792
+ - New `MediumMonitor` that returns both permittivity and permeability profiles.
793
+ - Task names are now optional when using `run(sim)` or `Job`. When running multiple jobs (via `run_async` or `Batch`), you can also provide simulations as a list without specifying task names. The previous dictionary-based format with explicit task names is still supported.
794
+ - Enabled lazy loading of data via `web.load(..., lazy=True)`. When used, this returns a lightweight proxy object holding a reference to the data. On first access to any field or method, the proxy transparently loads the full object (same as with the default lazy=False).
795
+ - A new type of doping box has been introduced, `CustomDoping` which accepts a `SpatialDataArray` to define doping concentration. Unlike in the case where a `SpatialDataArray`, custom doping defined with `CustomDoping` have additive behavior, i.e., one can add other doping on top. This deprecates the `SpatialDataArray` as direct input for `N_a` and `N_d`.
796
+ - Non-isothermal Charge simulations are now available. One can now run this type of simulations by using the `SteadyChargeDCAnalysis` as the `analysis_spec` of a `HeatChargeSimulation`. This type of simulations couple the heat equation with the drift-diffusion equations which allow to account for self heating behavior.
797
+ - Because non-isothermal Charge simulations are now supported, new models for the effective density of states and bandgap energy have been introduced. These models are the following: `ConstantEffectiveDOS`, `IsotropicEffectiveDOS`, `MultiValleyEffectiveDOS`, `DualValleyEffectiveDOS`.
798
+ - Added the Hurkx model for direct band-to-band tunneling `HurkxDirectBandToBandTunneling`.
799
+ - Added Selberherr's model for impact ionization `SelberherrImpactIonization`.
800
+ - Added S-parameter de-embedding to `TerminalComponentModelerData`, enabling recalculation with shifted reference planes.
801
+ - Added optional automatic extrusion of structures intersecting with a `WavePort` via the new `extrude_structures` field, ensuring mode sources, absorbers, and PEC frames are fully contained.
802
+ - Added support for `tidy3d-extras`, an optional plugin that enables more accurate local mode solving via subpixel averaging.
803
+ - Added support for `symlog` and `log` scale plotting in `Scene.plot_eps()` and `Scene.plot_structures_property()` methods. The `symlog` scale provides linear behavior near zero and logarithmic behavior elsewhere, while 'log' is a base 10 logarithmic scale.
804
+ - Added `LowFrequencySmoothingSpec` and `ModelerLowFrequencySmoothingSpec` for automatic smoothing of mode monitor data at low frequencies where DFT sampling is insufficient.
805
+ - Added `MicrowaveModeSpec` for RF-specific mode information with customizable characteristic impedance calculations.
806
+ - Added `MicrowaveModeMonitor` and `MicrowaveModeSolverMonitor` for microwave and RF mode analysis with transmission line data.
807
+ - Added `MicrowaveModeData` and `MicrowaveModeSolverData` extending mode solver results with characteristic impedance, voltage coefficients, and current coefficients.
808
+ - Added `AutoImpedanceSpec` for automatic transmission line impedance calculation based on simulation geometry.
809
+ - Added `CustomImpedanceSpec` for user-defined voltage and current path specifications in impedance calculations.
810
+ - Added voltage integral specification classes: `AxisAlignedVoltageIntegralSpec` and `Custom2DVoltageIntegralSpec`.
811
+ - Added current integral specification classes: `AxisAlignedCurrentIntegralSpec`, `CompositeCurrentIntegralSpec`, and `Custom2DCurrentIntegralSpec`.
812
+ - `sort_spec` in `ModeSpec` allows for fine-grained filtering and sorting of modes. This also deprecates `filter_pol`. The equivalent usage for example to `filter_pol="te"` is `sort_spec=ModeSortSpec(filter_key="TE_polarization", filter_reference=0.5)`. `ModeSpec.track_freq` has also been deprecated and moved to `ModeSortSpec.track_freq`.
813
+ - Added `custom_source_time` parameter to `ComponentModeler` classes (`ModalComponentModeler` and `TerminalComponentModeler`), allowing specification of custom source time dependence.
814
+ - Validation for `run_only` field in component modelers to catch duplicate or invalid matrix indices early with clear error messages.
815
+ - Introduced a profile-based configuration manager with TOML persistence and runtime overrides exposed via `tidy3d.config`.
816
+ - Added support of `os.PathLike` objects as paths like `pathlib.Path` alongside `str` paths in all path-related functions.
817
+ - Added local simulation result caching to avoid rerunning identical simulations. Enable and configure it through `td.config.local_cache` (size limits, cache directory). Use CLI commands `tidy3d cache {info, list, clear}` to inspect or clear the cache.
818
+ - Added `DirectivityMonitorSpec` for automated creation and configuration of directivity radiation monitors in `TerminalComponentModeler`.
819
+ - Added multimode support to `WavePort` in the smatrix plugin, allowing multiple modes to be analyzed per port.
820
+ - Added support for `.lydrc` files for design rule checking in the `klayout` plugin.
821
+ - Added a Gaussian inverse design filter option with autograd gradients and complete padding mode coverage.
822
+ - Added support for argument passing to DRC file when running checks with `DRCRunner.run(..., drc_args={key: value})` in klayout plugin.
823
+ - Added support for `nonlinear_spec` in `CustomMedium` and `CustomDispersiveMedium`.
824
+ - `tidy3d.plugins.design.DesignSpace.run(..., fn_post=...)` now accepts a `priority` keyword to propagate vGPU queue priority to all automatically batched simulations.
825
+ - Introduced `BroadbandPulse` for exciting simulations across a wide frequency spectrum.
826
+ - Added `interp_spec` in `ModeSpec` to allow downsampling and interpolation of waveguide modes in frequency.
827
+ - Added warning if port mesh refinement is incompatible with the `GridSpec` in the `TerminalComponentModeler`.
828
+ - Various types, e.g. different `Simulation` or `SimulationData` sub-classes, can be loaded from file directly with `Tidy3dBaseModel.from_file()`.
829
+ - Added `interp_spec` in `EMEModeSpec` to enable faster multi-frequency EME simulations. Note that the default is now `ModeInterpSpec.cheb(num_points=3, reduce_data=True)`; previously the computation was repeated at all frequencies.
830
+ - Added `smoothed_projection` for topology optimization of completely binarized designs.
831
+ - Added more RF-specific mode characteristics to `MicrowaveModeData`, including propagation constants (alpha, beta, gamma), phase/group velocities, wave impedance, and automatic mode classification with configurable polarization thresholds in `MicrowaveModeSpec`.
832
+ - Introduce `tidy3d.rf` namespace to consolidate all RF classes.
833
+ - Added support for custom colormaps in `plot_field`.
834
+ - Added `symmetrize_mirror`, `symmetrize_rotation`, `symmetrize_diagonal` functions to the autograd plugin. They can be used for enforcing symmetries in topology optimization.
835
+ - Klayout plugin automatically finds klayout installation path at common locations.
836
+ - Added autograd support for `TriangleMesh`, allowing gradient computation with respect to mesh vertices for inverse design.
837
+ - Added `EMESimulation.store_coeffs` to store coefficients from the EME solver, including mode overlaps, interface S matrices, and effective propagation indices.
838
+ - Get cell-related information from violation markers in `DRCResults` and `DRCViolation` to the klayout plugin: Use for example `DRCResults.violations_by_cell` to group them.
839
+ - `pixel_exact` option for `to_gds` export of simulations and structures. If this option is set, any custom medium will be exported as rectangular pixels according to the specification of the medium coordinates.
840
+
841
+ ### Changed
842
+ - Adaptive minimum spacing for `PolySlab` integration is now wavelength relative and a minimum discretization is set for computing gradients for cylinders.
843
+ - The `TerminalComponentModeler` defaults to the pseudo wave definition of scattering parameters. The new field `s_param_def` can be used to switch between either pseudo or power wave definitions.
844
+ - Restructured the smatrix plugin with backwards-incompatible changes for a more robust architecture. Notably, `ComponentModeler` has been renamed to `ModalComponentModeler` and internal web API methods have been removed. Please see our migration guide for details on updating your workflows.
845
+ - Prevent small bandwidth sources from being created in `TerminalComponentModeler` when modeler frequencies are close together.
846
+ - `Simulation.epsilon` now samples off-diagonal elements of fully tensorial permittivity at grid *boundaries*, to be consistent with the how these enter the FDTD simulation. This means that all off-diagonal components are now sampled at the same locations.
847
+ - Propagate `verbose` to `start` function in web API.
848
+ - `LayerRefinementSpec` defaults to assuming structures made of different materials are interior-disjoint for more efficient mesh generation.
849
+ - Improved performance of antenna metrics calculation by utilizing cached wave amplitude calculations instead of recomputing wave amplitudes for each port excitation in the `TerminalComponentModelerData`.
850
+ - Changed hashing method in `Tidy3dBaseModel` from sha256 to md5.
851
+ - Removed validators on limiting the number of geometries in a ClipOperation geometry.
852
+ - Improved the speed of computing `Box` shape derivatives when used inside a `GeometryGroup`.
853
+ - All RF and microwave specific components now inherit from `MicrowaveBaseModel`.
854
+ - `DirectivityMonitor` now forces `far_field_approx` to `True`, which was previously configurable.
855
+ - Unified run submission API: `web.run(...)` is now a container-aware wrapper that accepts a single simulation or arbitrarily nested containers (`list`, `tuple`, `dict` values) and returns results in the same shape.
856
+ - `web.Batch(ComponentModeler)` and `web.Job(ComponentModeler)` native support
857
+ - Simulation data of batch jobs are now automatically downloaded upon their individual completion in `Batch.run()`, avoiding waiting for the entire batch to reach completion.
858
+ - Port names in `ModalComponentModeler` and `TerminalComponentModeler` can no longer include the `@` symbol.
859
+ - Improved speed of convolutions for large inputs.
860
+ - Default value of `EMEModeSpec.interp_spec` is `ModeInterpSpec.cheb(num_points=3, reduce_data=True)` for faster multi-frequency EME simulations.
861
+ - Default value of `num_sweep` in `EMECoefficientMonitor` is now `None`, recording all sweep indices.
862
+ - Maximum number of frequencies in an `EMESimulation` is now larger if mode interpolation via `ModeInterpSpec` is used.
863
+ - Removed validator that would warn if `PerturbationMedium` values could become numerically unstable, since an error will anyway be raised if this actually happens when the medium is converted using actual perturbation data.
864
+ - Improved performance of adjoint gradient computation for `PolySlab` and `Cylinder` geometries through vectorized sidewall patch collection (~4x speedup).
865
+ - Added optional `max_results` handling to the kLayout `DRCLoader` and `DRCRunner` and speeded up parsing of big result sets.
866
+
867
+ ### Fixed
868
+ - Bug in `TerminalComponentModeler.get_antenna_metrics_data` when port amplitudes are set to zero.
869
+ - Added missing `solver_version` keyword argument to `run_async`.
870
+ - Fixed `interpn` data array method to be compatible with extrapolation outside of data array coordinates.
871
+ - Fixed `overlap_sort` to use the same value of the `conjugated_dot_product` field in `ModeMonitor`, and added the `conjugated_dot_product` field to `ModeSolver` and `ModeSimulation`.
872
+ - Stricter validation for `bend_radius` in mode simulations, preventing the bend center from coinciding with the simulation boundary.
873
+ - Prevent autograd adjoint simulations from reusing out-of-range `normalize_index` values by defaulting their normalization to the first adjoint source when needed.
874
+ - Subtasks validation errors from `web.upload(ComponentModeler)` previously were not being propagated to users, and hung without response.
875
+ - Ensured the legacy `Env` proxy mirrors `config.web` profile switches and preserves API URL.
876
+ - More robust `Sellmeier` and `Debye` material model, and prevent very large pole parameters in `PoleResidue` material model.
877
+ - Bug in `WavePort` when more than one mode is requested in the `ModeSpec`.
878
+ - Solver error for named 2D materials with inhomogeneous substrates.
879
+ - In `Tidy3dBaseModel` the hash (and cached `.json_string`) are now sensitive to changes in `.attrs`.
880
+ - More accurate frequency range for ``GaussianPulse`` when DC is removed.
881
+ - Bug in `TerminalComponentModelerData.get_antenna_metrics_data()` where `WavePort` mode indices were not properly handled. Improved docstrings and type hints to make the usage clearer.
882
+ - Improved type hints for `Tidy3dBaseModel`, so that all derived classes will have more accurate return types.
883
+ - More robust method for suppressing RF license warnings during tests.
884
+ - Fixed frequency sampling of `TransmissionLineDataset` within `MicrowaveModeData` when using group index calculation.
885
+ - Fixed DRC parsing for quoted categories in klayout plugin.
886
+ - Removed mode solver warnings about evaluating permittivity of a `Medium2D`.
887
+ - Maximum number of grid points in an EME simulation is now based solely on transverse grid points. Maximum number of EME cells is unchanged.
888
+ - Fixed handling of polygons with holes (interiors) in `subdivide()` function. The function now properly converts polygons with interiors into `PolySlab` geometries using subtraction operations with `GeometryGroup`.
889
+ - Fix to `outer_dot` when frequencies stored in the data were not in increasing order. Previously, the result would be provided with re-sorted frequencies, which would not match the order of the original data.
890
+ - Fixed bug where an extra spatial coordinate could appear in `complex_flux` and `ImpedanceCalculator` results.
891
+ - Fixed normal for `Box` shape gradient computation to always point outward from boundary which is needed for correct PEC handling.
892
+ - Fixed `Box` gradients within `GeometryGroup` where the group intersection boundaries were forwarded.
893
+ - Fixed `Box` gradients to use automatic permittivity detection for inside/outside permittivity.
894
+ - Improved degenerate mode handling in the mode solver to ensure modes respect the bi-orthogonality condition.
895
+
896
+ ### Removed
897
+ - Removed deprecated `use_complex_fields` parameter from `TwoPhotonAbsorption` and `KerrNonlinearity`. Parameters `beta` and `n2` are now real-valued only, as is `n0` if specified.
898
+ - Removed the Adjoint plugin.
899
+ - Deprecation of Python 3.9 support.
900
+
901
+ ### Breaking Changes
902
+ - Native web and batch support of `ModalComponentModeler` and `TerminalComponentModeler` required changing these classes schemas considerably.
903
+ - Equivalent behaviour is available using a different workflow.
904
+ - `folder_name`, `verbose`, `path_dir`, `batch_cached`, `verbose`, `callback_url` fields have been removed. They are accessible through the `tidy3d.web` interface.
905
+ - Edge singularity correction at PEC and lossy metal edges defaults to `True`.
906
+ - `angle_threshold` in `CornerFinderSpec` now defaults to `pi/4`.
907
+ - `WavePort` has been refactored to use `MicrowaveModeSpec`. The fields `voltage_integral`, and `current_integral` have been removed.
908
+ - Impedance specifications are now defined in `MicrowaveModeSpec.impedance_specs`. Please see our [migration guide](https://docs.flexcompute.com/projects/tidy3d/en/v2.10.0/api/microwave/microwave_migration.html) for details on updating your code.
909
+
910
+ ### Planned Deprecation
911
+ **Note: These changes only affect the microwave and smatrix plugins.**
912
+ - Renamed path integral classes for improved consistency. Please see our [migration guide](https://docs.flexcompute.com/projects/tidy3d/en/v2.10.0/api/microwave/microwave_migration.html) for details on updating your code. Old class naming is aliased to the new classes for 2.10.
913
+ - `VoltageIntegralAxisAligned` → `AxisAlignedVoltageIntegral`
914
+ - `CurrentIntegralAxisAligned` → `AxisAlignedCurrentIntegral`
915
+ - `CustomPathIntegral2D` → `Custom2DPathIntegral`
916
+ - `CustomVoltageIntegral2D` → `Custom2DVoltageIntegral`
917
+ - `CustomCurrentIntegral2D` → `Custom2DCurrentIntegral`
918
+ - Path integral and impedance calculator classes have been refactored and moved from the microwave plugin into Tidy3D components. They are now publicly exported via the top-level package `__init__.py`.
919
+
920
+ ## [2.9.3]
921
+
922
+ ### Added
923
+
924
+ ### Changed
925
+
926
+ ### Fixed
927
+ - Fixed `pyproject.toml` and `tidy3d.__version__` mismatch.
928
+
929
+ ## [2.9.2]
930
+
931
+ ### Added
932
+
933
+ ### Changed
934
+ - Improved Nexus platform configuration support and instantiation. Includes improvements to use the new `tidy3d configure ... --nexus-url <url>` CLI functionality.
935
+
936
+ ### Fixed
937
+
938
+ ## [2.9.1] - 2025-08-13
939
+
940
+ ### Changed
941
+ - Validate mode solver object for large number of grid points on the modal plane.
942
+
943
+ ### Fixed
944
+ - Fixed missing amplitude factor and handling of negative normal direction case when making adjoint sources from `DiffractionMonitor`.
945
+ - Improved the robustness of batch jobs. The batch state, including all `task_ids`, is now saved to `batch.hdf5` immediately after upload. This fixes an issue where an interrupted batch (e.g., due to a kernel crash or network loss) would be unrecoverable.
946
+ - Fixed warning for running symmetric adjoint simulations by port to not trigger when there is a single port.
947
+ - Bug in `CoaxialLumpedPort` where source injection is off when the `normal_axis` is not `z`.
948
+ - Validation of `freqs` in the `ComponentModeler` and `TerminalComponentModeler`.
949
+ - Calculation of voltage and current in the `WavePort`, when one type of path integral is supplied and the transmission line mode is lossy.
950
+ - Polygon vertices cleanup in `ClipOperation.intersections_plane`.
951
+ - Removed sources from `sim_inf_structure` simulation object in `postprocess_adj` to avoid source and background medium validation errors.
952
+ - Revert overly restrictive validation of `freqs` in the `ComponentModeler` and `TerminalComponentModeler`.
953
+ - Fixed `ElectromagneticFieldData.to_zbf()` to support single frequency monitors and apply the correct flattening order.
954
+
955
+ ## [2.9.0] - 2025-08-04
956
+
957
+ ### Added
958
+ - Fields `convex_resolution`, `concave_resolution`, and `mixed_resolution` in `CornerFinderSpec` can be used to take into account the dimensions of autodetected convex, concave, or mixed geometric features when `dl_min` is automatically inferred during automatic grid generation.
959
+ - `LayerRefinementSpec` now supports automatic thin gap meshing through fields `gap_meshing_iters` and `dl_min_from_gap_width`.
960
+ - Added `eps_lim` keyword argument to `Simulation.plot_eps()` for manual control over the permittivity color limits.
961
+ - Added `thickness` parameter to `LossyMetalMedium` for computing surface impedance of a thin conductor.
962
+ - `priority` field in `Structure` and `MeshOverrideStructure` for setting the behavior in structure overlapping region. When its value is `None`, the priority is automatically determined based on the material property and simulation's `structure_priority_mode`.
963
+ - Automatically apply `matplotlib` styles when importing `tidy3d` which can be reverted via the `td.restore_matplotlib_rcparams()` function.
964
+ - Added `TriangleMesh.from_height_expression` class method to create a mesh from an analytical height function defined on a 2D grid and `TriangleMesh.from_height_grid` class method to create a mesh from height values sampled on a 2D grid.
965
+ - Added heat sources with custom spatial dependence. It is now possible to add a `SpatialDataArray` as the `rate` in a `HeatSource`.
966
+ - Added Transient Heat simulations. It is now possible to run transient Heat simulations. This can be done by specifying `analysis_spec` of `HeatChargeSimulation` object as `UnsteadyHeatAnalysis`.
967
+ - A `num_grid_cells` field to `WavePort`, which ensures that there are 5 grid cells across the port. Grid refinement can be disabled by passing `None` to `num_grid_cells`.
968
+ - Implemented `FreqRange` utility class for frequency/wavelength handling with constructor methods `from_freq_interval()`, `from_wavelength()`, and `from_wvl_interval()`.
969
+ - Add support for `np.unwrap` in `tidy3d.plugins.autograd`.
970
+ - Add Nunley variant to germanium material library based on Nunley et al. 2016 data.
971
+ - Add `PointDipole.sources_from_angles()` that constructs a list of `PointDipole` objects needed to emulate a dipole oriented at a user-provided set of polar and azimuthal angles.
972
+ - Added `priority` parameter to `web.run()` and related functions to allow vGPU users to set task priority (1-10) in the queue.
973
+ - `EMEFieldMonitor` now supports `interval_space`.
974
+ - `Simulation.precision` option allows to select `"double"` precision for very high-accuracy results. Note that this is very rarely needed, and doubles the simulation computational weight and correspondingly FlexCredit cost.
975
+ - Added material type `PMCMedium` for perfect magnetic conductor.
976
+ - `ModeSimulation.plot()` method that plots the mode simulation plane by default, or the containing FDTD simulation if any of ``x``, ``y``, or ``z`` is passed.
977
+ - Enable singularity correction at PEC and lossy metal edges.
978
+ - New `VolumeMesher` simulation type and associated `VolumeMeshMonitor` and `VolumeMesherData`, which can be used to run the unstructured meshing for a `HeatChargeSimulation` separately before running the solver.
979
+ - The current validator for Conduction simulations has been modified so that it checks that in a Conduction simulation there is at least one structure defined with `ChargeConductorMedium` in the `charge` field of a `MultiPhysicsMedium`. This is necessary to ensure simulations are properly set up in the back-end since it relies on the `conductivity` field of `ChargeConductorMedium` and not that of `Medium`.
980
+ - Access field decay values in `SimulationData` via `sim_data.field_decay` as `TimeDataArray`.
981
+
982
+ ### Changed
983
+ - Relaxed bounds checking of path integrals during `WavePort` validation.
984
+ - Internal adjoint helper methods are now prefixed with an underscore to separate them from the public API.
985
+ - Drop the dependency on `gdspy`, which has been unmaintained for over two years. Interfaces previously relying on `gdspy` now use its maintained successor, `gdstk`, with equivalent functionality.
986
+ - Small (around 1e-4) numerical precision improvements in EME solver.
987
+ - Adjoint source frequency width is adjusted to decay sufficiently before zero frequency when possible to improve accuracy of simulation normalization when using custom current sources.
988
+ - Change `VisualizationSpec` validator for checking validity of user specified colors to only issue a warning if matplotlib is not installed instead of an error.
989
+ - Improved performance of `tidy3d.web.delete_old()` for large folders.
990
+ - `tidy3d.plugins.autograd.interpolate_spline()` and `tidy3d.plugins.autograd.add_at()` can now be called with keyword arguments during tracing.
991
+ - Zero-size dimensions automatically receive periodic boundary conditions instead of raising an error.
992
+ - Set `ModeSpec` precision to `double` by default for more accurate mode solver results. Does not apply to `EMEModeSpec`, where the `auto` precision is still default for speed and cost.
993
+ - Switched to an analytical gradient calculation for spatially-varying pole-residue models (`CustomPoleResidue`).
994
+ - Significantly improved performance of the `tidy3d.plugins.autograd.grey_dilation` morphological operation and its gradient calculation. The new implementation is orders of magnitude faster, especially for large arrays and kernel sizes.
995
+ - Warnings are now generated (instead of errors) when instantiating `PML`, `StablePML`,
996
+ or `Absorber` classes (or when invoking `pml()`, `stable_pml()`, or `absorber()` functions)
997
+ with fewer layers than recommended.
998
+ - Warnings and error messages originating from `Structure`, `Source`, or `Monitor` classes now refer to problematic objects by their user-supplied `name` attribute, alongside their index.
999
+ - File downloads are atomic. Interruptions or failures during download will no longer result in incomplete files.
1000
+ - Warnings are now generated (instead of errors) when instantiating `PML`, `StablePML`, or `Absorber` classes (or when invoking `pml()`, `stable_pml()`, or `absorber()` functions) with fewer layers than recommended.
1001
+ - `Simulation.subsection` can no longer take `symmetry` as an argument - the symmetry is always taken from the original simulation.
1002
+ - If a mode simulation is crossing a symmetry plane of the larger simulation domain, but the mode plane is not symmetric, a warning is issued that it will be expanded symmetrically. Previously this warning only happened during the solver run.
1003
+ - Enhanced `PolySlab` and `Cylinder` gradient computation via adaptive field sampling along geometry boundaries instead of fixed-grid center sampling.
1004
+ - Shape derivatives have been sped up significantly, especially for simulations containing many structures in a `GeometryGroup`.
1005
+ - By default, batch downloads will skip files that already exist locally. To force re-downloading and replace existing files, pass the `replace_existing=True` argument to `Batch.load()`, `Batch.download()`, or `BatchData.load()`.
1006
+ - The `BatchData.load_sim_data()` function now overwrites any previously downloaded simulation files (instead of skipping them).
1007
+ - Tighter `TOL_EIGS` used for mode solver, since `scipy` sometimes failed to find modes.
1008
+
1009
+ ### Fixed
1010
+
1011
+ - Fixed bug in broadband adjoint source creation when forward simulation had a pulse amplitude greater than 1 or a nonzero pulse phase.
1012
+ - Fixed shaping of `CustomMedium` gradients when permittivity data includes a frequency dimension with multiple entries.
1013
+ - Bug in contains check for `LumpedElement`, which should allow the case of a `LumpedElement` touching the simulation boundaries.
1014
+ - Bug when generating a grid with snapping points near the simulation boundaries.
1015
+ - Fixed field colocation in `EMEModeSolverMonitor`.
1016
+ - Internal interpolation errors with some versions of `xarray` and `numpy`.
1017
+ - If `ModeSpec.angle_rotation=True` for a mode object, validate that the structure rotation can be successfully done. Also, error if the medium cannot be rotated (e.g. anisotropic or custom medium), which would previously have just produced wrong results.
1018
+ - Characteristic impedance calculations in the `ImpedanceCalculator` using definitions that rely on flux, which were giving incorrect results for lossy transmission lines.
1019
+ - Validation for `CustomGridBoundaries`, which was previously allowing unsorted arrays and arrays with less than two entries.
1020
+ - `DiffractionMonitor` results to apply finite grid field corrections for higher precision when comparing e.g. to `FluxMonitor` computations of total power.
1021
+ - Bug when validating the grid resolution near `CoaxialLumpedPort`.
1022
+ - Arrow lengths are now scaled consistently in the X and Y directions, and their lengths no longer exceed the height of the plot window.
1023
+ - Plots of objects defined by shape intersection logic will no longer display thin line artifacts.
1024
+ - Fixed incorrect gradient computation in PyTorch plugin (`to_torch`) for functions returning multi-element arrays.
1025
+ - `MonitorData.get_amplitude()` no longers multiplies by a factor of `1j` and now directly returns the complex value of the data.
1026
+ - `EMESimulationData.port_modes_tuple` is now symmetry-expanded.
1027
+ - Fixed `Medium2D` validation error message when invalid data is passed to `ss`.
1028
+ - The phase of the amplitudes of a `DiffractionMonitor` was correctly centered such that the origin is at the monitor center.
1029
+ - Giving opposite boundaries different names no longer causes a symmetry validator failure.
1030
+ - Fixed issue with parameters in `InverseDesignResult` sometimes being outside of the valid parameter range.
1031
+ - Fixed performance regression for multi-frequency adjoint calculations.
1032
+ - Disallow `EMEFieldMonitor` in EME simulations with `EMELengthSweep`.
1033
+ - Fixed bug in adjoint postprocessing frequency batching that was causing gradients to be zero or incorrect. The error was surfacing when selecting a subset of the monitor frequencies in the objective function.
1034
+
1035
+ ## [2.8.5] - 2025-07-07
1036
+
1037
+ ### Fixed
1038
+ - Bug in `PlaneWave` defined with a negative `angle_theta` which would lead to wrong injection.
1039
+ - `GaussianBeam` and `AstigmaticGaussianBeam` default `num_freqs` reset to 1 (it was set to 3 in v2.8.0) and a warning is issued for a broadband, angled beam for which `num_freqs` may not be sufficiently large.
1040
+ - Set the maximum `num_freqs` to 20 for all broadband sources (we have been warning about the introduction of this hard limit for a while).
1041
+ - Solver error for EME simulations with bends, introduced when support for 2D EME simulations was added.
1042
+ - Fixed handling of symmetry when creating adjoint field sources and added warning when broken up adjoint simulations do not have the same symmetry as the forward simulation.
1043
+
1044
+ ## [2.8.4] - 2025-05-15
1045
+
1046
+ ### Added
1047
+ - The method `Geometry.reflected` can be used to create a reflected copy of any geometry off a plane. As for other transformations, for efficiency, `reflected` `PolySlab` directly returns an updated `PolySlab` object rather than a `Transformed` object, except when the normal of the plane of reflection has a non-zero component along the slab axis, in which case `Transformed` is still returned.
1048
+ - Validation check for unit error in grid spacing.
1049
+ - Validation that when symmetry is imposed along a given axis, the boundary conditions on each side of the axis are identical.
1050
+
1051
+ ### Changed
1052
+ - Supplying autograd-traced values to geometric fields (`center`, `size`) of simulations, monitors, and sources now logs a warning and falls back to the static value instead of erroring.
1053
+ - Attempting to differentiate server-side field projections now raises a clear error instead of silently failing.
1054
+ - Improved error message and handling when attempting to load a non-existent task ID.
1055
+ - `ClipOperation` now fails validation if traced fields are detected.
1056
+ - Warn if more than 20 frequencies are used in EME, as this may lead to slower or more expensive simulations.
1057
+ - EME now supports 2D simulations.
1058
+ - 'EMESimulation' now supports 'PermittivityMonitor'.
1059
+
1060
+ ### Fixed
1061
+ - Fixed issue with `CustomMedium` gradients where other frequencies would wrongly contribute to the gradient.
1062
+ - Fixed bug when computing `PolySlab` bounds in plotting functions.
1063
+
1064
+ ## [2.8.3] - 2025-04-24
1065
+
1066
+ ### Added
1067
+ - Ability to select payment option when submitting jobs from the Python client.
1068
+ - Periodic repetition of EME subgrids via `num_reps` or `EMEPeriodicitySweep`.
1069
+ - Methods `EMEExplicitGrid.from_structures` and `EMECompositeGrid.from_structure_groups` to place EME cell boundaries at structure bounds.
1070
+ - 'ModeSimulation' now supports 'PermittivityMonitor'.
1071
+ - Classmethod `from_frequency_range` in `GaussianPulse` for generating a pulse whose amplitude in the frequency_range [fmin, fmax] is maximized, which is particularly useful for running broadband simulations.
1072
+ - Differentiable function `td.plugins.autograd.interpolate_spline` for 1D linear, quadratic, and cubic spline interpolation, supporting differentiation with respect to the interpolated values (`y_points`) and optional endpoint derivative constraints.
1073
+ - `SteadyEnergyBandMonitor` in the Charge solver.
1074
+ - Pretty printing enabled with `rich.print` for the material library, materials, and their variants. In notebooks, this can be accessed using `rich.print` or `display`, or by evaluating the material library, a material, or a variant in a cell.
1075
+ - `FieldData` and `ModeData` support exporting E fields to a Zemax Beam File (ZBF) with `.to_zbf()` (warning: experimental feature).
1076
+ - `FieldDataset` supports reading E fields from a Zemax Beam File (ZBF) with `.from_zbf()` (warning: experimental feature).
1077
+ - Unstructured grid now supports 2D/3D box-shaped refinement regions and 1D refinement lines of arbitrary direction.
1078
+
1079
+ ### Changed
1080
+ - Performance enhancement for adjoint gradient calculations by optimizing field interpolation.
1081
+ - Auto grid in EME simulations with multiple `freqs` provided uses the largest instead of raising an error.
1082
+ - Increased maximum number of frequencies in an EME simulation from 20 to 500
1083
+ - Named mediums now display by name for brevity; materials/variants print concise summaries including references.
1084
+
1085
+ ### Fixed
1086
+ - Fixed `reverse` property of `td.Scene.plot_structures_property()` to also reverse the colorbar.
1087
+ - Fixed bug in surface gradient computation where fields, instead of gradients, were being summed in frequency.
1088
+
1089
+ ## [2.8.2] - 2025-04-09
1090
+
1091
+ ### Added
1092
+ - `fill` and `fill_structures` argument in `td.Simulation.plot_structures()` and `td.Simulation.plot()` respectively to disable fill and plot outlines of structures only.
1093
+ - New subpixel averaging option `ContourPathAveraging` applied to dielectric material boundaries.
1094
+ - A property `interior_angle` in `PolySlab` that stores angles formed inside polygon by two adjacent edges.
1095
+ - `eps_component` argument in `td.Simulation.plot_eps()` to optionally select a specific permittivity component to plot (eg. `"xx"`).
1096
+ - Monitor `AuxFieldTimeMonitor` for aux fields like the free carrier density in `TwoPhotonAbsorption`.
1097
+ - Broadband handling (`num_freqs` argument) to the TFSF source.
1098
+ - Ability to define a `WavePort` using only a voltage or current path integral, with the missing quantity inferred via power conservation.
1099
+
1100
+ ### Fixed
1101
+ - Compatibility with `xarray>=2025.03`.
1102
+ - Inaccurate gradient when auto-grabbing permittivities for structures using `td.PolySlab` when using dispersive material models.
1103
+ - Fixed scaling for adjoint sources when differentiating with respect to `FieldData` to account for the mesh size of the monitor and thus the created source. This aligns adjoint gradient magnitudes with numerical finite difference gradients for field data.
1104
+ - Warn when mode solver pml covers a significant portion of the mode plane.
1105
+ - TFSF server errors related to the auxiliary plane wave source that would previously happen on the server are now caught upon simulation creation.
1106
+ - Opposite arrow curvature for mode sources and monitors with non-zero bendind radius when plotted in the figure's Y axis.
1107
+
1108
+ ### Changed
1109
+ - `num_freqs` in Gaussian beam type sources limited to 20, which should besufficient for all cases.
1110
+ - The `angle_phi` parameter of `ModeSpec` is only limited to multiples of `np.pi / 2` if `angle_rotation` is set to `True`, as other values would currently not work correctly.
1111
+ - The `ramp_up_iters` parameter of the `ChargeSolver` was changed back to 1 for efficiency. It can be increased in cases with e.g. high doping when convergence is more difficult.
1112
+
1113
+ ## [2.8.1] - 2025-03-20
1114
+
1115
+ ### Added
1116
+ - New `LobeMeasurer` tool in the `microwave` plugin that locates lobes in antenna patterns and calculates lobe measures like half-power beamwidth and sidelobe level.
1117
+ - Validation step that raises a `ValueError` when no frequency-domain monitors are present, preventing invalid adjoint runs.
1118
+ - Metal surface roughness models: modified Hammerstad, Huray Snowball, and Cannonball-Huray.
1119
+ - Support for Fermi-Dirac statistics in Charge solver. This option can be activated when defining the analysis type `IsothermalSteadyChargeDCAnalysis` with `fermi_dirac=True`. This option will provide more accurate results in simulations where very high doping may lead the pseudo-Fermi energy levels to approach either the conduction or the valence energy levels.
1120
+
1121
+ ### Changed
1122
+
1123
+ - Dependencies for the `design` plugin can now be installed via `pip install tidy3d[design]`.
1124
+
1125
+ ### Fixed
1126
+ - Bug in `LayerRefinementSpec` that refines grids outside the layer region when one in-plane dimension is of size infinity.
1127
+ - Querying tasks was sometimes erroring unexpectedly.
1128
+ - Fixed automatic creation of missing output directories.
1129
+ - Bug in handling of tuple-type gradients that could lead to empty tuples or failing gradient calculations when differentiating w.r.t. (for instance) `td.Box.center`.
1130
+ - Bug causing incorrect field projection results when multiple projection monitors with numerous sampling points were used.
1131
+ - Improved accuracy for normal E-field components in mode solver at microwave frequencies.
1132
+ - Deleting tasks using `web.delete(task_id)` would error when deleting tasks in the tidy3d root folder and others would not get completely removed in the Web GUI.
1133
+
1134
+ ## [2.8.0] - 2025-03-04
1135
+
1136
+ ### Added
1137
+
1138
+ - Autograd support for polyslab transformations.
1139
+ - Support for differentiation with respect to `ComplexPolySlab.vertices`.
1140
+ - Introduce RF material library. Users can now import `rf_material_library` from `tidy3d.plugins.microwave`.
1141
+ - Users can specify the background medium for a structure in automatic differentiation by supplying `Structure.background_permittivity`.
1142
+ - `DirectivityMonitor` to compute antenna directivity and associated `DirectivityData` data container.
1143
+ - Ability to directly create `DirectivityData` from an `xarrray.Dataset` containing electromagnetic fields, where the flux is calculated by integrating the fields over the surface of a sphere.
1144
+ - `DirectivityData` includes parameters of interest like radiation intensity and gain. In addition, antenna parameters can be decomposed into contributions from individual polarization components according to a specified polarization basis, either `linear` or `circular`. The linear polarization basis can be optionally rotated by `tilt_angle` from the theta-axis.
1145
+ - Added `plot_length_units` to `Simulation` and `Scene` to allow for specifying units, which improves axis labels and scaling when plotting.
1146
+ - Added the helper function `compute_power_delivered_by_port` to `TerminalComponentModeler` which computes power delivered to a microwave network from a port.
1147
+ - Added the account function `account` to check credit balance and daily free simulation balance.
1148
+ - Added `WavePort` to the `TerminalComponentModeler` which is the suggested port type for exciting transmission lines.
1149
+ - Added plotting functionality to voltage and current path integrals in the `microwave` plugin.
1150
+ - Added convenience functions `from_terminal_positions` and `from_circular_path` to simplify setup of `VoltageIntegralAxisAligned` and `CustomCurrentIntegral2D`, respectively.
1151
+ `ComponentModeler.batch_data` convenience property to access the `BatchData` corresponding to the component modeler run.
1152
+ - Added optimization methods to the Design plugin. The plugin has been expanded to include Bayesian optimization, genetic algorithms and particle swarm optimization. Explanations of these methods are available in new and updated notebooks.
1153
+ - Added new support functions for the Design plugin: automated batching of `Simulation` objects, and summary functions with `DesignSpace.estimate_cost` and `DesignSpace.summarize`.
1154
+ - Added validation and repair methods for `TriangleMesh` with inward-facing normals.
1155
+ - Added `from_admittance_coeffs` to `PoleResidue`, which allows for directly constructing a `PoleResidue` medium from an admittance function in the Laplace domain.
1156
+ - Added material type `LossyMetalMedium` that has high DC-conductivity. Its boundaries can be modeled by a surface impedance boundary condition (SIBC). This is treated as a subpixel method, which can be switched by setting `SubpixelSpec(lossy_metal=method)` where `method` can be `Staircasing()`, `VolumetricAveraging()`, or `SurfaceImpedance()`.
1157
+ - Added mode solver option `precision='auto'` to automatically select single or double precision for optimizing performance and accuracy.
1158
+ - Added `LinearLumpedElement` as a new supported `LumpedElement` type. This enhancement allows for the modeling of two-terminal passive networks, which can include any configuration of resistors, inductors, and capacitors, within the `Simulation`. Simple RLC networks are described using `RLCNetwork`, while more complex networks can be represented by their admittance transfer function through `AdmittanceNetwork`.
1159
+ - Option for the `ModeSolver` and `ModeSolverMonitor` to store only a subset of field components.
1160
+ - Added an option to simulate plane wave propagation at fixed angles by setting parameter `angular_spec=FixedAngleSpec()` when defining a `PlaneWave` source.
1161
+ - The universal `tidy3d.web` can now also be used to handle `ModeSolver` simulations.
1162
+ - Support for differentiation with respect to `PolySlab.slab_bounds`.
1163
+ - `VisualizationSpec` that allows `Medium` instances to specify color and transparency plotting attributes that override default ones.
1164
+ - `reduce_simulation` argument added to all web functions to allow automatically reducing structures only to the simulation domain, including truncating data in custom media, thus reducing the simulation upload size. Currently only implemented for mode solver simulation types.
1165
+ - Support for quasi-uniform grid specifications via `QuasiUniformGrid` that subclasses from `GridSpec1d`. The grids are almost uniform, but can adjust locally to the edge of structure bounding boxes, and snapping points.
1166
+ - New field `min_steps_per_sim_size` in `AutoGrid` that sets minimal number of grid steps per longest edge length of simulation domain.
1167
+ - New field `shadow` in `MeshOverrideStructure` that sets grid size in overlapping region according to structure list or minimal grid size.
1168
+ - New field `drop_outside_sim` in `MeshOverrideStructure` to specify whether to drop an override structure if it is outside the simulation domain, but it overlaps with the simulation domain when projected to an axis.
1169
+ - Scientific notation for frequency range warnings.
1170
+ - `MultiphysicsMedium` allows for the modularization definition of physical properties. So in addition to the usual optical properties, one can now add heat properties or electric properties.
1171
+ - Added :zap: Charge Solver API. It is now possible to solve the Drift-Diffusion (DD) equations for semiconductors. These simulations can be set up with the new class `HeatChargeSimulation` (which supersedes `HeatSimulation`) in a way similar to that of Heat simulations. The solver has currently limited capabilities (which will be expanded in future releases): steady only, isothermal, Boltzmann statistics (non-degenerate semiconductors only).
1172
+ - `SemiconductorMedium` has been added. This is used in combination with `MultiPhysicsMedium` to define the mediums used in the Charge solver. It allows to specify mobility, bandgap narrowing, and generation/recombination models as well as doping. Doping can be defined as constant or through "doping boxes" or, more generally, via `SpatialDataArray` objects for full flexibility.
1173
+ - Mobility models for `SemiconductorMedium`: `ConstantMobilityModel`, `CaugheyThomasMobility`
1174
+ - Bandgap narrowing models for `SemiconductorMedium`: `SlotboomBandGapNarrowing`
1175
+ - Generation-recombination models for `SemiconductorMedium`: `ShockleyReedHallRecombination`, `RadiativeRecombination`, `AugerRecombination`
1176
+ - Accessors and length functions implemented for `Result` class in design plugin.
1177
+ - New interface for mode solver simulations via `ModeSimulation` class.
1178
+ - Advanced option `dist_type` that allows `LinearLumpedElement` to be distributed across grid cells in different ways. For example, restricting the network portion to a single cell and using PEC wires to connect to the desired location of the terminals.
1179
+ - New `layer_refinement_specs` field in `GridSpec` that takes a list of `LayerRefinementSpec` for automatic mesh refinement and snapping in layered structures. Structure corners on the cross section perpendicular to layer thickness direction can be automatically identified. Mesh is automatically snapped and refined around those corners.
1180
+ - Function `translated_copy` in `ElectromagneticFieldData` to facilitate computing overlaps between field data at different locations.
1181
+ - `PlaneWaveBeamProfile`, `GaussianBeamProfile` and `AstigmaticGaussianBeamProfile` components to compute field data associated to such beams based on their corresponding analytical expressions, and compute field overlaps with other data.
1182
+ - `num_freqs` argument to the `PlaneWave` source.
1183
+ - Support for running multiple adjoint simulations from a single forward simulation in adjoint pipeline depending on monitor configuration.
1184
+ - Ability to the `TerminalComponentModeler` that enables the computation of antenna parameters and figures of merit, such as gain, radiation efficiency, and reflection efficiency. When there are multiple ports in the `TerminalComponentModeler`, these antenna parameters may be calculated with user-specified port excitation magnitudes and phases.
1185
+ - `RectangularAntennaArrayCalculator` class to compute the array factor and far-field radiation patterns for rectangular phased antenna arrays.
1186
+ - Added validation for the monitors frequency range to be consistent with the frequency range defined for the sources.
1187
+ - `Simulation.grid_info` property to collect various properties of the grids in the simulation.
1188
+ - `angle_rotation` in `ModeSpec` to improve accuracy in some cases when `angle_theta` is defined. This option is disabled by default but it can be tried when very high accuracy is required in `ModeSource` and `ModeMonitor` objects that are placed in slanted waveguides.
1189
+
1190
+ ### Changed
1191
+
1192
+ - Priority is given to `snapping_points` in `GridSpec` when close to structure boundaries, which reduces the chance of them being skipped.
1193
+ - Gradients for autograd are computed server-side by default. They can be computed locally (requiring more data download) by passing `local_gradient=True` to the `web.run()` and related functions.
1194
+ - Passing `path_dir` to `ComponentModeler` methods is deprecated in favor of setting `ComponentModeler.path_dir` and will result in an error if the two don't match.
1195
+ - `BatchData` is now a mapping and can be accessed and iterated over like a Python dictionary (`.keys()`, `.values()`, `.items()`).
1196
+ - `MethodRandom` and `MethodRandomCustom` have been removed from the Design plugin, and `DesignSpace.run_batch` has been superseded by `.run`.
1197
+ - Design plugin has been significantly reworked to improve ease of use and allow for new optimization methods.
1198
+ - Behavior of `FieldProjector` now matches the server-side computation, which does not truncate the integration surface when it extends into PML regions.
1199
+ - Enabled the user to set the `ModeMonitor.colocate` field and changed to `True` by default (fields were actually already returned colocated even though this field was `False` previously).
1200
+ - More robust mode solver at radio frequencies.
1201
+ - Disallow very small polygons when subdividing 2D structures.
1202
+ - For efficiency, `translated`, `scaled`, and `rotated` `PolySlab`-s now return updated `PolySlab` objects rather than a `Transformed` object, except when the rotation axis is not the same as the slab axis, in which case `Transformed` is still returned.
1203
+ - Default choice of frequency in `Simulation.plot_eps` and `Simulation.plot_structures_eps` is now the central frequency of all sources in the simulation. If the central frequencies differ, the permittivity is evaluated at infinite frequency, and a warning is emitted.
1204
+ - Mode solver fields are more consistently normalized with respect to grid-dependent sign inversions in high order modes.
1205
+ - `MeshOverrideStructure` accepts `Box` as geometry. Other geometry types will raise a warning and convert to bounding box.
1206
+ - Double precision mode solver is now supported in EME.
1207
+ - `estimate_cost` is now called at the end of every `web.upload` call.
1208
+ - Internal refactor of adjoint shape gradients using `GradientSurfaceMesh`.
1209
+ - Enhanced progress bar display in batch operations with better formatting, colors, and status tracking.
1210
+ - `ModeMonitor` and `ModeSolverMonitor` now use the default `td.ModeSpec()` with `num_modes=1` when `mode_spec` is not provided.
1211
+ - Update sidewall angle validator to clarify angle should be specified in radians.
1212
+ - Reduced the complex tolerance in the mode solver below which permittivity is considered lossless, in order to correctly compute very low-loss modes.
1213
+ -`HeatChargeSimulation` supersedes `HeatSimulation`. Though both of those can be used for Heat simulation interchangeably, the latter has been deprecated and will disappear in the future.
1214
+ - `FluidSpec` and `SolidSpec` are now deprecated in favor of `FluidMedium` and `SolidMedium`. Both can still be used interchangeably.
1215
+ - Exclude `FluxMonitor` frequencies from adjoint design region gradient monitors since we do not differentiate through `FluxData`
1216
+ - Check for empty source list in `wvl_mat_min` in `Simulation` and raise user friendly error if no sources exist in the simulation.
1217
+ - The coordinate of snapping points in `GridSpec` can take value `None`, so that mesh can be selectively snapped only along certain dimensions.
1218
+ - Grid snapping for `MeshOverrideStructure` with `shadow=False` is only on if the structure refines the mesh.
1219
+ - Renamed `SkinDepthFitterParam` --> `SurfaceImpedanceFitterParam` used in `LossyMetalMedium`. `plot` in `LossyMetalMedium` now plots complex-valued surface impedance.
1220
+ - Changed plot_3d iframe url to tidy3d production environment.
1221
+ - `num_freqs` is now set to 3 by default for the `PlaneWave`, `GaussianBeam`, and `AnalyticGaussianBeam` sources, which makes the injection more accurate in broadband cases.
1222
+ - Nonlinear models `KerrNonlinearity` and `TwoPhotonAbsorption` now default to using the physical real fields instead of complex fields.
1223
+ - Added warning when a lumped element is not completely within the simulation bounds, since now lumped elements will only have an effect on the `Simulation` when they are completely within the simulation bounds.
1224
+ - Allow `ModeData` to be passed to path integral computations in the `microwave` plugin.
1225
+ - Default number of grid cells refining lumped elements is changed to 1, and some of the generated `MeshOverrideStructure` are replaced by grid snapping points.
1226
+ - Simulation tasks now print a link to the task's folder.
1227
+
1228
+ ### Fixed
1229
+
1230
+ - Significant speedup for field projection computations.
1231
+ - Fix numerical precision issue in `FieldProjectionCartesianMonitor`.
1232
+ - Bug where lumped elements in the `Simulation` were being overwritten by the `TerminalComponentModeler`.
1233
+ - Bug in `Simulation.subsection` where lumped elements were not being correctly removed.
1234
+ - Bug when adding 2D structures to the `Simulation` that are composed of multiple overlapping polygons.
1235
+ - Fields stored in `ModeMonitor` objects were computed colocated to the grid boundaries, but the built-in `ModeMonitor.colocate=False` was resulting in wrong results in some cases, most notably if symmetries are also involved.
1236
+ - Small inaccuracy when applying a mode solver `bend_radius` when the simulation grid is not symmetric w.r.t. the mode plane center. Previously, the radius was defined w.r.t. the middle grid coordinate, while now it is correctly applied w.r.t. the plane center.
1237
+ - Silence warning in graphene from checking fit quality at large frequencies.
1238
+ - `CustomCurrentSource` now correctly validates its current dataset.
1239
+ - Better plotting of grids, respecting 2D and 1D simulation edge cases.
1240
+ - Bug when `td.inf` are in `attrs` and files saved and loaded to .json twice.
1241
+ - Cached property cleared in copying an object with `validate=False`.
1242
+ - Error when `JaxSimulation` passed to `ModeSolver.simulation`: now it will be converted to a regular `Simulation`, with a warning.
1243
+ - Thread-safe creation of `TIDY3D_DIR`.
1244
+ - NumPy 2.1 compatibility issue where `numpy.float64` values passed to xarray interpolation would raise TypeError.
1245
+ - Validation error in inverse design plugin when simulation has no sources by adding a source existence check before validating pixel size.
1246
+ - System-dependent floating-point precision issue in EMEGrid validation.
1247
+ - Fixed magnitude of gradient computation in `CustomMedium` by accounting properly for full volume element when permittivity data is defined over less dimensions than the medium.
1248
+ - Fixed key ordering in design plugin when returning `Result` from an optimization method run.
1249
+ - Bug in `Batch`, where duplicate folders might be created in the Web UI if the folder did not already exist.
1250
+ - Make gauge selection for non-converged modes more robust.
1251
+ - Fixed extremely long runtime generated by `RunTimeSpec` in the presence of `LossyMetalMedium`.
1252
+ - Fixed `ComponentModeler.to_file` when its batch is empty.
1253
+ - In web api, mode solver is patched with remote data so that certain methods like `plot_field` show remote data.
1254
+ - Fixed common cross-referencing typo in docstrings.
1255
+ - Added `viz_spec` property to `AbstractStructure` to fix error when plotting structures that have no `medium`.
1256
+ - Fixed invalid adjoint source creation by disallowing sources made from non-traced fields.
1257
+
1258
+ ## [2.7.9] - 2025-01-22
1259
+
1260
+ ### Fixed
1261
+ - Potential task name mismatches between forward and adjoint simulations in batch tasks.
1262
+ - Magnitude of gradient computation in `CustomMedium` by accounting properly for full volume element when permittivity data is defined over fewer dimensions than the medium.
1263
+
1264
+ ## [2.7.8] - 2024-11-27
1265
+
1266
+ ### Changed
1267
+ - `BatchData` is now a mapping and can be accessed and iterated over like a Python dictionary (`.keys()`, `.values()`, `.items()`).
1268
+
1269
+ ### Fixed
1270
+ - Gradient inaccuracy when a multi-frequency monitor is used but a single frequency is selected.
1271
+ - Revert single cell center approximation for custom medium gradient.
1272
+
1273
+ ## [2.7.7] - 2024-11-15
1274
+
1275
+ ### Added
1276
+ - Autograd support for local field projections using `FieldProjectionKSpaceMonitor`.
1277
+ - Function `components.geometry.utils.flatten_groups` now also flattens transformed groups when requested.
1278
+ - Differentiable `smooth_min`, `smooth_max`, and `least_squares` functions in `tidy3d.plugins.autograd`.
1279
+ - Differential operators `grad` and `value_and_grad` in `tidy3d.plugins.autograd` that behave similarly to the autograd operators but support auxiliary data via `aux_data=True` as well as differentiation w.r.t. `DataArray`.
1280
+ - `@scalar_objective` decorator in `tidy3d.plugins.autograd` that wraps objective functions to ensure they return a scalar value and performs additional checks to ensure compatibility of objective functions with autograd. Used by default in `tidy3d.plugins.autograd.value_and_grad` as well as `tidy3d.plugins.autograd.grad`.
1281
+ - Autograd support for simulations without adjoint sources in `run` as well as `run_async`, which will not attempt to run the simulation but instead return zero gradients. This can sometimes occur if the objective function gradient does not depend on some simulations, for example when using `min` or `max` in the objective.
1282
+
1283
+ ### Changed
1284
+ - `CustomMedium` design regions require far less data when performing inverse design by reducing adjoint field monitor size for dims with one pixel.
1285
+ - Calling `.values` on `DataArray` no longer raises a `DeprecationWarning` during automatic differentiation.
1286
+ - Minimum number of PML layers set to 6.
1287
+ - `Structure.background_permittivity : float` for specifying background medium for shape differentiation deprecated in favor of `Structure.background_medium : Medium` for more generality.
1288
+ - Validate mode objects so that if a bend radius is defined, it is not smaller than half the size of the modal plane along the radial direction (i.e. the bend center is not inside the mode plane).
1289
+
1290
+ ### Fixed
1291
+ - Regression in local field projection leading to incorrect projection results.
1292
+ - Bug when differentiating with respect to `Cylinder.center`.
1293
+ - `xarray` 2024.10.0 compatibility for autograd.
1294
+ - Some failing examples in the expressions plugin documentation.
1295
+ - Inaccuracy in transforming gradients from edge to `PolySlab.vertices`.
1296
+ - Bug in `run_async` where an adjoint simulation would sometimes be assigned to the wrong forward simulation.
1297
+ - Validate against nonlinearity or modulation in `FullyAnisotropicMedium.from_diagonal`.
1298
+ - Add warning to complex-field nonlinearities, which may require more careful physical interpretation.
1299
+
1300
+ ## [2.7.6] - 2024-10-30
1301
+
1302
+ ### Added
1303
+ - Users can pass the `shading` argument in the `SimulationData.plot_field` to `Xarray.plot` method. When `shading='gouraud'`, the image is interpolated, producing a smoother visualization.
1304
+ - Users can manually specify the background medium for a structure to be used for geometry gradient calculations by supplying `Structure.background_permittivity`. This is useful when there are overlapping structures or structures embedded in other mediums.
1305
+ - Autograd functions can now be called directly on `DataArray` (e.g., `np.sum(data_array)`) in objective functions.
1306
+ - Automatic differentiation support for local field projections with `FieldProjectionAngleMonitor` and `FieldProjectionCartesianMonitor` using `FieldProjector.project_fields(far_field_monitor)`.
1307
+
1308
+ ### Changed
1309
+ - Improved autograd tracer handling in `DataArray`, resulting in significant speedups for differentiation involving large monitors.
1310
+ - Triangulation of `PolySlab` polygons now supports polygons with collinear vertices.
1311
+ - Frequency and wavelength utilities under `tidy3d.frequencies` and `tidy3d.wavelengths`.
1312
+
1313
+ ### Fixed
1314
+ - Minor gradient direction and normalization fixes for polyslab, field monitors, and diffraction monitors in autograd.
1315
+ - Resolved an issue where temporary files for adjoint simulations were not being deleted properly.
1316
+ - Resolve several edge cases where autograd boxes were incorrectly converted to numpy arrays.
1317
+ - Resolve issue where scalar frequencies in metric definitions (`ModeAmp(f=freq)` instead of `ModeAmp(f=[freq])`) would erroneously fail validation.
1318
+
1319
+ ## [2.7.5] - 2024-10-16
1320
+
1321
+ ### Added
1322
+ - `TopologyDesignRegion` is now invariant in `z` by default and supports assigning dimensions along which a design should be uniform via `TopologyDesignRegion(uniform=(bool, bool, bool))`.
1323
+ - Support for arbitrary padding sizes for all padding modes in `tidy3d.plugins.autograd.functions.pad`.
1324
+ - `Expression.filter(target_type, target_field)` method for extracting object instances and fields from nested expressions.
1325
+ - Additional constraints and validation logic to ensure correct setup of optimization problems in `invdes` plugin.
1326
+ - `tidy3d.plugins.pytorch` to wrap autograd functions for interoperability with PyTorch via the `to_torch` wrapper.
1327
+
1328
+ ### Changed
1329
+ - Renamed `Metric.freqs` --> `Metric.f` and made frequency argument optional, in which case all frequencies from the relevant monitor will be extracted. Metrics can still be initialized with both `f` or `freqs`.
1330
+
1331
+ ### Fixed
1332
+ - Some validation fixes for design region.
1333
+ - Bug in adjoint source creation that included empty sources for extraneous `FieldMonitor` objects, triggering unnecessary errors.
1334
+ - Correct sign in objective function history depending on `Optimizer.maximize`.
1335
+ - Fix to batch mode solver run that could create multiple copies of the same folder.
1336
+ - Fixed ``ModeSolver.plot`` method when the simulation is not at the origin.
1337
+ - Gradient calculation is orders of magnitude faster for large datasets and many structures by applying more efficient handling of field interpolation and passing to structures.
1338
+ - Bug with infinite coordinates in `ClipOperation` not working with shapely.
1339
+
1340
+ ## [2.7.4] - 2024-09-25
1341
+
1342
+ ### Added
1343
+ - New `tidy3d.plugins.expressions` module for constructing and serializing mathematical expressions and simulation metrics like `ModeAmp` and `ModePower`.
1344
+ - Support for serializable expressions in the `invdes` plugin (`InverseDesign(metric=ModePower(...))`).
1345
+ - Added `InitializationSpec` as the default way to initialize design region parameters in the `invdes` plugin (`DesignRegion(initialization_spec=RandomInitializationSpec(...))`).
1346
+ - Callback support in `invdes.Optimizer` and support for running the optimizer for a fixed number of steps via the `num_steps` argument in `Optimizer.continue_run()`.
1347
+ - Convenience method `Structure.from_permittivity_array(geometry, eps_data)`, which creates structure containing `CustomMedium` with `eps_data` array sampled within `geometry.bounds`.
1348
+
1349
+ ### Changed
1350
+ - All filter functions in `plugins/autograd` now accept either an absolute size in pixels or a `radius` and `dl` argument.
1351
+ - Reverted fix for TFSF close to simulation boundaries that was introduced in 2.7.3 as it could cause different results in some cases with nonuniform mesh along the propagation direction.
1352
+
1353
+ ### Fixed
1354
+ - Ensure `path` argument in `run()` function is respected when running under autograd or the adjoint plugin.
1355
+ - Bug in `Simulation.subsection` (used in the mode solver) when nonlinear materials rely on information about sources outside of the region.
1356
+
1357
+ ## [2.7.3] - 2024-09-12
1358
+
1359
+ ### Added
1360
+ - Added value_and_grad function to the autograd plugin, importable via `from tidy3d.plugins.autograd import value_and_grad`. Supports differentiating functions with auxiliary data (`value_and_grad(f, has_aux=True)`).
1361
+ - `Simulation.num_computational_grid_points` property to examine the number of grid cells that compose the computational domain corresponding to the simulation. This can differ from `Simulation.num_cells` based on boundary conditions and symmetries.
1362
+ - Support for `dilation` argument in `JaxPolySlab`.
1363
+ - Support for autograd differentiation with respect to `Cylinder.radius` and `Cylinder.center` (for elements not along axis dimension).
1364
+ - `Cylinder.to_polyslab(num_pts_circumference, **kwargs)` to convert a cylinder into a discretized version represented by a `PolySlab`.
1365
+ - `tidy3d.plugins.invdes.Optimizer` now accepts an optional optimization direction via the `maximize` argument (defaults to `maximize=True`).
1366
+
1367
+ ### Changed
1368
+ - `PolySlab` now raises error when differentiating and dilation causes damage to the polygon.
1369
+ - Validator `boundaries_for_zero_dims` to raise error when Bloch boundaries are used along 0-sized dims.
1370
+ - `FieldProjectionKSpaceMonitor` support for 2D simulations with `far_field_approx = True`.
1371
+
1372
+ ### Fixed
1373
+ - `DataArray` interpolation failure due to incorrect ordering of coordinates when interpolating with autograd tracers.
1374
+ - Error in `CustomSourceTime` when evaluating at a list of times entirely outside of the range of the envelope definition times.
1375
+ - Improved passivity enforcement near high-Q poles in `FastDispersionFitter`. Failed passivity enforcement could lead to simulation divergences.
1376
+ - More helpful error and suggestion if users try to differentiate w.r.t. unsupported `FluxMonitor` output.
1377
+ - Removed positive warnings in Simulation validators for Bloch boundary conditions.
1378
+ - Improve accuracy in `Box` shifting boundary gradients.
1379
+ - Improve accuracy in `FieldData` operations involving H fields (like `.flux`).
1380
+ - Better error and warning handling in autograd pipeline.
1381
+ - Added the option to specify the `num_freqs` argument and `kwargs` to the `.to_source` method for both `ModeSolver` and `ComponentModeler`.
1382
+ - Fixes to TFSF source in some 2D simulations, and in some cases when the injection plane is close to the simulation domain boundaries.
1383
+
1384
+ ## [2.7.2] - 2024-08-07
1385
+
1386
+ ### Added
1387
+ - Mode solver plugin now supports 'EMESimulation'.
1388
+ - `TriangleMesh` class: automatic removal of zero-area faces, and functions `fill_holes` and `fix_winding` to attempt mesh repair.
1389
+ - Added progress bar for EME simulations.
1390
+ - Support for grid specifications from grid cell boundary coordinates via `CustomGridBoundaries` that subclasses from `GridSpec1d`.
1391
+ - More convenient mesh importing from another simulation through `grid_spec = GridSpec.from_grid(sim.grid)`.
1392
+ - `autograd` gradient calculations can be performed on the server by passing `local_gradient = False` into `web.run()` or `web.run_async()`.
1393
+ - Automatic differentiation with `autograd` supports multiple frequencies through single, broadband adjoint simulation when the objective function can be formulated as depending on a single dataset in the output `SimulationData` with frequency dependence only.
1394
+ - Convenience method `EMESimulation.subsection` to create a new EME simulation based on a subregion of an existing one.
1395
+ - Added `flux` and `poynting` properties to `FieldProjectionCartesianData`.
1396
+
1397
+ ### Changed
1398
+ - Mode solver now always operates on a reduced simulation copy.
1399
+ - Moved `EMESimulation` size limit validators to preupload.
1400
+ - Error if field projection monitors found in 2D simulations, except `FieldProjectionAngleMonitor` or `FieldProjectionCartesianMonitor` with `far_field_approx = True`. Support for other monitors and for exact field projection will be coming in a subsequent Tidy3D version.
1401
+
1402
+ ### Fixed
1403
+ - Error when loading a previously run `Batch` or `ComponentModeler` containing custom data.
1404
+ - Error when plotting mode plane PML and the simulation has symmetry.
1405
+ - Validators using `TriangleMesh.intersections_plane` will fall back on bounding box in case the method fails for a non-watertight mesh.
1406
+ - Bug when running the same `ModeSolver` first locally then remotely, or vice versa, in which case the cached data from the first run is always returned.
1407
+ - Gradient monitors for `PolySlab` only store fields at the center location along axis, reducing data usage.
1408
+ - Validate the forward simulation on the client side even when using `local_gradient=False` for server-side gradient processing.
1409
+ - Gradient inaccuracies in `PolySlab.vertices`, `Medium.conductivity`, and `DiffractionData` s-polarization.
1410
+ - Adjoint field monitors no longer store H fields, which aren't needed for gradient calculation.
1411
+ - `MeshOverrideStructures` in a `Simulation.GridSpec` are properly handled to remove any derivative tracers.
1412
+
1413
+ ## [2.7.1] - 2024-07-10
1414
+
1415
+ ### Added
1416
+ - Support for differentiation with respect to `GeometryGroup.geometries` elements.
1417
+ - Users can now export `SimulationData` to MATLAB `.mat` files with the `to_mat_file` method.
1418
+ - `ModeSolver` methods to plot the mode plane simulation components, including `.plot()`, `.plot_eps()`, `.plot_structures_eps()`, `.plot_grid()`, and `.plot_pml()`.
1419
+ - Support for differentiation with respect to monitor attributes that require interpolation, such as flux and intensity.
1420
+ - Support for automatic differentiation with respect to `.eps_inf` and `.poles` contained in dispersive mediums `td.PoleResidue` and `td.CustomPoleResidue`.
1421
+ - Support for `FieldProjectionAngleMonitor` for 2D simulations with `far_field_approx = True`.
1422
+
1423
+ ### Fixed
1424
+ - Bug where boundary layers would be plotted too small in 2D simulations.
1425
+ - Bug when plotting transformed geometries.
1426
+ - Bug when snapping `CoaxialLumpedPort` to grid cell boundaries.
1427
+ - Errors in `PolySlab` when using autograd differentiation with non-zero `sidewall_angle` and `dilation`.
1428
+ - Error in `EMESimulationData.smatrix_in_basis` when using older versions of xarray.
1429
+ - Gradients for `Box` objects when simulation size is < 3D.
1430
+
1431
+ ## [2.7.0] - 2024-06-17
1432
+
1433
+ ### Added
1434
+ - `HeatSimulation` is now under the more generic class `HeatChargeSimulation`. This new class sallows for imulations of both HEAT and electric CONDUCTION types. One-way coupling between these is possible in which the CONDUCTION simulation is used to compute Joule heating which is subsequently used as a source in the HEAT simulation.
1435
+ - EME solver through `EMESimulation` class.
1436
+ - 2D heat simulations are now fully supported.
1437
+ - `tidy3d.plugins.adjoint.web.run_local` used in place of `run` will skip validators that restrict the size or number of `input_structures`.
1438
+ - Introduces the `microwave` plugin which includes `ImpedanceCalculator` for computing the characteristic impedance of transmission lines.
1439
+ - `Simulation` now accepts `LumpedElementType`, which currently only supports the `LumpedResistor` type. `LumpedPort` together with `LumpedResistor` make up the new `TerminalComponentModeler` in the `smatrix` plugin.
1440
+ - Uniaxial medium Lithium Niobate to material library.
1441
+ - Properties `num_time_steps_adjoint` and `tmesh_adjoint` to `JaxSimulation` to estimate adjoint run time.
1442
+ - Ability to add `path` to `updated_copy()` method to recursively update sub-components of a tidy3d model. For example `sim2 = sim.updated_copy(size=new_size, path="structures/0/geometry")` creates a recursively updated copy of `sim` where `sim.structures[0].geometry` is updated with `size=new_size`.
1443
+ - Python 3.12 support. Python 3.8 deprecation. Updated dependencies.
1444
+ - Tidy3D objects may store arbitrary metadata in an `.attrs` dictionary.
1445
+ - `JaxSimulation` now supports the following GDS export methods: `to_gds()`, `to_gds_file()`, `to_gdspy()`, and `to_gdstk()`.
1446
+ - `RunTimeSpec` accepted by `Simulation.run_time` to adaptively set the run time based on Q-factor, propagation length, and other factors.
1447
+ - `JaxDataArray` now supports selection by nearest value via `JaxDataArray.sel(..., method="nearest")`.
1448
+ - Convenience method `constant_loss_tangent_model` in `FastDispersionFitter` to fit constant loss tangent material model.
1449
+ - Classmethods in `DispersionFitter` to load complex-valued permittivity or loss tangent data.
1450
+ - Pre-upload validator to check that mode sources overlap with more than 2 grid cells.
1451
+ - Support `2DMedium` for `Transformed`/`GeometryGroup`/`ClipOperation` geometries.
1452
+ - `num_proc` argument to `tidy3d.plugins.adjoint.web.run_local` to control the number of processes used on the local machine for gradient processing.
1453
+ - Support for complex and self-intersecting polyslabs in adjoint module via `JaxComplexPolySlab`.
1454
+ - Support for `.gz` files in `Simulation` version updater.
1455
+ - Warning if a nonuniform custom medium is intersecting `PlaneWave`, `GaussianBeam`, `AstigmaticGaussianBeam`, `FieldProjectionCartesianMonitor`, `FieldProjectionAngleMonitor`, `FieldProjectionKSpaceMonitor`, and `DiffractionMonitor`.
1456
+ - Added a `CoaxialLumpedPort` and `CoaxialLumpedResistor` for coaxial type transmission lines and excitations.
1457
+ - Automatic differentiation supported natively in Tidy3D components, and through the `web.run()` and `web.run_async()` functions through `autograd`.
1458
+ - A batch of `ModeSolver` objects can be run concurrently using `tidy3d.plugins.mode.web.run_batch()`
1459
+ - `RectangularWaveguide.plot_field` optionally draws geometry edges over fields.
1460
+ - `RectangularWaveguide` supports layered cladding above and below core.
1461
+ - `SubpixelSpec` accepted by `Simulation.subpixel` to select subpixel averaging methods separately for dielectric, metal, and PEC materials. Specifically, added support for conformal mesh methods near PEC structures that can be specified through the field `pec` in the `SubpixelSpec` class. Note: previously, `subpixel=False` was implementing staircasing for every material except PEC. Now, `subpixel=False` implements direct staircasing for all materials. For PEC, the behavior of `subpixel=False` in Tidy3D < 2.7 is now achieved through `subpixel=SubpixelSpec(pec=HeuristicPECStaircasing())`, while `subpixel=True` in Tidy3D < 2.7 is now achieved through `subpixel=SubpixelSpec(pec=Staircasing())`. The default is `subpixel=SubpixelSpec(pec=PECConformal())` for more accurate PEC modelling.
1462
+ - Lossless `Green2008` variant for crystalline silicon added to material library.
1463
+ - `GridSpec` supports `snapping_points` that enforce grid boundaries to pass through them.
1464
+ - Support for unstructured datasets (`TriangularGridDataset` and `TetrahedralGridDataset`) in custom medium classes.
1465
+ - Support for `Transformed`/`GeometryGroup`/`ClipOperation` geometries in heat solver.
1466
+ - Parameter `relative_min_dl` in `UniformUnstructuredGrid` and `DistanceUnstructuredGrid` to control minimal mesh size.
1467
+ - Improved validation for `HeatSimulation`.
1468
+ - Functions to clean unstructured datasets from degenerate cells and unused points.
1469
+
1470
+ ### Changed
1471
+ - IMPORTANT NOTE: differentiable fields in the `adjoint` plugin (`JaxBox.size`, `JaxBox.center`, `JaxPolySlab.vertices`) no longer store the derivative information after the object is initialized. For example, if using JaxPolySlab.vertices directly in an objective function, the vertices will have no effect on the gradient. Instead, this information is now stored in a field of the same name with `_jax` suffix, eg. `JaxPolySlab.vertices_jax`. For some applications, such as evaluating penalty values, please change to `radius_penalty.evaluate(polyslab.vertices_jax)` or use the vertices as generated by your parameterization functions (`make_vertices(params)`).
1472
+ - `run_time` of the adjoint simulation is set more robustly based on the adjoint sources and the forward simulation `run_time` as `sim_fwd.run_time + c / fwdith_adj` where `c=10`.
1473
+ - `FieldTimeMonitor` restriction to record at a maximum of 5000 time steps if the monitor is not zero-dimensional, to avoid creating unnecessarily large amounts of data.
1474
+ - Bumped `trimesh` version to `>=4,<4.2`.
1475
+ - Make directories in path passed to `.to_gds_file()` methods, if they don't exist.
1476
+ - Changed sign of mode solver PML conductivity to match the `exp(-1j * omega * t)` convention used everywhere else. Previously, loss due to PML was coming out as negative `k_eff` of the mode, while now it comes out as positive `k_eff`, in line with material loss.
1477
+ - Augmented the PML mode solver profile to the form `s(x) = kappa(x) + 1j * sigma(x) / (omega * EPSILON_0)`. Previously, `kappa` was not used. The parameters are currently set to `kappa_min = 1`, `kappa_max = 3`, `sigma_max = 2`. These are not yet exposed to the user.
1478
+ - Also scaling `sigma_max` by the average relative impedance in the mode solver PML region.
1479
+ - `tidy3d convert` from `.lsf` files to tidy3d scripts has moved to another repository at `https://github.com/hirako22/Lumerical-to-Tidy3D-Converter`.
1480
+ - Relax validation of smallest triangle area in `TriangleMesh`.
1481
+ - Default variant for silicon dioxide in material library switched from `Horiba` to `Palik_Lossless`.
1482
+ - Sources and monitors which are exactly at the simulation domain boundaries will now error. They can still be placed very close to the boundaries, but need to be on the inside of the region.
1483
+ - Relaxed `dt` stability criterion for 1D and 2D simulations.
1484
+ - Switched order of angle and bend transformations in mode solver when both are present.
1485
+
1486
+ ### Fixed
1487
+ - Bug in PolySlab intersection if slab bounds are `inf` on one side.
1488
+ - Better error message when trying to transform a geometry with infinite bounds.
1489
+ - `JaxSimulation.epsilon` properly handles `input_structures`.
1490
+ - `FieldData.flux` in adjoint plugin properly returns `JaxDataArray` containing frequency coordinate `f` instead of summing over values.
1491
+ - Proper error message when trying to compute Poynting vector for adjoint field data.
1492
+ - Bug in plotting and computing tilted plane intersections of transformed 0 thickness geometries.
1493
+ - `Simulation.to_gdspy()` and `Simulation.to_gdstk()` now place polygons in GDS layer `(0, 0)` when no `gds_layer_dtype_map` is provided, instead of erroring.
1494
+ - `task_id` now properly stored in `JaxSimulationData`.
1495
+ - Bug in `FastDispersionFitter` when poles move close to input frequencies.
1496
+ - Bug in plotting polarization vector of angled sources.
1497
+ - Bug in `SpatialDataArray.reflect()` that was causing errors for older versions of `xarray`.
1498
+ - `ModeSolver.plot_field` correctly returning the plot axes.
1499
+ - Avoid error if non-positive refractive index used for integration resolution in adjoint.
1500
+ - Make `Batch.monitor` robust if the run status is not found.
1501
+ - Bugs in slicing unstructured datasets along edges.
1502
+ - Correct behavior of temperature monitors in the presence os symmetry.
1503
+
1504
+ ## [2.6.4] - 2024-04-23
1505
+
1506
+ ### Fixed
1507
+ - Set `importlib-metadata`, `boto3`, `requests`, and `click` version requirements to how they were in Tidy3D v2.5.
1508
+ - Bug in `td.FullyAnisotropicMedium` when added to `adjoint.JaxStructureStaticMedium`.
1509
+ - Bug when extra `**kwargs` passed to `Design.run_batch()`.
1510
+
1511
+ ## [2.6.3] - 2024-04-02
1512
+
1513
+ ### Added
1514
+ - Added new validators in `HeatSimulation`: no structures with dimensions of zero size, no all-Neumann boundary conditions, non-empty simulation domain.
1515
+ - `web.Batch` uses multi-threading for upload and download operations. The total time for many tasks is reduced by an order of magnitude.
1516
+
1517
+ ### Changed
1518
+ - Revert forbidden `"` in component names.
1519
+
1520
+ ## [2.6.2] - 2024-03-21
1521
+
1522
+ ### Changed
1523
+ - Characters `"` and `/` not allowed in component names.
1524
+ - Change error when `JaxPolySlab.sidewall_angle != 0.0` to a warning, enabling optimization with slanted sidewalls if a lower accuracy gradient is acceptable.
1525
+ - Simplified output and logging in `web.Batch` with `verbose=True`.
1526
+
1527
+ ### Fixed
1528
+ - Compute time stepping speed shown `tidy3d.log` using only the number of time steps that was run in the case of early shutoff. Previously, it was using the total number of time steps.
1529
+ - Bug in PolySlab intersection if slab bounds are `inf` on one side.
1530
+ - Divergence in the simultaneous presence of PML, absorber, and symmetry.
1531
+ - Fixed validator for `ModeSpec.bend_radius == 0`, which was not raising an error.
1532
+
1533
+ ## [2.6.1] - 2024-03-07
1534
+
1535
+ ### Added
1536
+ - `tidy3d.plugins.design.Results` store the `BatchData` for batch runs in the `.batch_data` field.
1537
+ - Prompting user to check solver log when loading solver data if warnings were found in the log, or if the simulation diverged or errored.
1538
+
1539
+ ### Changed
1540
+ - Slightly reorganized `web.run` logging when `verbose=True` to make it clearer.
1541
+
1542
+ ### Fixed
1543
+ - Fix to 3D surface integration monitors with some surfaces completely outside of the simulation domain which would sometimes still record fields.
1544
+ - Better error handling if remote `ModeSolver` creation gives response of `None`.
1545
+ - Validates that certain incompatible material types do not have intersecting bounds.
1546
+ - Fixed handling of the `frequency` argument in PEC medium.
1547
+ - Corrected plotting cmap if `val='re'` passed to `SimulationData.plot_field`.
1548
+ - Bug when converting point `FieldMonitor` data to scalar amplitude for adjoint source in later jax versions.
1549
+ - Handle special case when vertices overlap in `JaxPolySlab` to give 0 grad contribution from edge.
1550
+ - Corrected some mistakes in the estimation of the solver data size for each monitor type, which affects the restrictions on the maximum monitor size that can be submitted.
1551
+ - Bug in visualizing a slanted cylinder along certain axes in 2D.
1552
+ - Bug in `ModeSolver.reduced_simulation_copy` that was causing mode profiles to be all `NaN`.
1553
+ - Bug in `Simulation.subsection()` that was causing zero-size dimensions not to be preserved.
1554
+ - Bug in `CustomGrid` that was causing an error when using for zero-size dimensions.
1555
+ - When downloading gzip-ed solver data, automatically create the parent folder of the `to_file` path if it does not exist.
1556
+
1557
+ ## [2.6.0] - 2024-02-21
1558
+
1559
+ ### Added
1560
+ - Automatic subdivision of 2D materials with inhomogeneous substrate/superstrate.
1561
+ - Mode field profiles can be stored directly from a `ModeMonitor` by setting `store_fields_direction`.
1562
+ - Users can toggle https ssl version through `from tidy3d.web.core.environment import Env` and `Env.set_ssl_version(ssl_version: ssl.TLSVersion)`
1563
+ - Free-carrier absorption (FCA) and free-carrier plasma dispersion (FCPD) nonlinearities inside `TwoPhotonAbsorption` class.
1564
+ - `log_path` argument in `set_logging_file`, set to `False` by default.
1565
+ - `ErosionDilationPenalty` to `tidy3d.plugins.adjoint.utils.penalty` to penalize parameter arrays that change under erosion and dilation. This is a simple and effective way to penalize features that violate minimum feature size or radius of curvature fabrication constraints in topology optimization.
1566
+ - `tidy3d.plugins.design` tool to explore user-defined design spaces.
1567
+ - `ModeData.dispersion` and `ModeSolverData.dispersion` are calculated together with the group index.
1568
+ - A utility function `td.medium_from_nk()` that automatically constructs a non-dispersive medium when permittivity>=1, and a single-pole Lorentz medium when permittivity<1.
1569
+ - Integration of the `documentation` alongside the main codebase repository.
1570
+ - Integration of the `tidy3d-notebooks` repository.
1571
+ - `tidy3d develop` CLI and development guide on the main documentation.
1572
+ - Added a convenience method `Simulation.subsection()` to a create a new simulation based on a subregion of another one.
1573
+ - Users can toggle task caching through `from tidy3d.web.core.environment import Env` and `Env.enable_caching(True)` to enable, `Env.enable_caching(False)` to disable, or `Env.enable_caching(None)` to use global setting from web client account page.
1574
+
1575
+ ### Changed
1576
+ - `DataArray.to_hdf5()` accepts both file handles and file paths.
1577
+ - `ModeSolverMonitor` is deprecated. Mode field profiles can be retrieved directly from `ModeMonitor` with `store_fields_direction` set.
1578
+ - The log file for a simulation run has been modified to include more information including warnings collected during execution.
1579
+ - `poetry` based installation. Removal of `setup.py` and `requirements.txt`.
1580
+ - Upgrade to sphinx 6 for the documentation build, and change of theme.
1581
+ - Remote mode solver web api automatically reduces the associated `Simulation` object to the mode solver plane before uploading it to server.
1582
+ - All solver output is now compressed. However, it is automatically unpacked to the same `simulation_data.hdf5` by default when loading simulation data from the server.
1583
+ - Internal refactor of `adjoint` plugin to separate `jax`-traced fields from regular `tidy3d` fields.
1584
+ - Added an optional argument `field` in class method `.from_vtu()` of `TriangularGridDataset` and `TetrahedralGridDataset` for specifying the name of data field to load.
1585
+
1586
+ ### Fixed
1587
+ - Add dispersion information to dataframe output when available from mode solver under the column "dispersion (ps/(nm km))".
1588
+ - Skip adjoint source for diffraction amplitudes of NaN.
1589
+ - Helpful error message if `val` supplied to `SimulationData.plot_field` not supported.
1590
+ - Fixed validator that warns if angled plane wave does not match simulation boundaries, which was not warning for periodic boundaries.
1591
+ - Validates that no nans are present in `DataArray` values in custom components.
1592
+ - Removed nans from Cartesian temperature monitors in thermal simulations by using nearest neighbor interpolation for values outside of heat simulation domain.
1593
+ - Removed spurious warnings realted to reloading simulation containing `PerturbationMedium` with `CustomChargePerturbation`/`CustomHeatPerturbation`.
1594
+
1595
+ ## [2.5.2] - 2024-01-11
1596
+
1597
+ ### Fixed
1598
+ - Internal storage estimation for 3D surface integration monitors now correctly includes only fields on the surfaces, and not the whole volume.
1599
+
1600
+ ## [2.5.1] - 2024-01-08
1601
+
1602
+ ### Added
1603
+ - `ModeData.dispersion` and `ModeSolverData.dispersion` are calculated together with the group index.
1604
+ - String matching feature `contains_str` to `assert_log_level` testing utility.
1605
+ - Warning in automatic grid generation if a structure has a non-zero size along a given direction that is too small compared to a single mesh step.
1606
+ - `assert_log_level` adds string matching with `contains_str` and ensures no higher log level recorded than expected.
1607
+ - `AssertLogLevel` context manager for testing log level and automatically clearing capture.
1608
+ - More robust validation for boundary conditions and symmetry in 1D and 2D simulations.
1609
+
1610
+ ### Changed
1611
+ - `jax` and `jaxlib` versions bumped to `0.4.*`.
1612
+ - Improved and unified warning message for validation failure of dependency fields in validators.
1613
+
1614
+ ### Fixed
1615
+ - Error in automatic grid generation in specific cases with multiple thin structures.
1616
+
1617
+ ## [2.5.0] - 2023-12-13
1618
+
1619
+ ### Added
1620
+ - Ability to mix regular mediums and geometries with differentiable analogues in `JaxStructure`. Enables support for shape optimization with dispersive mediums. New classes `JaxStructureStaticGeometry` and `JaxStructureStaticMedium` accept regular `Tidy3D` geometry and medium classes, respectively.
1621
+ - Warning if nonlinear mediums are used in an `adjoint` simulation. In this case, the gradients will not be accurate, but may be approximately correct if the nonlinearity is weak.
1622
+ - Validator for surface field projection monitors that warns if projecting backwards relative to the monitor's normal direction.
1623
+ - Validator for field projection monitors when far field approximation is enabled but the projection distance is small relative to the near field domain.
1624
+ - Ability to manually specify a medium through which to project fields, when using field projection monitors.
1625
+ - Added support for two-photon absorption via `TwoPhotonAbsorption` class. Added `KerrNonlinearity` that implements Kerr effect without third-harmonic generation.
1626
+ - Can create `PoleResidue` from LO-TO form via `PoleResidue.from_lo_to`.
1627
+ - Added `TriangularGridDataset` and `TehrahedralGridDataset` for storing and manipulating unstructured data.
1628
+ - Support for an anisotropic medium containing PEC components.
1629
+ - `SimulationData.mnt_data_from_file()` method to load only a single monitor data object from a simulation data `.hdf5` file.
1630
+ - `_hash_self` to base model, uses `hashlib` to hash a Tidy3D component the same way every session.
1631
+ - `ComponentModeler.plot_sim_eps()` method to plot the simulation permittivity and ports.
1632
+ - Support for 2D PEC materials.
1633
+ - Ability to downsample recorded near fields to speed up server-side far field projections.
1634
+ - `FieldData.apply_phase(phase)` to multiply field data by a phase.
1635
+ - Optional `phase` argument to `SimulationData.plot_field` that applies a phase to complex-valued fields.
1636
+ - Ability to window near fields for spatial filtering of far fields for both client- and server-side field projections.
1637
+ - Support for multiple frequencies in `output_monitors` in `adjoint` plugin.
1638
+ - GDSII export functions `to_gds_file`, `to_gds`, `to_gdspy`, and `to_gdstk` to `Simulation`, `Structure`, and `Geometry`.
1639
+ - `verbose` argument to `estimate_cost` and `real_cost` functions such that the cost is logged if `verbose==True` (default). Additional helpful messages may also be logged.
1640
+ - Support for space-time modulation of permittivity and electric conductivity via `ModulationSpec` class. The modulation function must be separable in space and time. Modulations with user-supplied distributions in space and harmonic modulation in time are supported.
1641
+ - `Geometry.intersections_tilted_plane` calculates intersections with any plane, not only axis-aligned ones.
1642
+ - `Transformed` class to support geometry transformations.
1643
+ - Methods `Geometry.translated`, `Geometry.scaled`, and `Geometry.rotated` can be used to create transformed copies of any geometry.
1644
+ - Time zone in webAPI logging output.
1645
+ - Class `Scene` consisting of a background medium and structures for easier drafting and visualization of simulation setups as well as transferring such information between different simulations.
1646
+ - Solver for thermal simulation (see `HeatSimulation` and related classes).
1647
+ - Specification of material thermal properties in medium classes through an optional field `.heat_spec`.
1648
+
1649
+ ### Changed
1650
+ - Credit cost for remote mode solver has been modified to be defined in advance based on the mode solver details. Previously, the cost was based on elapsed runtime. On average, there should be little difference in the cost.
1651
+ - Mode solves that are part of an FDTD simulation (i.e. for mode sources and monitors) are now charged at the same flex credit cost as a corresponding standalone mode solver call.
1652
+ - Any `FreqMonitor.freqs` or `Source.source_time.freq0` smaller than `1e5` now raise an error as this must be incorrect setup that is outside the Tidy3D intended range (note default frequency is `Hz`).
1653
+ - When using complex fields (e.g. with Bloch boundaries), FluxTimeMonitor and frequency-domain fields (including derived quantities like flux) now only use the real part of the time-domain electric field.
1654
+ - Indent for the json string of Tidy3D models has been changed to `None` when used internally; kept as `indent=4` for writing to `json` and `yaml` files.
1655
+ - API for specifying one or more nonlinear models via `NonlinearSpec.models`.
1656
+ - `freqs` and `direction` are optional in `ModeSolver` methods converting to monitor and source, respectively. If not supplied, uses the values from the `ModeSolver` instance calling the method.
1657
+ - Removed spurious ``-1`` factor in field amplitudes injected by field sources in some cases. The injected ``E``-field should now exactly match the analytic, mode, or custom fields that the source is expected to inject, both in the forward and in the backward direction.
1658
+ - Restriction on the maximum memory that a monitor would need internally during the solver run, even if the final monitor data is smaller.
1659
+ - Restriction on the maximum size of mode solver data produced by a `ModeSolver` server call.
1660
+ - Updated versions of `boto3`, `requests`, and `click`.
1661
+ - python 3.7 no longer tested nor supported.
1662
+ - Removed warning that monitors now have `colocate=True` by default.
1663
+ - If `PML` or any absorbing boundary condition is used along a direction where the `Simulation` size is zero, an error will be raised, rather than just a warning.
1664
+ - Remove warning that monitors now have `colocate=True` by default.
1665
+ - Internal refactor of Web API functionality.
1666
+ - `Geometry.from_gds` doesn't create unnecessary groups of single elements.
1667
+
1668
+ ### Fixed
1669
+ - Fixed energy leakage in TFSF when using complex fields.
1670
+ - Fixed the duplication of log messages in Jupyter when `set_logging_file` is used.
1671
+ - If input to circular filters in adjoint have size smaller than the diameter, instead of erroring, warn user and truncate the filter kernel accordingly.
1672
+ - When writing the json string of a model to an `hdf5` file, the string is split into chunks if it has more than a set (very large) number of characters. This fixes potential error if the string size is more than 4GB.
1673
+ - Proper equality checking between `Tidy3dBaseModel` instances, which takes `DataArray` values and coords into account and handles `np.ndarray` types.
1674
+ - Correctly set the contour length scale when exporting 2D (or 1D) structures with custom medium to GDSII.
1675
+ - Improved error handling if file can not be downloaded from server.
1676
+ - Fix for detection of file extensions for file names with dots.
1677
+ - Restrict to `matplotlib` >= 3.5, avoiding bug in plotting `CustomMedium`.
1678
+ - Fixes `ComponentModeler` batch file being different in different sessions by use of deterministic hash function for computing batch filename.
1679
+ - Can pass `kwargs` to `ComponentModeler.plot_sim()` to use in `Simulation.plot()`.
1680
+ - Ensure that mode solver fields are returned in single precision if `ModeSolver.ModeSpec.precision == "single"`.
1681
+ - If there are no adjoint sources for a simulation involved in an objective function, make a mock source with zero amplitude and warn user.
1682
+
1683
+ ## [2.4.3] - 2023-10-16
1684
+
1685
+ ### Added
1686
+ - `Geometry.zero_dims` method that uses `Geometry.bounds` and speeds up the validator for zero-sized geometries.
1687
+
1688
+ ### Changed
1689
+ - Limited number of distinct sources to 1000. In cases where a complicated spatial dependence of the source is desired, a ``CustomFieldSource`` or a ``CustomCurrentSource`` can be used instead of multiple distinct sources.
1690
+
1691
+ ### Fixed
1692
+ - Properly handle `.freqs` in `output_monitors` of adjoint plugin.
1693
+ - Simulation updater for `.hdf5` files with custom data.
1694
+ - Fix to solver geometry parsing in some edge cases of slanted polyslab and STL geometries that could lead to an error or divergence.
1695
+ - Fix to errors in some edge cases of a TFSF source setup.
1696
+
1697
+ ## [2.4.2] - 2023-9-28
1698
+
1699
+ ### Added
1700
+ - Warnings for too many frequencies in monitors; too many modes requested in a ``ModeSpec``; too many number of grid points in a mode monitor or mode source.
1701
+
1702
+ ### Changed
1703
+ - Time domain monitors warn about data usage if all defaults used in time sampler specs.
1704
+
1705
+ ### Fixed
1706
+ - Faster sorting of modes in `ModeSolverData.overlap_sort` by avoiding excessive data copying.
1707
+ - Ensure same `Grid` is generated in forward and adjoint simulations by setting `GridSpec.wavelength` manually in adjoint.
1708
+ - Properly handling of `JaxBox` derivatives both for multi-cell and single cell thickness.
1709
+ - Properly handle `JaxSimulation.monitors` with `.freqs` as `np.ndarray` in adjoint plugin.
1710
+ - Properly handle `JaxDataArray.sel()` with single coordinates and symmetry expansion.
1711
+ - Properly handle `JaxDataArray * xr.DataArray` broadcasting.
1712
+ - Stricter validation of `JaxDataArray` coordinates and values shape.
1713
+
1714
+ ## [2.4.1] - 2023-9-20
1715
+
1716
+ ### Added
1717
+ - `ModeSolverData.pol_fraction` and `ModeSolverData.pol_fraction_waveguide` properties to compute polarization fraction of modes using two different definitions.
1718
+ - `ModeSolverData.to_dataframe()` and `ModeSolverData.modes_info` for a convenient summary of various modal properties of the computed modes.
1719
+ - Loss upper bound estimation in `PoleResidue` material model.
1720
+ - Command line tool `tidy3d convert` for conversion from `.lsf` project files into equivalent python scripts implementing the project in Tidy3D. Usage: `tidy3d convert example.lsf tidy3d_script.py`.
1721
+
1722
+ ### Changed
1723
+ - Output task URL before and after simulation run and make URLs blue underline formatting.
1724
+ - Support to load and save compressed HDF5 files (`.hdf5.gz`) directly from `Tidy3dBaseModel`.
1725
+ - Line numbers no longer printed in webapi log output.
1726
+ - Empty list returned if the folder cannot be queried in `web.get_tasks()`.
1727
+
1728
+ ### Fixed
1729
+ - Filtering based on `ModeSpec.filter_pol` now uses the user-exposed `ModeSolverData.pol_fraction` property. This also fixes the previous internal handling which was not taking the nonuniform grid, as well as and the propagation axis direction for modes in angled waveguides. In practice, the results should be similar in most cases.
1730
+ - Bug with truly anisotropic `JaxCustomMedium` in adjoint plugin.
1731
+ - Bug in adjoint plugin when `JaxBox` is less than 1 grid cell thick.
1732
+ - Bug in `adjoint` plugin where `JaxSimulation.structures` did not accept structures containing `td.PolySlab`.
1733
+
1734
+ ## [2.4.0] - 2023-9-11
1735
+
1736
+ ### Added
1737
+ - Configuration option `config.log_suppression` can be used to control the suppression of log messages.
1738
+ - `web.abort()` and `Job.abort()` methods allowing user to abort running tasks without deleting them. If a task is aborted, it cannot be restarted later, a new one needs to be created and submitted.
1739
+ - `FastDispersionFitter` for fast fitting of material dispersion data.
1740
+ - `Simulation.monitors_data_size` property mapping monitor name to its data size in bytes.
1741
+ - Source with arbitrary user-specified time dependence through `CustomSourceTime`.
1742
+ - Interface for specifying material heat and charge perturbation models.
1743
+ Specifically, non-dispersive and dispersive mediums with heat and/or charge perturbation models can be defined through classes `PerturbationMedium` and `PerturbationPoleResidue`,
1744
+ where perturbations to each parameter is specified using class `ParameterPerturbation`.
1745
+ A convenience function `Simulation.perturbed_mediums_copy` is added to class `Simulation` which applies heat and/or charge fields to mediums containing perturbation models.
1746
+ - Added `hlim` and `vlim` kwargs to `Simulation.plot()` and `Simulation.plot_eps()` for setting horizontal and vertical plot limits.
1747
+ - Added support for chi3 nonlinearity via `NonlinearSusceptibility` class.
1748
+ - Spatial downsampling allowed in ``PermittivityMonitor`` through the ``interval_space`` argument.
1749
+ - `ClipOperation` geometry type allows the construction of complex geometries through boolean operations.
1750
+ - Operations on geometry (`+`, `|`, `*`, `&`, `-`, `^`) will create the appropriate `ClipOperation` or `GeometryGroup`.
1751
+ - `Geometry.from_shapely` to extrude shapely primitives into Tidy3D geometry.
1752
+ - `Geometry.from_gds` to extrude GDS cells into geometry groups with support for holes.
1753
+ - `components.geometry.utils.traverse_geometry` used internally to traverse geometry trees.
1754
+ - `components.geometry.utils.flatten_groups` used internally to validate large geometry trees.
1755
+
1756
+ ### Changed
1757
+ - Add `width` and `height` options to `Simulation.plot_3d()`.
1758
+ - `sim_with_source()`, `sim_with_monitor()`, and `sim_with_mode_solver_monitor()` methods allowing the `ModeSolver` to create a copy of its `Simulation` with an added `ModeSource`, `ModeMonitor`, or `ModeSolverMonitor`, respectively.
1759
+ - `nyquist_step` also taking the frequency range of frequency-domain monitors into account.
1760
+ - Added option to allow DC component in `GaussianPulse` spectrum, by setting `remove_dc_component=False` in `GaussianPulse`.
1761
+ - Jax installation from `pip install "tidy3d[jax]"` handled same way on windows as other OS if python >= 3.9.
1762
+ - `colocate` introduced as an argument to `ModeSolver` and a Field in `ModeSolverMonitor`, set to True by default.
1763
+ - `FieldTimeMonitor`-s and `FieldMonitor`-s that have `colocate=True` return fields colocated to the grid boundaries rather than centers. This matches better user expectations for example when the simulation has a symmetry (explicitly defined, or implicit) w.r.t. a given axis. When colocating to centers, fields would be `dl / 2` away from that symmetry plane, and components that are expected to go to zero do not (of course, they still do if interpolated to the symmetry plane). Another convenient use case is that it is easier to place a 2D monitor exactly on a grid boundary in the automatically generated grid, by simply passing an override structure with the monitor geometry.
1764
+ - In these monitors, `colocate` is now set to `True` by default. This is to avoid a lot of potential confusion coming from returning non-colocated fields by default, when colocated fields need to be used when computing quantities that depend on more than one field component, like flux or field intensity.
1765
+ - Field colocation for computations like flux, Poynting, and modal overlap also happen to cell boundaries rather than centers. The effect on final results
1766
+ should be close to imperceptible as verified by a large number of backend tests and our online examples. Any difference can be at most on the scale of
1767
+ the difference that can be observed when slightly modifying the grid resolution.
1768
+ - `GeometryGroup` accepts other `GeometryGroup` instances as group elements.
1769
+ - FDTD and mode solver tasks always upload `hdf5.gz` file instead of `hdf5` or `json`.
1770
+ - `web.download_json()` will download `simulation.hdf5.gz` and unzip it, then load the json from the hdf5 file.
1771
+ - `SimulationTask.get_simulation_hdf5()` will download simulation.hdf5.gz and unzip it to hdf5 file.
1772
+ - The width of Tidy3D logging output is changed to 80 characters.
1773
+ - Upgrades to `pydantic==2.*` with `pydantic.v1` imports.
1774
+ - Uses `ruff` for linting instead of `pylint`.
1775
+ - Added lower bound validator to `freqs` in mode solver.
1776
+ - Added lower bound validator to `group_index_step` in `ModeSpec`.
1777
+ - `ComponentModeler.freqs` now a `FreqArray`, so it can be initialized from numpy, list or tuple.
1778
+
1779
+ ### Fixed
1780
+ - Handles `TIDY3D_ENV` properly when set to `prod`.
1781
+ - Redundant phase compensation for shifted source in smatrix plugin.
1782
+ - Bug in angled mode solver with negative `angle_theta`.
1783
+ - Properly include `JaxSimulation.input_structures` in `JaxSimulationData.plot_field()`.
1784
+ - Numerically stable sigmoid function in radius of curvature constraint.
1785
+ - Spatial monitor downsampling when the monitor is crossing a symmetry plane or Bloch boundary conditions.
1786
+ - Cast `JaxDataArray.__abs__` output to `jnp.array`, reducing conversions needed in objective functions.
1787
+ - Correct color and zorder for line segments when plotting 2D geometries.
1788
+ - Bug in `Simulation.eps_bounds` that was always setting the lower bound to 1.
1789
+ - Extended lower limit of frequency range for `Graphene` to zero.
1790
+ - Improved warnings for `Medium2D`.
1791
+ - Improved mode solver handling of 1D problem to avoid singular matrix issue.
1792
+ - Set `colocate=False` automatically in output `FieldMonitor` objects in adjoint plugin, warning instead of erroring for backwards compatibility.
1793
+ - Validation for `ModeSpec.group_index_step` working incorrectly if the value was set to 1.
1794
+
1795
+ ## [2.3.3] - 2023-07-28
1796
+
1797
+ ### Added
1798
+
1799
+ ### Changed
1800
+
1801
+ ### Fixed
1802
+ - Adjoint plugin import failures after `jax.numpy.DeviceArray` -> `jax.Array` in jax 0.4.14.
1803
+ - Fixed definition of shapely box bounds in Geometry.intersections_2dbox()
1804
+
1805
+ ## [2.3.2] - 2023-7-21
1806
+
1807
+ ### Added
1808
+
1809
+ ### Changed
1810
+ - Surface integration monitor validator changed to error only if *all* integration surfaces are outside of the simulation domain.
1811
+ - Inverse design convenience utilities in `plugins.adjoint.utils` for image filtering (`ConicFilter`), projection (`BinaryProjector`), and radius of curvature penalization (`RadiusPenalty`).
1812
+
1813
+ ### Fixed
1814
+ - Properly handle sign flip in `ModeMonitor` outputs with `direction="-"` in adjoint plugin.
1815
+ - Bug in `CustomMedium.grids`, which was giving incorrect grid boundaries at edges.
1816
+ - Out of date endpoint in `migrate` option of webapi.
1817
+
1818
+ ## [2.3.1] - 2023-7-14
1819
+
1820
+ ### Added
1821
+ - Support for differentiating with respect to `JaxMedium.conductivity`.
1822
+ - Validating that every surface (unless excluded in ``exclude_surfaces``) of a 3D ``SurfaceIntegrationMonitor`` (flux monitor or field projection monitor) is not completely outside the simulation domain.
1823
+
1824
+ ### Changed
1825
+ - Source validation happens before simulation upload and raises an error if no source is present.
1826
+ - Warning instead of error if structure out of simulation bounds.
1827
+ - Internal refactor of `ComponentModeler` to simplify logic.
1828
+ - (Changed effective 2.3.0) Backward-direction mode amplitudes from `ModeMonitors` have a flipped sign compared to previous versions.
1829
+ Previously, the amplitudes were computed directly through the dot product ``amp = (mode, field)``, while, since 2.3.0, we use ``amp = (mode, field) / (mode, mode)`` instead.
1830
+ The modes are already normalized to unit directed flux, such that ``(mode, mode) = 1`` for forward modes, and ``(mode, mode) = -1`` for backward modes
1831
+ (the dot product of a mode with itself is equal to the flux through the mode plane). Therefore, the change in the ``amp`` formula is equivalent to a sign change for
1832
+ backward modes. This makes their interpretation more intuitive, since the amplitude is now ``1`` if the recorded field and a mode match exactly. A ``-1`` amplitude means
1833
+ that the fields match exactly except for a ``pi`` phase shift. This interpretation is also now independent of forward/backward direction.
1834
+
1835
+ ### Fixed
1836
+ - Point-like objects correctly appear as single points using `plt.scatter`.
1837
+ - Cleaner display of `ArrayLike` in docs.
1838
+ - `ArrayLike` validation properly fails with `None` or `nan` contents.
1839
+ - Apply finite grid correction to the fields when calculating the Poynting vector from 2D monitors.
1840
+ - `JaxCustomMedium` properly handles complex-valued permittivity.
1841
+
1842
+ ## [2.3.0] - 2023-6-30
1843
+
1844
+ ### Added
1845
+ - Specification of spatial permittivity distribution of dispersive material using user-supplied data through `CustomPoleResidue`, `CustomSellmeier`, `CustomLorentz`, `CustomDebye`, and `CustomDrude` components.
1846
+ - `CustomAnisotropicMedium` where each component can take user-supplied data to define spatial permittivity distribution of non-dispersive or dispersive material.
1847
+ - `Coords.spatial_interp` to interpolate spatial data avoiding pitfalls of `xarray.interp` in directions where there is a single data point.
1848
+ - All medium types accept `allow_gain` which is `False` by default, but allows the medium to be active if `True`.
1849
+ - Causality validation in `PoleResidue` model.
1850
+ - Group index calculation added to mode monitors and available through `ModeData.n_group`.
1851
+ - Support for `JaxGeometryGroup` in adjoint plugin.
1852
+ - Support for gradients w.r.t. `FieldMonitor` data from `output_monitors` in adjoint plugin.
1853
+ - `estimate_cost()` method for `Job` and `Batch`.
1854
+ - `s3utils.get_s3_sts_token` accepts extra query parameters.
1855
+ - `plugins.mode.web` to control the server-side mode solver.
1856
+ - Support for `JaxDataArray.interp`, allowing differentiable linear interpolation.
1857
+ - Support for `JaxSimulationData.get_intensity()`, allowing intensity distribution to be differentiated in `adjoint` plugin.
1858
+ - Support for `JaxFieldData.flux` to compute differentiable flux value from `FieldData`.
1859
+ - All custom medium types accept `subpixel` which is `False` by default, but applies subpixel averaging of the permittivity on the interfaces of the structure (including exterior boundary and intersection interfaces with other structures) if `True` and simulation's `subpixel` is also `True`.
1860
+
1861
+ ### Changed
1862
+ - Add `Medium2D` to full simulation in tests.
1863
+ - `DispersionFitter` and `StableDispersionFitter` unified in a single `DispersionFitter` interface.
1864
+ - `StableDispersionFitter` deprecated, with stable fitter now being run instead through `plugins.dispersion.web.run(DispersionFitter)`.
1865
+ - Removed validator from `CustomFieldSource` that ensured data spanned the source geometry. Now the current values are extrapolated outside of the supplied data ranges.
1866
+ - `CustomMedium` now take fields `permittivity` and `conductivity`. `eps_dataset` will be deprecated in v3.0.
1867
+ - Moved `CustomMedium._interp` to `Coords.spatial_interp` to be used by custom current sources.
1868
+ - Adjoint simulations no longer contain unused gradient permittivity monitors, reducing processing time.
1869
+ - `Batch` prints total estimated cost if `verbose=True`.
1870
+ - Unified config and authentication.
1871
+ - Remove restriction that `JaxCustomMedium` must not be a 3D pixelated array.
1872
+ - Limit total number of input structures in adjoint plugin for performance reasons.
1873
+ - `ModeSolver` and `ModeSolverMonitor` now contain `direction` field that explicitly specifies the mode propagation direction (default is "+").
1874
+ - Added an `interpolate` option to `CustomCurrentSource` and `UniformCurrentSource`, which uses linear interpolation to emulate exact placement of the source along directions where the source has zero size, rather than snapping to the nearest grid location, similar to the behavior for `PointDipole`. Default: `True`.
1875
+
1876
+ ### Fixed
1877
+ - Plotting 2D materials in `SimulationData.plot_field` and other circumstances.
1878
+ - More segments in plotting of large cylinder and sphere cross-sections.
1879
+ - Proper handling of nested list of custom data components in IO, needed for custom dispersive medium coefficients.
1880
+ - `ElectromagneticFieldData.outer_dot` now works correctly for `FieldData`, not only `ModeSolverData`.
1881
+ - Fix to the setting of the mode solver PML parameters that produces better results for modes which do not decay in the PML, and fewer spurious modes.
1882
+ - Fix to single-precision mode solver to do the type conversion on the final matrix only rather than at intermediate steps, which improves accuracy in some cases.
1883
+ - Improvements to graphene medium fit.
1884
+ - Schema titles in `ArrayLike` fields.
1885
+ - Fix `web.estimate_cost` error/time-out for large simulations, it should now always work but may take some time for complex cases.
1886
+ - A more accurate injection and decomposition of backward propagating waveguide modes in lossy and gyrotropic systems.
1887
+
1888
+ ## [2.2.3] - 2023-6-15
1889
+
1890
+ ### Added
1891
+
1892
+ ### Changed
1893
+
1894
+ ### Fixed
1895
+ - Callback URL: "call_back_url" replaced with proper "callbackUrl".
1896
+
1897
+ ## [2.2.2] - 2023-5-25
1898
+
1899
+ ### Added
1900
+
1901
+ ### Changed
1902
+ - Tidy3D component `.to_hdf5()` and `.from_hdf5()` now accept custom encoder and decoder functions for more flexible IO.
1903
+
1904
+ ### Fixed
1905
+ - `JaxDataArrays` are properly handled when reading and writing to file, dramatically reducing the VJP simulation download size in server-side adjoint.
1906
+ - A bug in a total-field scattered-field (TFSF) validator which was causing unnecessary errors when a TFSF surface intersected with 2D materials.
1907
+ - CI tests working with binary installation of gdstk instead of compiling from source.
1908
+
1909
+ ## [2.2.1] - 2023-5-23
1910
+
1911
+ ### Added
1912
+
1913
+ ### Changed
1914
+
1915
+ ### Fixed
1916
+ - Downgrade `typing_extensions` to `<=4.5.0` to avoid bug with pydantic for python <= 3.9.
1917
+ - Bug in `ModeSolver` which was causing a preconditioner to be applied even when it is not needed.
1918
+
1919
+ ## [2.2.0] - 2023-5-22
1920
+
1921
+ ### Added
1922
+ - Fully anisotropic medium class (`FullyAnisotropicMedium`) that allows to simulate materials with permittivity and conductivity tensors oriented arbitrary with respect to simulation grid.
1923
+ - Adjoint processing is done server side by default, to avoid unnecessary downloading of data.
1924
+ - `JaxPolySlab` in `adjoint` plugin, which can track derivatives through its `.vertices`.
1925
+ - `run_local` and `run_async_local` options in `tidy3d.plugins.adjoint.web` to provide way to run adjoint processing locally.
1926
+ - `web.test()` to simply test if the authentication is configured correctly and raise exception otherwise.
1927
+ - `SimulationTask.get_running_tasks()` to get a list of running tasks from the server.
1928
+ - Retry for set number of seconds in web functions if internet connection errors.
1929
+ - Argument `scale` to `ModeSolver.plot_field` to control plot scaling.
1930
+ - `Simulation.plot_3d()` method to make 3D rendering of simulation.
1931
+
1932
+ ### Changed
1933
+ - Perfect electric conductors (PECs) are now modeled as high-conductivity media in both the frontend and backend mode solvers, and their presence triggers the use of a preconditioner to improve numerical stability and robustness. Consequently, the mode solver provides more accurate eigenvectors and field distributions when PEC structures are present.
1934
+ - Include source amplitude in `amp_time`.
1935
+ - Increased the maximum allowed estimated simulation data storage to 50GB. Individual monitors with projected data larger than 10GB will trigger a warning.
1936
+ - `PolySlab.inside` now uses `matplotlib.path.contains_points` for better performance.
1937
+ - `JaxCustomMedium` accepts a maximum of 250,000 grid cells to avoid slow server-side processing.
1938
+ - `PolySlab.inside` now uses `matplotlib.path.contains_points`.
1939
+ - `JaxCustomMedium` accepts a maximum of 250,000 grid cells.
1940
+ - Logging messages are suppressed and summarized to avoid repetitions.
1941
+
1942
+ ### Fixed
1943
+ - Log messages provide the correct caller origin (file name and line number).
1944
+ - `Medium2D` is removed from the list of allowed options for `Simulation.medium` in the documentation.
1945
+ - Symmetry works properly in `adjoint` plugin.
1946
+
1947
+ ## [2.1.1] - 2023-4-25
1948
+
1949
+ ### Added
1950
+
1951
+ ### Changed
1952
+ - `adjoint` plugin now filters out adjoint sources that are below a threshold in amplitude relative to the maximum amplitude of the monitor data, reducing unnecessary processing by eliminating sources that won't contribute to the gradient.
1953
+ - `web.run_async` uses `Batch` under the hood instead of `asyncio`.
1954
+
1955
+ ### Fixed
1956
+ - More helpful error messages from HTTP responses.
1957
+ - Bug in `_validate_no_structures_pml`, which was using wrong pml thicknesses.
1958
+ - Broken `callback_url` in webapi.
1959
+
1960
+ ## [2.1.0] - 2023-4-18
1961
+
1962
+ ### Added
1963
+ - Group index calculation added to ModeSpec.
1964
+ - Waveguide plugin for quickly calculating modes in dielectric waveguides.
1965
+ - `ElectromagneticFieldData.dot_intep` to calculate mode overlap integrals between modes with different discretizations.
1966
+ - `ElectromagneticFieldData.mode_area` to calculate the effective mode area.
1967
+ - `ElectromagneticFieldData.intensity` returns the sum of the squared components of the electric field.
1968
+ - Group index calculation added to ModeSolver.
1969
+ - Web interface prints clickable link to task on Tidy3D web interface.
1970
+ - Allow configuration through API key in python via `tidy3d.web.configure(apikey: str)` function.
1971
+
1972
+ ### Changed
1973
+ - `adjoint` plugin now filters out adjoint sources that are below a threshold in amplitude relative to the maximum amplitude of the monitor data, reducing unnecessary processing by eliminating sources that won't contribute to the gradient.
1974
+ - `ArrayLike` fields use `np.ndarray` internally instead of `TidyNDArray` subclass. Tidy3D objects are no longer hashable, instead, hash the `obj.json()` string.
1975
+
1976
+ ### Fixed
1977
+ - `web.Batch` monitoring is more robust, will not raise exception if a job errors or diverges. In this case, the progressbar text will render in red.
1978
+ - More robust handling for 2D structure validator.
1979
+
1980
+ ## [2.0.3] - 2023-4-11
1981
+
1982
+ ### Added
1983
+
1984
+ ### Changed
1985
+ - Times logged in `tidy3d.log` during solver run now split into `Solver time` (time-stepping only), `Field projection time` (after the time stepping if any field projection monitors present) and `Data write time` (when the raw data is packaged to disk). Previously, `Solver time` used to include the `Field projection time` and not `Data write time`.
1986
+
1987
+ ### Fixed
1988
+ - Port name duplication in smatrix plugin for multimode ports.
1989
+ - Web functions create the leading directories for the supplied filename if they don't exist.
1990
+ - Some docstring examples that were giving warnings.
1991
+ - `web.monitor()` only prints message when condition met.
1992
+ - PML boxes have non-zero extent along any dimensions where the simulation has 0 size, to fix plotting issues for 2D simulations.
1993
+ - Improved PEC handling around curved interfaces and structure intersections. Old handling accessible with `subpixel=False` (previously, it was independent of the subpixel setting).
1994
+ - Fix to field projections sometimes containing `NaN` values.
1995
+
1996
+ ## [2.0.2] - 2023-4-3
1997
+
1998
+ ### Added
1999
+
2000
+ ### Changed
2001
+
2002
+ ### Fixed
2003
+ - Bug in web interface when `Simulation` upload was not putting quotes around `td.inf` values.
2004
+
2005
+ ## [2.0.1] - 2023-3-31
2006
+
2007
+ ### Added
2008
+
2009
+ ### Changed
2010
+ - Default Tidy3D logging level is now set to `'WARNING'`.
2011
+ - Tidy3D is no longer pip installable from `tidy3d-beta` on PyPI.
2012
+ - Plugins must be imported from their respective directories, eg. `from tidy3d.plugins.mode import ModeSolver`.
2013
+ - Removed `Geometry.intersections()`.
2014
+ - Log level only accepts upper case strings.
2015
+ - `PolySlab` `reference_plane` is `"middle"` by default.
2016
+ - Boundary conditions are now `PML()` by default.
2017
+ - `PointDipole` sources now have a continuous dependence on the source position, as opposed to snapping to Yee grid locations. Behavior is controlled by the `interpolate` argument, set to `True` by default.
2018
+ - `smatrix` plugin accepts list of frequencies and returns data as an `xarray.DataArray` instead of a nested `dict`.
2019
+ - `importlib-metadata` version set to `>= 6.0.0`.
2020
+
2021
+ ### Fixed
2022
+ - Helpful error message if user has insufficient credits.
2023
+
2024
+ ## [1.10.0] - 2023-3-28
2025
+
2026
+ ### Added
2027
+ - `TriangleMesh` class for modeling geometries specified by triangle surface meshes, with support for STL file import.
2028
+ - Total-field scattered-field (TFSF) source which allows angled plane waves to be injected into a finite region of space (the total-field region), such that only scattered fields exist outside this region (scattered-field region).
2029
+ - `Medium2D` class for surface conductivity model of a 2D material.
2030
+ - Entries in `material_library` for graphene and some common TMDs.
2031
+ - Ability to create a 2D representation of a thin 3D material.
2032
+ - `SimulationData.plot_field` accepts new field components and values, including the Poynting vector.
2033
+ - `SimulationData.get_poynting_vector` for calculating the 3D Poynting vector at the Yee cell centers.
2034
+ - Post-init validation of Tidy3D components.
2035
+ - Validate post-Simulation init to error if any structures have bounds that terminate inside of the PML.
2036
+ - Validate `slab_bounds` for `PolySlab`.
2037
+
2038
+ ### Changed
2039
+ - Tidy3D account authentication done solely through API key. Migration option offered for users with old username / password authentication.
2040
+ - `export_matlib_to_file` in `material_library` exports material's full name in addition to abbreviation.
2041
+ - Simpler progress bars for `run_async`.
2042
+ - Medium property `n_cfl` added to adjust time step size according to CFL condition.
2043
+ - In the mode solver plugin, regular methods in `solver.py` transformed into classmethods.
2044
+ - `ArrayLike` types are stored internally as `np.ndarray` and written to json as lists. `constrained_array()` provides way to validate `ArrayLike` values based on `ndim` and `dtype`.
2045
+ - Pip installing tidy3d automatically creates `~/.tidy3d` directory in home directory.
2046
+ - Percentage done and field decay determined through http request.
2047
+ - `SourceTime` plotting methods `.plot()` and `.plot_spectrum()` accept a `val` kwarg, which selects which part of the data (`'real'`, `'imag'`, or `'abs'`) to plot, rather than plotting all at once.
2048
+
2049
+ ### Fixed
2050
+ - Bug in remote file transfer when client environment has no correct certificate authority pem file install locally.
2051
+ - Tidy3D exceptions inherit from `ValueError` so they are handled properly by pydantic.
2052
+ - Two unstable materials in `material_library`: `Cu_JohnsonChristy1972` and `Ni_JohnsonChristy1972`. `TiOx_HoribStable` added for improved stability.
2053
+ - Bug in infinite long cylinder when the `reference_plane` is not at the bottom or the cylinder is slanted.
2054
+
2055
+ ## [1.9.3] - 2023-3-08
2056
+
2057
+ ### Fixed
2058
+ - Allow new `tidy3d.config.logging_level` to accept lower case for backwards compatibility.
2059
+
2060
+ ## [1.9.2] - 2023-3-08
2061
+
2062
+ ### Added
2063
+ - `set_logging_console` allows redirection of console messages to stderr.
2064
+
2065
+ ### Changed
2066
+ - Use custom logger to avoid changing global logging state when importing tidy3d.
2067
+ - Separate logging configuration from custom exception definitions.
2068
+
2069
+ ## [1.9.1] - 2023-3-06
2070
+
2071
+ ### Fixed
2072
+ - Avoiding shapely warning in some cases when checking intersection with an empty shape.
2073
+ - `Medium.eps_model` error when supplied a list of frequencies rather than a numpy array.
2074
+ - Set install requirement `rich<12.6.0` to fix double output in webapi functions.
2075
+
2076
+ ## [1.9.0] - 2023-3-01
2077
+
2078
+ ### Added
2079
+ - Specification of relative permittivity distribution using raw, user-supplied data through a `CustomMedium` component.
2080
+ - Automatic differentiation through `Tidy3D` simulations using `jax` through `tidy3d.plugins.adjoint`.
2081
+ - New Drude model variants for Gold and Silver in the `material_library`.
2082
+ - Plugin `ComplexPolySlab` for supporting complex polyslabs containing self-intersecting polygons during extrusion.
2083
+ - Asynchronous running of multiple simulations concurrently using `web.run_async`.
2084
+ - Jax-compatible `run_async` in the `adjoint` plugin for efficiently running multi-simulation objectives concurrently and differentiating result.
2085
+ - Warning in `Simulation.epsilon` if many grid cells and structures provided and slow run time expected as a result.
2086
+ - `verbose` option in `tidy3d.web` functions and containers. If `False`, there will be no non-essential output when running simulations over web api.
2087
+ - Warning if PML or absorbing boundaries are used along a simulation dimension with zero size.
2088
+
2089
+ ### Changed
2090
+ - Saving and loading of `.hdf5` files is made orders of magnitude faster due to an internal refactor.
2091
+ - `PolySlab.from_gds` supports `gds_cell` from both `gdspy` and `gdstk`, both packages are made optional requirements.
2092
+ - Adjoint plugin `JaxCustomMedium` is made faster and can handle several thousand pixels without significant overhead.
2093
+ - Jax is made an optional requirement. The adjoint plugin supports jax versions 0.3 and 0.4 for windows and non-windows users, respectively.
2094
+ - Issue a deprecation warning that `Geometry.intersections` will be renamed to `Geometry.intersections_plane` in 2.0.
2095
+ - Limit some warnings to only show for the first structure for which they are encountered.
2096
+ - Billed flex unit no longer shown at the end of `web.run` as it may take a few seconds until it is available. Instead, added a `web.real_cost(task_id)` function to get the cost after a task run.
2097
+ - Refactored `tidy3d.web` for more robustness and test coverage.
2098
+
2099
+ ### Fixed
2100
+ - Progressbars always set to 100% when webapi functions are finished.
2101
+ - Faster handling of `Geometry.intersects` and `Geometry.inside` by taking into account geometry bounds.
2102
+ - Numpy divide by zero warning in mode solver fixed by initializing jacobians as real instead of complex.
2103
+ - Bug in validators for 2D objects being in homogeneous media which were looking at the infinite plane in which the objects lie. This can also significantly speed up some validators in the case of many structures.
2104
+ - Sources and monitors with bend radii are displayed with curved arrows.
2105
+
2106
+ ## [1.8.4] - 2023-2-13
2107
+
2108
+ ### Fixed
2109
+ - Error importing `Axes` type with most recent `matplotlib` release (3.7).
2110
+
2111
+ ## [1.8.3] - 2023-1-26
2112
+
2113
+ ### Fixed
2114
+ - Bug in `Simulation.epsilon` with `coord_key="centers"` in which structures were not rendered.
2115
+ - Missing `@functools.wrap` in `ensure_freq_in_range` decorator from `medium.py` causing incorrect docstrings.
2116
+
2117
+ ## [1.8.2] - 2023-1-12
2118
+
2119
+ ### Added
2120
+ - Warning if users install via `tidy3d-beta` on pip, from now on, best to use `tidy3d` directly.
2121
+ - Support for dispersive media in `AnisotropicMedium`
2122
+
2123
+ ### Changed
2124
+ - Support shapely version >=2.0 for all python versions.
2125
+ - Internally refactor `Simulation.epsilon` and move `eps_diagonal` to `Structure` in preparation for future changes.
2126
+ - Readme displays updated instructions for installing tidy3d (remove beta version mention).
2127
+
2128
+ ### Fixed
2129
+ - Field decay warning in mode solver when symmetry present.
2130
+ - Formatting bug in Tidy3d custom exceptions.
2131
+
2132
+ ### Removed
2133
+
2134
+ ## [1.8.1] - 2022-12-30
2135
+
2136
+ ### Added
2137
+ - Environment variable `TIDY3D_SSL_VERIFY` to optionally disable SSL authentication (default is `True`).
2138
+ - Billed FlexUnit cost displayed at the end of `web.monitor`.
2139
+
2140
+ ### Fixed
2141
+ - Bug on Windows systems with submitting `CustomFieldSource` data to the server.
2142
+ - Fix to `FieldData.symmetry_expanded_copy` for monitors with `colocate=True`.
2143
+
2144
+ ### Changed
2145
+ - The `Simulation` version updater is called every time a `Simulation` object is loaded, not just `from_file`.
2146
+ - Boundary specifications that rely on the default `Periodic` boundary now print a deprecation warning, as the default boundaries will change to
2147
+ `PML` in Tidy3D 2.0.
2148
+
2149
+ ## [1.8.0] - 2022-12-14
2150
+
2151
+ ### Added
2152
+ - `CustomFieldSource` that can inject arbitrary source fields.
2153
+ - `ElectromagneticFieldData.flux` property for data corresponding to 2D monitors, and `ElectromagneticFieldData.dot`
2154
+ method for computing the overlap integral over two sets of frequency-domain field data.
2155
+ - Data corresponding to 2D `FieldMonitor` and `FieldTimeMonitor`, as well as to `ModeSolverMonitor`, now also stores `grid_correction` data
2156
+ related to the finite grid along the normal direction. This needs to be taken into account to avoid e.g. numerical oscillations of the flux
2157
+ with the exact position of the monitor that is due to the interpolation from the grid cell boundaries. These corrections are automatically
2158
+ applied when using the `flux` and `dot` methods.
2159
+ - Resonance finding plugin for estimating resonance frequency and Q-factor of multiple resonances from time-domain data.
2160
+ Accessed through `tidy3d.plugins.ResonanceFinder`.
2161
+ - New `.updated_copy(**kwargs)` method to all tidy3d objects to add a more convenient shortcut to copying an instance with updated fields,
2162
+ i.e. `med.copy(update=dict(permittivity=3.0))` becomes `med.updated_copy(permittivity=3.0)`.
2163
+ - Test support for python 3.11.
2164
+ - `sidewall_angle` option for `Cylinder` that allows a `Cylinder` to be tuned into a conical frustum or a cone.
2165
+ - `reference_plane` for `PolySlab` that provides options to define the vertices at the bottom, middle, or top of the `PolySlab`.
2166
+ - Automesh generation: `MeshOverrideStructure` that allows for a direct grid size specification in override structures,
2167
+ and `dl_min` that bounds the minimal grid size.
2168
+ - More material models to the material database such as gold from Olman2012.
2169
+ - In `AdvancedFitterParam` for `StableDispersionFitter`, `random_seed` option to set the random seed,
2170
+ and `bound_f_lower` to set the lower bound of pole frequency.
2171
+ - Introduced the option to project fields at near, intermediate, and far distances using an exact Green's function formalism which does not
2172
+ make far-field approximations. This can be enabled in any `AbstractFieldProjectionMonitor` by setting `far_field_approx=False`. A tutorial notebook
2173
+ as a comprehensive reference for field projections was added to the documentation.
2174
+ - Tracking of modes in `ModeSolverData` based on overlap values, controlled through `ModeSpec.track_freq`.
2175
+ - Native broadband support for `GassuainBeam` `AstigmaticGaussianBeam`, and `ModeSource` through the `num_freqs` argument.
2176
+ - Apodization option for frequency-domain monitors to ignore temporal data in the beginning and/or end of a simulation
2177
+
2178
+ ### Changed
2179
+ - Minimum flex unit charge reduced from `0.1` to `0.025`.
2180
+ - Default Courant factor was changed from `0.9` to `0.99`.
2181
+ - A point dipole source placed on a symmetry plane now always has twice the amplitude of the same source in a simulation without the
2182
+ symmetry plane, as expected by continuity with the case when the dipole is slightly off the symmetry plane, in which case
2183
+ there are effectively two dipoles, the original one and its mirror image. Previously, the amplitude was only doubled for dipoles polarized normal
2184
+ to the plane, because of Yee grid specifics.
2185
+ - `FluxMonitor` and `FluxTimeMonitor` no longer snap fields to centers, but instead provide continuous interpolation of the flux over the
2186
+ exact geometry of the monitor.
2187
+ - Major refactor to internal handling of data structures, including pure `Dataset` components that do not depend on other `Tidy3D` components and may
2188
+ therefore be used to define custom data in `Tidy3D` models.
2189
+ - Speed and memory usage improvement when writing and reading Tidy3d models to and from `.hdf5` files.
2190
+ - Writing `Tidy3D` models containing custom data to `.json` file will log a warning and exclude the raw data from the file for performance reasons.
2191
+ - Material database reorganization and fixing a few references to the dispersion data.
2192
+ - The name `Near2Far` has been replaced with `FieldProjection`. For example, `Near2FarAngleMonitor` is now `FieldProjectionAngleMonitor`.
2193
+ - The API for far field projections has been simplified and several methods have now become properties.
2194
+ For example, the radar cross section is now accessed as `.radar_cross_section`, not `.radar_cross_section()`.
2195
+ - Added a method `renormalize_fields` to `AbstractFieldProjectionData` to re-project far fields to different projection distances.
2196
+ - The API for `DiffractionData` was refactored to unify it with the API for `AbstractFieldProjectionData`.
2197
+ - The user no longer needs to supply `orders_x` and `orders_y` when creating a `DiffractionMonitor`; all allowed orders are automatically
2198
+ generated and returned in the resulting `DiffractionData`.
2199
+ - The user no longer needs to supply a `medium` when creating a `DiffractionMonitor` or any `AbstractFieldProjectionMonitor`; the medium through
2200
+ which fields are to be projected is now determined automatically based on the medium in which the monitor is placed.
2201
+ - The following attributes of `AbstractFieldProjectionMonitor` are now properties rather than methods:
2202
+ `fields_spherical`, `fields_cartesian`, `power`, `radar_cross_section`.
2203
+
2204
+ ### Fixed
2205
+ - Some issues in `DiffractionMonitor` that is not `z`-normal that could lead to solver errors or wrong results.
2206
+ - Bug leading to solver error when `Absorber` boundaries with `num_layers = 0` are used.
2207
+ - Bug leading to solver error when a `FieldMonitor` crosses a `BlochBoundary` and not all field components are recorded.
2208
+ - When running a `Batch`, `path_dir` is created if not existing.
2209
+ - Ignore shapely `STRtree` deprecation warning.
2210
+ - Ignore x axis when plotting 1D `Simulation` cross sections to avoid plot irregularities.
2211
+ - Local web api tests.
2212
+ - Use Tidy3D logger for some warnings that used to use default python logging.
2213
+
2214
+ ### Changed
2215
+
2216
+ - Replaced `gdspy` dependency with `gdstk`.
2217
+
2218
+ ## [1.7.1] - 2022-10-10
2219
+
2220
+ ### Added
2221
+ - `medium` field in `DiffractionMonitor` for decomposition of fields that are not in vacuum.
2222
+
2223
+ ### Fixed
2224
+ - Bug in meshing an empty simulation with zero size along one dimension.
2225
+ - Bug causing error in the solver when a `PermittivityMonitor` is present in the list of monitors and is not at the end of the list.
2226
+
2227
+ ## [1.7.0] - 2022-10-03
2228
+
2229
+ ### Added
2230
+ - `DiffractionMonitor` to compute the power amplitude distribution in all diffraction orders in simulations of periodic structures.
2231
+ - `PolySlab` can be oriented along `x` or `y`, not just `z`.
2232
+
2233
+ ### Removed
2234
+ - Loading components without validation no longer supported as it is too unpredictable.
2235
+ - Webplots plugin was removed as it was cumbersome to maintain and no longer used in web UI.
2236
+
2237
+ ## [1.6.3] - 2022-9-13
2238
+
2239
+ ### Added
2240
+ - Type field for `DataArray` subclasses written to `hdf5`.
2241
+
2242
+ ### Fixed
2243
+ - Docstring for `FluxMonitor` and `FluxTimeMonitor`.
2244
+
2245
+ ### Removed
2246
+ - Explicit error message about `grid_size` deprecation.
2247
+
2248
+ ## [1.6.2] - 2022-9-6
2249
+
2250
+ ### Added
2251
+ - Support for `Near2Far` monitors in the presence of simulation symmetries.
2252
+
2253
+ ### Fixed
2254
+ - Bug in 3D `Near2Far` monitors where surfaces defined in `exclude_surfaces` will no actually be excluded.
2255
+ - Bug in getting angles from `k`-space values in `Near2FarKSpaceMonitor`.
2256
+ - Bug in `SimulationData.plot_field` when getting the position along the normal axis for a 2D plot.
2257
+
2258
+ ## [1.6.1] - 2022-8-31
2259
+
2260
+ ### Fixed
2261
+ - Bug in new simulation upload on Windows machines.
2262
+
2263
+ ## [1.6.0] - 2022-8-29
2264
+
2265
+ ### Added
2266
+ - New classes of near-to-far monitors for server-side computation of the near field to far field projection.
2267
+ - Option to exclude `DataArray` Fields from a `Tidy3dBaseModel` json.
2268
+ - Option to save/load all models to/from `hdf5` format.
2269
+ - Option to load base models without validation.
2270
+ - Support negative sidewall angle for slanted `PolySlab`-s.
2271
+ - Option to specify only a subset of the S-matrix to compute in the S-matrix plugin, as well as to provide mapping between elements (due to symmetries).
2272
+ - More Lorentz-Drude material models to the material database.
2273
+
2274
+ ### Fixed
2275
+ - Raise a more meaningful error if login failed after `MAX_ATTEMPTS`.
2276
+ - Environment login credentials set to `""` are now ignored and credentials stored to file are still looked for.
2277
+ - Improved subpixel coefficients computation around sharp edges, corners, and three-structure intersections.
2278
+
2279
+ ### Changed
2280
+ - Major refactor of the way data structures are used internally.
2281
+ - `ModeFieldMonitor` -> `ModeSolerMonitor` with associated `ModeSolverData`. `ModeSolverData` is now also stored internally in `ModeSolver`,
2282
+ and the `plot_field` method can be called directly from `ModeSolver` instead of `ModeSolverData`.
2283
+ - Field data for monitors that have a zero size along a given dimension is now interpolated to the exact `monitor.center` along that dimension.
2284
+ - Removed `nlopt` from requirements, user-side material fitting now uses `scipy`.
2285
+ - New Field `normalize_index` in `Simulation` - used to be input parameter when loading simulation data. A given `SimulationData`
2286
+ can still be renormalized to a different source later on using the new `SimulationData.renormalize`.
2287
+ - `FluxMonitor` and `FluxTimeMonitor`-s can now have a 3D box geometry, in which case the flux going out of all box surfaces is computed (optionally,
2288
+ some surfaces can be excluded).
2289
+ - Frequency-domain monitors require a non-empty list of frequencies.
2290
+ - Reduced the minimum flex unit cost to run a simulation to `0.1`.
2291
+ - Reduced the premium cost for dispersive materials in typical cases.
2292
+ - Added a cost for monitors that should be negligible in typical cases but affects large monitors that significantly slow down the simulation.
2293
+
2294
+ ## [1.5.0] - 2022-7-21
2295
+
2296
+ ### Fixed
2297
+ - Bug in computing the `bounds` of `GeometryGroup`.
2298
+ - Bug in auto-mesh generation.
2299
+
2300
+ ### Added
2301
+ - Ability to compute field projections server-side.
2302
+
2303
+ ### Changed
2304
+ - All Tidy3D components apart from data structures are now fully immutable.
2305
+ - Stopped support for python 3.6, improved support for python 3.10.
2306
+ - Web material fitter for lossless input data (no `k` data provided) will now return a lossless medium.
2307
+ - `sort_by` changed to `filter_pol` in `ModeSpec`.
2308
+ - `center` no longer a field of all `Geometry` components, instead only present when needed,
2309
+ removed in `PolySlab` and `GeometryGroup`. `Planar` geometries no longer have a mandatory `length` field, but
2310
+ have `center_axis` and `lengt_axis` properties for the center and length along the extrusion axis. `PolySlab` now defined exclusively through `slab_bounds`,
2311
+ while `Cylinder` through `center` and `length`.
2312
+ - In mode solver, allow precision to switch between double and single precision.
2313
+ - Near-to-far transformation tool is no longer a plugin, but is now part of Tidy3D's new core data structures
2314
+
2315
+ ## [1.4.1] - 2022-6-13
2316
+
2317
+ ### Fixed
2318
+ - Bug in plotting polarization of a normal incidence source for some `angle_phi`.
2319
+ - Bloch vector values required to be real rather than complex.
2320
+ - Web security mitigation.
2321
+
2322
+ ## [1.4.0] - 2022-6-3
2323
+
2324
+ ### Fixed
2325
+ - Bug in plotting when alpha is turned off in permittivity overlay.
2326
+ - Bug in plotting polarization of an angled incidence source (S,P -> P,S).
2327
+ - Throw warning if user tries to download data instances in `yaml` or `json` format.
2328
+ - Arrow length plotting issues for infinite sources.
2329
+ - Issues with nonuniform mesh not extending exactly to simulation boundaries.
2330
+
2331
+ ### Added
2332
+ - Bloch periodic boundary conditions, enabling modeling of angled plane wave.
2333
+ - `GeometryGroup` object to associate several `Geometry` instances in a single `Structure` leading to improved performance for many objects.
2334
+ - Ability to uniquely specify boundary conditions on all 6 `Simulation` boundaries.
2335
+ - Options in field monitors for spatial downsampling and evaluation at Yee grid centers.
2336
+ - `BatchData.load()` can load the data for a batch directly from a directory.
2337
+ - Utility for updating `Simulation` objects from old versions of `Tidy3d` to current version.
2338
+ - Explicit `web.` functions for downloading only `simulation.json` and `tidy3d.log` files.
2339
+
2340
+ ### Changed
2341
+ - `Batch` objects automatically download their json file upon `download` and `load`.
2342
+ - Uses `shapely` instead of `gdspy` to merge polygons from a gds cell.
2343
+ - `ComponentModeler` (S matrix tool) stores the `Batch` rather than the `BatchData`.
2344
+ - Custom caching of properties to speed up subsequent calculations.
2345
+ - Tidy3D configuration now done through setting attributes of `tidy3d.config` object.
2346
+
2347
+ ## [1.3.3] - 2022-5-18
2348
+
2349
+ ### Fixed
2350
+
2351
+ - Bug in `Cylinder.inside` when `axis != 2`.
2352
+
2353
+ ### Added
2354
+
2355
+ - `AstigmaticGaussianBeam` source.
2356
+
2357
+ ### Changed
2358
+
2359
+ - Internal functions that may require hashing the simulation many times now use a `make_static` decorator. This pre-computes the simulation hash and stores it,
2360
+ and makes sure that the simulation has not changed at the beginning and end of the function execution.
2361
+ - Speeding up initialization of `PolySlab` when there is no dilation or slant angle.
2362
+ - Allow customizing data range that colormap covers in `plot_field`.
2363
+ - Speeding up of the automatic grid generation using Rtree and other improvements.
2364
+ - Better handling of http response errors.
2365
+ - In `web.monitor`, the estimated cost is only displayed when available; avoid "Unable to get cost" warning.
2366
+ - In `PolySlab.from_gds`, the selected polygons are first merged if possible, before the `PolySlab`-s are made. This avoids bugs e.g. in the case of slanted walls.
2367
+
2368
+ ## [1.3.2] - 2022-4-30
2369
+
2370
+ ### Fixed
2371
+
2372
+ - Bug in nonuniform mesh where the simulation background medium may be taken into account if higher than other structures overriding it.
2373
+
2374
+ ## [1.3.1] - 2022-4-29
2375
+
2376
+ ### Added
2377
+
2378
+ ### Changed
2379
+
2380
+ - The `copy()` method of Tidy3D components is deep by default.
2381
+ - Maximum allowed number of distinct materials is now 65530.
2382
+
2383
+ ### Fixed
2384
+
2385
+ - Monitor/source opacity values also applied to associated arrows.
2386
+ - Auto meshing in the presence of symmetries ignores anything outside of the main symmetry quadrant.
2387
+ - If an interface is completely covered by another structure, it is ignored by the mesher.
2388
+
2389
+ ## [1.3.0] - 2022-4-26
2390
+
2391
+ ### Added
2392
+
2393
+ - New `grid_spec` Field in `Simulation` that allows more flexibility in defining the mesh.
2394
+ - `GridSpec1d` class defining how the meshing along each dimension should be done, with subclasses `UniformGrid` and `CustomGrid` that cover the functionality
2395
+ previously offered by supplying a float or a list of floats to `Simulation.grid_size`. New functionality offered by `AutoGrid` subclass, with the
2396
+ mesh automatically generated based on the minimum required steps per wavelength.
2397
+ - New `PointDipole` source.
2398
+ - Opacity kwargs for monitor and source in `sim.plot`.
2399
+ - Separated `plotly`-based requirements from core requirements file, can be added with `"pip install tidy3d-beta[plotly]"`.
2400
+
2401
+ ### Changed
2402
+ - `Simulation.grid_spec` uses the default `GridSpec`, which has `AutoGrid(min_steps_per_wvl=10)` in each direction. To initialize a `Simulation` then it is no
2403
+ longer needed to provide grid information, if sources are added to the simulation. Otherwise an error will be raised asking to provide a wavelength for the auto mesh.
2404
+ - `VolumeSource` is now called `UniformCurrentSource`.
2405
+ - S-matrix module now places the monitors exactly at the port locations and offsets the source slightly for numerical reasons (more accurate).
2406
+ - Fixed bug in `PolySlab` visualization with sidewalls.
2407
+ - Inheritance structure of `Source` reorganized.
2408
+ - Better handling of only one `td.inf` in `Box.from_bounds`.
2409
+ - Added proper label to intensity plots.
2410
+ - Made all attributes `Field()` objects in `data.py` to clean up docs.
2411
+ - Proper handling of `Medium.eps_model` at frequency of `td.inf` and `None`.
2412
+
2413
+ ### Removed
2414
+ - `Simulation.grid_size` is removed in favor of `Simulation.grid_spec`.
2415
+
2416
+ ## [1.2.2] - 2022-4-16
2417
+
2418
+ ### Added
2419
+ - `SimulationDataApp` GUI for visualizing contents of `SimulationData` in `tidy3d.plugings`.
2420
+ - `SimulationPlotly` interface for generating `Simulation.plot()` figures using `plotly` instead of `matplotlib`.
2421
+ - New `PermittivityMonitor` and `PermittivityData` to store the complex relative permittivity as used in the simulation.
2422
+ - The maximum credit cost for a simulation can now be queried using `web.estimate_cost`. It is also displayed by default during `web.upload`.
2423
+
2424
+ ### Changed
2425
+ - Faster plotting for matplotlib and plotly.
2426
+ - `SimulationData` normalization keeps track of source index and can be normalized when loading directly from .hdf5 file.
2427
+ - Monitor data with symmetries now store the minimum required data to file and expands the symmetries on the fly.
2428
+ - Significant speedup in plotting complicated simulations without patch transparency.
2429
+ - When a list of `dl` is provided as a `grid_size` along a given direction, the grid is placed such that the total size `np.sum(dl)` is centered at the simulation center.
2430
+ Previously, a grid boundary was always placed at the simulation center.
2431
+
2432
+ ## [1.2.1] - 2022-3-30
2433
+
2434
+ ### Added
2435
+
2436
+ ### Changed
2437
+
2438
+ - `webapi` functions now only authenticate when needed.
2439
+ - Credentials storing folder only created when needed.
2440
+ - Added maximum number of attempts in authentication.
2441
+ - Made plotly plotting faster.
2442
+ - Cached Simulation.medium and Simulation.medium_map computation.
2443
+
2444
+ ## [1.2.0] - 2022-3-28
2445
+
2446
+ ### Added
2447
+ - `PolySlab` geometries support dilation and angled sidewalls.
2448
+ - Percent done monitoring of jobs running longer than 10 seconds.
2449
+ - Can use vectorized spherical coordinates in `tidy3d.plugins.Near2Far`.
2450
+ - `ModeSolver` returns a `ModeSolverData` object similar to `SimulationData`, containing all the information about the modes.
2451
+ - `ModeFieldMonitor` and `ModeFieldData` allow the results of a mode solve run server-side to be stored.
2452
+ - Plotting of `ModeFieldData` fields in `SimulationData.plot_field` and `ModeSolverData.plot_field`.
2453
+ - Ordering of modes by polarization fraction can be specified in `ModeSpec`.
2454
+ - Angled mode sources.
2455
+
2456
+ ### Changed
2457
+ - Significant speed improvement for `Near2Far` calculations.
2458
+ - `freq` no longer passed to `ModeSolver` upon init, instead a list of `freqs` passed to `ModeSolver.solve`.
2459
+ - Mode solver now returns `ModeSolverData` object containing information about the mode fields and propagation constants as data arrays over frequency and mode index.
2460
+ - Reorganized some of the internal `Source` classes.
2461
+ - Major improvements to `Batch` objects. `Batch.run()` returns a `BatchData` object that maps `task_name` to `SimulationData`.
2462
+ - Infinity stored as `str` in json outputs, conforming to json file specifications.
2463
+ - No longer need to specify one of `x/y/z` in `SimulationData.plot_field` if the monitor has a zero-sized dimension.
2464
+ - `Simulation.run_time` but must be > 0 to upload to server.
2465
+
2466
+ ## [1.1.1] - 2022-3-2
2467
+
2468
+ ### Added
2469
+
2470
+ ### Changed
2471
+
2472
+ - Fixed issue where smatrix was not uploaded to pyPI.
2473
+
2474
+ ## [1.1.0] - 2022-3-1
2475
+
2476
+ ### Added
2477
+
2478
+ - `Simulation` symmetries now fully functional.
2479
+ - Ability to perform near-to-far transformations from multiple surface monitors oriented along the x, y or z directions using `tidy3d.plugins.Near2Far`.
2480
+ - `tidy3d.plugins.ComponentModeler` tool for scattering matrix calculations.
2481
+
2482
+ ### Changed
2483
+
2484
+ - Major enhancements to near field to far field transformation tool: multiple monitors supported with arbitrary configuration, user control over sampling point density.
2485
+ - Fixed visualization bug in symmetry.
2486
+
2487
+ ## [1.0.2] - 2022-2-24
2488
+
2489
+ ### Added
2490
+ - Clarified license terms to not include scripts written using the tidy3d python API.
2491
+ - Simulation symmetries are now enabled but currently only affect the mode solver, if the mode plane lies on the simulation center and there's a symmetry.
2492
+ - Validator that mode objects with symmetries are either entirely in the main quadrant, or lie on the symmetry axis.
2493
+ - `Simulation.plotly()` makes a plotly figure of the cross section.
2494
+ - Dispersion fitter can parse urls from refractiveindex.info
2495
+ - Clarified license terms to not include scripts written using the tidy3d python API.
2496
+
2497
+ ### Changed
2498
+ - Fixed a bug in python 3.6 where polyslab vertices loaded differently from file.
2499
+
2500
+ ## [1.0.1] - 2022-2-16
2501
+
2502
+ ### Added
2503
+ - `Selmeier.from_dispersion()` method to quickly make a single-pole fit for lossless weakly dispersive materials.
2504
+ - Stable dispersive material fits via webservice.
2505
+ - Allow to load dispersive data directly by providing URL to txt or csv file
2506
+ - Validates simulation based on discretized size.
2507
+
2508
+ ### Changed
2509
+ - `Polyslab.from_gds` returns a list of `PolySlab` objects imported from all polygons in given layer and dtype, can optionally specify single dtype.
2510
+ - Warning about structure close to PML disabled if Absorber type.
2511
+ - Source dft now ignores insignificant time amplitudes for speed.
2512
+ - New color schemes for plots.
2513
+
2514
+ ## [1.0.0] - 2022-1-31
2515
+
2516
+ ### Added
2517
+ - Stable dispersive material fits via webservice.
2518
+
2519
+ ### Changed
2520
+ - Refined and updated documentation.
2521
+
2522
+ ## [0.2.0] - 2022-1-29
2523
+
2524
+ ### Added
2525
+
2526
+ - `FieldMonitor.surface()` to split volume monitors into their surfaces.
2527
+ - Units and annotation to data.
2528
+ - Faster preprocessing.
2529
+ - Web authentication using environment variables `TIDY3D_USER` and `TIDY3D_PASS`.
2530
+ - `callback_url` in web API to put job metadata when a job is finished.
2531
+ - Support for non uniform grid size definition.
2532
+ - Gaussian beam source.
2533
+ - Automated testing through tox and github actions.
2534
+
2535
+ ## [0.1.1] - 2021-11-09
2536
+ ### Added
2537
+
2538
+ - PML parameters and padding Grid with pml pixels by [@momchil-flex](https://github.com/momchil-flex) in #64
2539
+ - Documentation by [@tylerflex](https://github.com/tylerflex) in #63
2540
+ - Gds import from [@tylerflex](https://github.com/tylerflex) in #69
2541
+ - Logging, by [@tylerflex](https://github.com/tylerflex) in #70
2542
+ - Multi-pole Drude medium by [@weiliangjin2021](https://github.com/weiliangjin2021) in #73
2543
+ - Mode Solver: from [@tylerflex](https://github.com/tylerflex) in #74
2544
+ - Near2Far from [@tylerflex](https://github.com/tylerflex) in #77
2545
+
2546
+ ### Changed
2547
+ - Separated docs from [@tylerflex](https://github.com/tylerflex) in #78
2548
+
2549
+ ## [0.1.0] - 2021-10-21
2550
+
2551
+ ### Added
2552
+ - Web API implemented by converting simulations to old tidy3D
2553
+
2554
+ ## Alpha Release Changes
2555
+
2556
+ ### 22.1.1
2557
+ - Solver speed improvement (gain depending on simulation + hardware details).
2558
+ - Bringing the speed of the non-angled mode solver back to pre-21.4.2 levels.
2559
+
2560
+ ### 21.4.4
2561
+ - Improvements to subpixel averaging for dispersive materials.
2562
+ - Enabled web login using environment variables ``TIDY3D_USER`` and ``TIDY3D_PASS``.
2563
+
2564
+ ### 21.4.3
2565
+ - Bugfix when running simulation with zero ``run_time``.
2566
+ - More internal logging.
2567
+ - Fixed unstable ``'Li1993_293K'`` variant of ``cSi`` in the material library.
2568
+
2569
+ ### 21.4.2.2
2570
+ - Bugfix when downloading data on Windows.
2571
+ - Bugfix in material fitting tool when target tolerance is not reached.
2572
+
2573
+ ### 21.4.2
2574
+ - New Gaussian beam source and `example usage <examples/GratingCoupler.html>`__.
2575
+ - Modal sources and monitors in bent and in angled waveguides with `tutorial <examples/Modes_bent_angled.html>`__.
2576
+ - Nyquist-limit sampling in frequency-domain monitors (much faster without loss of accuracy).
2577
+ - Support for Drude model of material dispersion.
2578
+ - Small bugfixes to some of the other dispersion models.
2579
+ - PEC boundaries applied by default at the truncation of any boundary with PML, avoiding potential
2580
+ issues with using periodic boundaries under the PML instead.
2581
+ - Source normalization no longer adding a spurious frequency-dependent phase to the fields.
2582
+ - Fixed bug in unpacking monitor fields with symmetries and ``interpolate=False``.
2583
+ - Lots of streamlining on the backend side.
2584
+
2585
+ ### 21.4.1
2586
+ - Fixed bug with zero-size monitor plotting.
2587
+ - Fixed bug with empty simulation run introduced in 21.4.0.
2588
+
2589
+ ### 21.4.0
2590
+ - A few small fixes.
2591
+
2592
+ ### 21.3.1.6
2593
+ - Fixed nonlinear constraint in dispersive material fitting tool.
2594
+ - Fixed potential issue when a monitor stores neither `'E'` nor `'H'`.
2595
+ - Fixed some backwards compatibility issues introduced in 21.3.1.5.
2596
+
2597
+ ### 21.3.1.5
2598
+ - Frequency monitors can now optionally store the complex permittivity at the same locations where
2599
+ the E-fields are recorded, at the monitor frequencies.
2600
+ - Frequency monitors now also have an `'interpolate'` keyword, which defaults to `True` and
2601
+ reproduces the behavior of previous versions. If set to `False`, however, the raw fields
2602
+ evaluated at their corresponding Yee grid locations are returned, instead of the fields interpolated
2603
+ to the Yee cell centers. This also affects the returned permittivity, if requested.
2604
+ - Reorganized internal source time dependence handling, enabling more complicated functionality
2605
+ in the future, like custom source time.
2606
+ - Total field in the simulation now sampled at the time step of the peak of the source time dependence,
2607
+ for better estimation of the shutoff factor.
2608
+ - A number of bug fixes, especially in the new plotting introduced in 21.3.1.4.
2609
+
2610
+ ### 21.3.1.4
2611
+ - Reorganized plotting:
2612
+ - Speeding up structure visualizations.
2613
+ - Structures now shown based on primitive definitions rather than grid discretization. This
2614
+ then shows the physical structures but not what the simulation "sees". Will add an option to
2615
+ display the grid lines in next version.
2616
+ - Bumped down matplotlib version requirement to 3.2 and python version requirement to 3.6.
2617
+ - Improved handling of PEC interfaces.- Reorganized and extended internal logging.
2618
+ - Added ``tidy3d.__version__``.
2619
+ - A number of fixes to the example notebooks and the colab integration.
2620
+
2621
+ ### 21.3.1.3
2622
+ - Bumping back python version requirement from 3.8 to 3.7.
2623
+
2624
+ ### 21.3.1.2
2625
+ - Hotfix to an internal bug in some simulation runs.
2626
+
2627
+ ### 21.3.1.1
2628
+ - New dispersion fitting tool for material data and accompanying `tutorial <examples/Fitting.html>`__.
2629
+ - (`beta`) Non-uniform Cartesian meshing now supported. The grid coordinates are provided
2630
+ by hand to `Simulation`. Next step is implementing auto-meshing.
2631
+ - `DispersionModel` objects can now be directly used as materials.
2632
+ - Fixed bug to `Cylinder` subpixel averaging.
2633
+ - Small bugs fixes/added checks for some edge cases.
2634
+
2635
+ ### 21.3.1.0
2636
+ - Rehash of symmetries and support for mode sources and monitors with symmetries.
2637
+ - Anisotropic materials (diagonal epsilon tensor).
2638
+ - Rehashed error handling to output more runtime errors to tidy3d.log.
2639
+ - Job and Batch classes for better simulation handling (eventually to fully replace webapi functions).
2640
+ - A large number of small improvements and bug fixes.
2641
+
2642
+ [2.13.0.dev1]: https://github.com/flexcompute/tidy3d/compare/v2.13.0.dev0...v2.13.0.dev1
2643
+ [2.13.0.dev0]: https://github.com/flexcompute/tidy3d/compare/v2.12.1...v2.13.0.dev0
2644
+ [2.12.1]: https://github.com/flexcompute/tidy3d/compare/v2.12.0...v2.12.1
2645
+ [2.12.0]: https://github.com/flexcompute/tidy3d/compare/v2.11.2...v2.12.0
2646
+ [2.11.2]: https://github.com/flexcompute/tidy3d/compare/v2.11.1...v2.11.2
2647
+ [2.11.1]: https://github.com/flexcompute/tidy3d/compare/v2.11.0...v2.11.1
2648
+ [2.11.0]: https://github.com/flexcompute/tidy3d/compare/v2.10.2...v2.11.0
2649
+ [2.10.2]: https://github.com/flexcompute/tidy3d/compare/v2.10.1...v2.10.2
2650
+ [2.10.1]: https://github.com/flexcompute/tidy3d/compare/v2.10.0...v2.10.1
2651
+ [2.10.0]: https://github.com/flexcompute/tidy3d/compare/v2.9.3...v2.10.0
2652
+ [2.9.3]: https://github.com/flexcompute/tidy3d/compare/v2.9.2...v2.9.3
2653
+ [2.9.2]: https://github.com/flexcompute/tidy3d/compare/v2.9.1...v2.9.2
2654
+ [2.9.1]: https://github.com/flexcompute/tidy3d/compare/v2.9.0...v2.9.1
2655
+ [2.9.0]: https://github.com/flexcompute/tidy3d/compare/v2.8.5...v2.9.0
2656
+ [2.8.5]: https://github.com/flexcompute/tidy3d/compare/v2.8.4...v2.8.5
2657
+ [2.8.4]: https://github.com/flexcompute/tidy3d/compare/v2.8.3...v2.8.4
2658
+ [2.8.3]: https://github.com/flexcompute/tidy3d/compare/v2.8.2...v2.8.3
2659
+ [2.8.2]: https://github.com/flexcompute/tidy3d/compare/v2.8.1...v2.8.2
2660
+ [2.8.1]: https://github.com/flexcompute/tidy3d/compare/v2.8.0...v2.8.1
2661
+ [2.8.0]: https://github.com/flexcompute/tidy3d/compare/v2.7.9...v2.8.0
2662
+ [2.7.9]: https://github.com/flexcompute/tidy3d/compare/v2.7.8...v2.7.9
2663
+ [2.7.8]: https://github.com/flexcompute/tidy3d/compare/v2.7.7...v2.7.8
2664
+ [2.7.7]: https://github.com/flexcompute/tidy3d/compare/v2.7.6...v2.7.7
2665
+ [2.7.6]: https://github.com/flexcompute/tidy3d/compare/v2.7.5...v2.7.6
2666
+ [2.7.5]: https://github.com/flexcompute/tidy3d/compare/v2.7.4...v2.7.5
2667
+ [2.7.4]: https://github.com/flexcompute/tidy3d/compare/v2.7.3...v2.7.4
2668
+ [2.7.3]: https://github.com/flexcompute/tidy3d/compare/v2.7.2...v2.7.3
2669
+ [2.7.2]: https://github.com/flexcompute/tidy3d/compare/v2.7.1...v2.7.2
2670
+ [2.7.1]: https://github.com/flexcompute/tidy3d/compare/v2.7.0...v2.7.1
2671
+ [2.7.0]: https://github.com/flexcompute/tidy3d/compare/v2.6.4...v2.7.0
2672
+ [2.6.4]: https://github.com/flexcompute/tidy3d/compare/v2.6.3...v2.6.4
2673
+ [2.6.3]: https://github.com/flexcompute/tidy3d/compare/v2.6.2...v2.6.3
2674
+ [2.6.2]: https://github.com/flexcompute/tidy3d/compare/v2.6.1...v2.6.2
2675
+ [2.6.1]: https://github.com/flexcompute/tidy3d/compare/v2.6.0...v2.6.1
2676
+ [2.6.0]: https://github.com/flexcompute/tidy3d/compare/v2.5.2...v2.6.0
2677
+ [2.5.2]: https://github.com/flexcompute/tidy3d/compare/v2.5.1...v2.5.2
2678
+ [2.5.1]: https://github.com/flexcompute/tidy3d/compare/v2.5.0...v2.5.1
2679
+ [2.5.0]: https://github.com/flexcompute/tidy3d/compare/v2.4.3...v2.5.0
2680
+ [2.4.3]: https://github.com/flexcompute/tidy3d/compare/v2.4.2...v2.4.3
2681
+ [2.4.2]: https://github.com/flexcompute/tidy3d/compare/v2.4.1...v2.4.2
2682
+ [2.4.1]: https://github.com/flexcompute/tidy3d/compare/v2.4.0...v2.4.1
2683
+ [2.4.0]: https://github.com/flexcompute/tidy3d/compare/v2.3.3...v2.4.0
2684
+ [2.3.3]: https://github.com/flexcompute/tidy3d/compare/v2.3.2...v2.3.3
2685
+ [2.3.2]: https://github.com/flexcompute/tidy3d/compare/v2.3.1...v2.3.2
2686
+ [2.3.1]: https://github.com/flexcompute/tidy3d/compare/v2.3.0...v2.3.1
2687
+ [2.3.0]: https://github.com/flexcompute/tidy3d/compare/v2.2.3...v2.3.0
2688
+ [2.2.3]: https://github.com/flexcompute/tidy3d/compare/v2.2.2...v2.2.3
2689
+ [2.2.2]: https://github.com/flexcompute/tidy3d/compare/v2.2.1...v2.2.2
2690
+ [2.2.1]: https://github.com/flexcompute/tidy3d/compare/v2.2.0...v2.2.1
2691
+ [2.2.0]: https://github.com/flexcompute/tidy3d/compare/v2.1.1...v2.2.0
2692
+ [2.1.1]: https://github.com/flexcompute/tidy3d/compare/v2.1.0...v2.1.1
2693
+ [2.1.0]: https://github.com/flexcompute/tidy3d/compare/v2.0.3...v2.1.0
2694
+ [2.0.3]: https://github.com/flexcompute/tidy3d/compare/v2.0.2...v2.0.3
2695
+ [2.0.2]: https://github.com/flexcompute/tidy3d/compare/v2.0.1...v2.0.2
2696
+ [2.0.1]: https://github.com/flexcompute/tidy3d/compare/v1.10.0...v2.0.1
2697
+ [1.10.0]: https://github.com/flexcompute/tidy3d/compare/v1.9.3...v1.10.0
2698
+ [1.9.3]: https://github.com/flexcompute/tidy3d/compare/v1.9.2...v1.9.3
2699
+ [1.9.2]: https://github.com/flexcompute/tidy3d/compare/v1.9.1...v1.9.2
2700
+ [1.9.1]: https://github.com/flexcompute/tidy3d/compare/v1.9.0...v1.9.1
2701
+ [1.9.0]: https://github.com/flexcompute/tidy3d/compare/v1.8.4...v1.9.0
2702
+ [1.8.4]: https://github.com/flexcompute/tidy3d/compare/v1.8.3...v1.8.4
2703
+ [1.8.3]: https://github.com/flexcompute/tidy3d/compare/v1.8.2...v1.8.3
2704
+ [1.8.2]: https://github.com/flexcompute/tidy3d/compare/v1.8.1...v1.8.2
2705
+ [1.8.1]: https://github.com/flexcompute/tidy3d/compare/v1.8.0...v1.8.1
2706
+ [1.8.0]: https://github.com/flexcompute/tidy3d/compare/v1.7.1...v1.8.0
2707
+ [1.7.1]: https://github.com/flexcompute/tidy3d/compare/v1.7.0...v1.7.1
2708
+ [1.7.0]: https://github.com/flexcompute/tidy3d/compare/v1.6.3...v1.7.0
2709
+ [1.6.3]: https://github.com/flexcompute/tidy3d/compare/v1.6.2...v1.6.3
2710
+ [1.6.2]: https://github.com/flexcompute/tidy3d/compare/v1.6.1...v1.6.2
2711
+ [1.6.1]: https://github.com/flexcompute/tidy3d/compare/v1.6.0...v1.6.1
2712
+ [1.6.0]: https://github.com/flexcompute/tidy3d/compare/v1.5.0...v1.6.0
2713
+ [1.5.0]: https://github.com/flexcompute/tidy3d/compare/v1.4.1...v1.5.0
2714
+ [1.4.1]: https://github.com/flexcompute/tidy3d/compare/v1.4.0...v1.4.1
2715
+ [1.4.0]: https://github.com/flexcompute/tidy3d/compare/v1.3.3...v1.4.0
2716
+ [1.3.3]: https://github.com/flexcompute/tidy3d/compare/v1.3.2...v1.3.3
2717
+ [1.3.2]: https://github.com/flexcompute/tidy3d/compare/v1.3.1...v1.3.2
2718
+ [1.3.1]: https://github.com/flexcompute/tidy3d/compare/v1.3.0...v1.3.1
2719
+ [1.3.0]: https://github.com/flexcompute/tidy3d/compare/v1.2.2...v1.3.0
2720
+ [1.2.2]: https://github.com/flexcompute/tidy3d/compare/v1.2.1...v1.2.2
2721
+ [1.2.1]: https://github.com/flexcompute/tidy3d/compare/v1.2.0...v1.2.1
2722
+ [1.2.0]: https://github.com/flexcompute/tidy3d/compare/v1.1.1...v1.2.0
2723
+ [1.1.1]: https://github.com/flexcompute/tidy3d/compare/v1.1.0...v1.1.1
2724
+ [1.1.0]: https://github.com/flexcompute/tidy3d/compare/v1.0.2...v1.1.0
2725
+ [1.0.2]: https://github.com/flexcompute/tidy3d/compare/v1.0.1...v1.0.2
2726
+ [1.0.1]: https://github.com/flexcompute/tidy3d/compare/v1.0.0...v1.0.1
2727
+ [1.0.0]: https://github.com/flexcompute/tidy3d/compare/v0.2.0...v1.0.0
2728
+ [0.2.0]: https://github.com/flexcompute/tidy3d/compare/0.1.1...v0.2.0
2729
+ [0.1.1]: https://github.com/flexcompute/tidy3d/compare/0.1.0...0.1.1
2730
+ [0.1.0]: https://github.com/flexcompute/tidy3d/releases/tag/0.1.0