tidy3d 2.11.0.dev0__tar.gz → 2.11.0.dev1__tar.gz

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