gplugins 2.0.0__tar.gz → 2.0.1__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 (243) hide show
  1. {gplugins-2.0.0 → gplugins-2.0.1}/PKG-INFO +4 -4
  2. {gplugins-2.0.0 → gplugins-2.0.1}/README.md +1 -1
  3. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/__init__.py +1 -1
  4. gplugins-2.0.1/gplugins/common/utils/geometry.py +31 -0
  5. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/elmer/get_capacitance.py +1 -4
  6. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/meow/meow_eme.py +4 -3
  7. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/meshwell/get_meshwell_3D.py +20 -46
  8. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/meshwell/get_meshwell_cross_section.py +1 -119
  9. gplugins-2.0.1/gplugins/meshwell/tests/test_meshwell.py +69 -0
  10. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/palace/get_capacitance.py +13 -0
  11. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/palace/tests/test_palace.py +46 -17
  12. {gplugins-2.0.0 → gplugins-2.0.1}/pyproject.toml +4 -4
  13. {gplugins-2.0.0 → gplugins-2.0.1}/LICENSE +0 -0
  14. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/__init__.py +0 -0
  15. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/base_models/__init__.py +0 -0
  16. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/base_models/component.py +0 -0
  17. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/base_models/simulation.py +0 -0
  18. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/config.py +0 -0
  19. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/types.py +0 -0
  20. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/__init__.py +0 -0
  21. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/add_simulation_markers.py +0 -0
  22. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/async_helpers.py +0 -0
  23. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/cache.py +0 -0
  24. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/convert_sparameters.py +0 -0
  25. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/disable_print.py +0 -0
  26. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/get_capacitance.py +0 -0
  27. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/get_component_with_net_layers.py +0 -0
  28. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/get_effective_indices.py +0 -0
  29. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/get_scattering.py +0 -0
  30. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/get_sparameters_path.py +0 -0
  31. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/optical_constants.py +0 -0
  32. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/parse_layer_stack.py +0 -0
  33. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/plot.py +0 -0
  34. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/plot_csv.py +0 -0
  35. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/port_symmetries.py +0 -0
  36. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/common/utils/tests/test_get_component_with_new_port_layers.py +0 -0
  37. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/devsim/__init__.py +0 -0
  38. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/devsim/doping.py +0 -0
  39. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/devsim/get_simulation.py +0 -0
  40. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/devsim/get_simulation_xsection.py +0 -0
  41. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/devsim/get_solver.py +0 -0
  42. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/devsim/test_devsim.py +0 -0
  43. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/elmer/__init__.py +0 -0
  44. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/elmer/electrostatic.sif.j2 +0 -0
  45. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/elmer/tests/test_elmer.py +0 -0
  46. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/fdtdz/__init__.py +0 -0
  47. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/fdtdz/get_epsilon_fdtdz.py +0 -0
  48. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/fdtdz/get_ports_fdtdz.py +0 -0
  49. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/fdtdz/get_sparameters_fdtdz.py +0 -0
  50. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/femwell/__init__.py +0 -0
  51. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/femwell/mode_solver.py +0 -0
  52. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/femwell/solve_thermal.py +0 -0
  53. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/femwell/test_mode_solver.py +0 -0
  54. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/Makefile +0 -0
  55. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/__init__.py +0 -0
  56. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/b64.py +0 -0
  57. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/gfviz.py +0 -0
  58. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/netlist.py +0 -0
  59. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/serve.py +0 -0
  60. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/static/b64.js +0 -0
  61. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/static/schemedit.js +0 -0
  62. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/static/schemedit.wasm +0 -0
  63. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/templates/example.json +0 -0
  64. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gfviz/templates/index.html +0 -0
  65. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/__init__.py +0 -0
  66. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/get_material.py +0 -0
  67. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/get_meep_geometry.py +0 -0
  68. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/get_port_eigenmode.py +0 -0
  69. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/get_simulation.py +0 -0
  70. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/get_simulation_grating_farfield.py +0 -0
  71. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/get_simulation_grating_fiber.py +0 -0
  72. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/meep_adjoint_optimization.py +0 -0
  73. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_eigenmode.py +0 -0
  74. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_materials.py +0 -0
  75. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_crossing.csv +0 -0
  76. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_straight.csv +0 -0
  77. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_crossing.csv +0 -0
  78. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_straight.csv +0 -0
  79. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_symmetries_straight.csv +0 -0
  80. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi.csv +0 -0
  81. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi_pool.csv +0 -0
  82. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_crossing_symmetric.csv +0 -0
  83. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight.csv +0 -0
  84. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_batch.csv +0 -0
  85. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi.csv +0 -0
  86. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi_pool.csv +0 -0
  87. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_symmetric.csv +0 -0
  88. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/test_write_sparameters_meep.py +0 -0
  89. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/write_sparameters_grating.py +0 -0
  90. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/write_sparameters_meep.py +0 -0
  91. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/write_sparameters_meep_batch.py +0 -0
  92. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/gmeep/write_sparameters_meep_mpi.py +0 -0
  93. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/__init__.py +0 -0
  94. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/dataprep/__init__.py +0 -0
  95. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/dataprep/regions.py +0 -0
  96. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/drc/__init__.py +0 -0
  97. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/drc/check_duplicated_cells.py +0 -0
  98. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/drc/check_exclusion.py +0 -0
  99. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/drc/check_inclusion.py +0 -0
  100. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/drc/check_space.py +0 -0
  101. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/drc/check_width.py +0 -0
  102. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/drc/count_drc.py +0 -0
  103. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/drc/samples/drc_errors.py +0 -0
  104. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/drc/write_drc.py +0 -0
  105. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/get_density.py +0 -0
  106. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/get_netlist.py +0 -0
  107. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/netlist_graph.py +0 -0
  108. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/netlist_spice_reader.py +0 -0
  109. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/plot_nets.py +0 -0
  110. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/tests/test_dataprep_regions.py +0 -0
  111. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/tests/test_density.py +0 -0
  112. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/tests/test_drc_exclusion.py +0 -0
  113. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/tests/test_drc_inclusion.py +0 -0
  114. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/tests/test_drc_space.py +0 -0
  115. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/tests/test_drc_width.py +0 -0
  116. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/tests/test_global_density.py +0 -0
  117. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/tests/test_netlist_spice_reader.py +0 -0
  118. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/klayout/tests/test_plot_nets.py +0 -0
  119. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/README.md +0 -0
  120. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/__init__.py +0 -0
  121. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/interconnect.py +0 -0
  122. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/mapping_ubcpdk.yml +0 -0
  123. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/read.py +0 -0
  124. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/settings.py +0 -0
  125. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/tests/test_lumerical_read_sparameters.py +0 -0
  126. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/tests/test_netlist.py +0 -0
  127. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/tests/test_netlist_get_routes.py +0 -0
  128. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/write_sparameters_lumerical.py +0 -0
  129. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/lumerical/write_sparameters_lumerical_components.py +0 -0
  130. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/materials/__init__.py +0 -0
  131. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/materials/inorganic.py +0 -0
  132. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/materials/optical/__init__.py +0 -0
  133. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/materials/optical/optical_mat.py +0 -0
  134. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/materials/optical/refractive_index_info.py +0 -0
  135. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/materials/semiconductor/__init__.py +0 -0
  136. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/materials/semiconductor/semiconductor_mat.py +0 -0
  137. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/meow/__init__.py +0 -0
  138. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/meow/test_meow_simulation.py +0 -0
  139. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/meshwell/__init__.py +0 -0
  140. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/__init__.py +0 -0
  141. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/coupler.py +0 -0
  142. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/find_coupling_vs_gap.py +0 -0
  143. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/find_mode_dispersion.py +0 -0
  144. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/find_modes.py +0 -0
  145. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/find_modes_cross_section.py +0 -0
  146. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/find_neff_ng_dw_dh.py +0 -0
  147. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/find_neff_vs_width.py +0 -0
  148. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/get_mode_solver_coupler.py +0 -0
  149. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/get_mode_solver_cross_section.py +0 -0
  150. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/get_mode_solver_rib.py +0 -0
  151. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/modes/neff_vs_width_nitride.csv +0 -0
  152. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/modes/neff_vs_width_rib.csv +0 -0
  153. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/modes/neff_vs_width_strip.csv +0 -0
  154. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/neff_convergence_test.py +0 -0
  155. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/neff_vs_width.csv +0 -0
  156. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/overlap.py +0 -0
  157. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/tests/test_dw_dh/test_dw_dh.csv +0 -0
  158. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/tests/test_dw_dh/test_dw_dh.obtained.csv +0 -0
  159. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/tests/test_dw_dh/test_dw_dh_dispersion.csv +0 -0
  160. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/tests/test_dw_dh.py +0 -0
  161. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/tests/test_find_modes.py +0 -0
  162. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/tests/test_find_modes_dispersion.py +0 -0
  163. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.csv +0 -0
  164. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.obtained.csv +0 -0
  165. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/tests/test_neff_vs_width.py +0 -0
  166. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/types.py +0 -0
  167. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/modes/waveguide.py +0 -0
  168. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/palace/__init__.py +0 -0
  169. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/palace/driven.json +0 -0
  170. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/palace/electrostatic.json +0 -0
  171. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/palace/get_scattering.py +0 -0
  172. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/path_length_analysis/__init__.py +0 -0
  173. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/path_length_analysis/path_length_analysis.py +0 -0
  174. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/path_length_analysis/path_length_analysis_from_gds.py +0 -0
  175. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/path_length_analysis/test_pathlength_extraction.py +0 -0
  176. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/path_length_analysis/test_pathlength_extraction_from_gds.py +0 -0
  177. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/path_length_analysis/test_pathlength_extraction_utils.py +0 -0
  178. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/path_length_analysis/utils.py +0 -0
  179. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/photonic_circuit_models/__init__.py +0 -0
  180. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/photonic_circuit_models/coupler.py +0 -0
  181. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/photonic_circuit_models/fsr.py +0 -0
  182. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/photonic_circuit_models/heater.py +0 -0
  183. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/photonic_circuit_models/mzi.py +0 -0
  184. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/photonic_circuit_models/ring.py +0 -0
  185. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/process/__init__.py +0 -0
  186. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/process/diffusion.py +0 -0
  187. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/process/implant_tables.py +0 -0
  188. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/process/pysrim.py +0 -0
  189. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/process/silicon.py +0 -0
  190. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/process/skew/antimony_si_skew.csv +0 -0
  191. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/process/skew/arsenic_si_skew.csv +0 -0
  192. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/process/skew/boron_si_skew.csv +0 -0
  193. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/process/skew/phosphorus_si_skew.csv +0 -0
  194. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/__init__.py +0 -0
  195. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/interpolators.py +0 -0
  196. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/mlp.py +0 -0
  197. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/models.py +0 -0
  198. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/parameter.py +0 -0
  199. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/plot_model.py +0 -0
  200. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/read.py +0 -0
  201. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/strategy.py +0 -0
  202. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/tests/test_mzi.py +0 -0
  203. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.obtained.yml +0 -0
  204. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.yml +0 -0
  205. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/tests/test_mzi_lattice.py +0 -0
  206. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sax/tests/test_parameters.py +0 -0
  207. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sentaurus/mask_sde.py +0 -0
  208. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sentaurus/mask_sprocess.py +0 -0
  209. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sentaurus/sde.py +0 -0
  210. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sentaurus/sdevice.py +0 -0
  211. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sentaurus/sprocess.py +0 -0
  212. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/sentaurus/svisual.py +0 -0
  213. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/spice/__init__.py +0 -0
  214. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/spice/spice_to_yaml.py +0 -0
  215. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/spice/tests/__init__.py +0 -0
  216. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/spice/tests/test_interconnect.py +0 -0
  217. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/__init__.py +0 -0
  218. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/component.py +0 -0
  219. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/get_results.py +0 -0
  220. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/get_simulation_grating_coupler.py +0 -0
  221. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/materials.py +0 -0
  222. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/modes.py +0 -0
  223. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/test_component_modeler.py +0 -0
  224. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/test_materials.py +0 -0
  225. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/test_modes/test_sweep_width.csv +0 -0
  226. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/test_modes/test_sweep_width.obtained.csv +0 -0
  227. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/test_modes_coupler.py +0 -0
  228. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/test_modes_waveguide.py +0 -0
  229. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/test_plot_simulation_grating_coupler.py +0 -0
  230. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/test_write_sparameters.py +0 -0
  231. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/tests_sparameters/sim_ref.yaml +0 -0
  232. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters.py +0 -0
  233. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters_grating_coupler.py +0 -0
  234. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/types.py +0 -0
  235. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/util.py +0 -0
  236. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/tidy3d/write_sparameters_grating_coupler.py +0 -0
  237. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/typings.py +0 -0
  238. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/vlsir/__init__.py +0 -0
  239. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/vlsir/export_netlist.py +0 -0
  240. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/vlsir/tests/resources/pads_correct.cir +0 -0
  241. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/vlsir/tests/resources/pads_correct.scs +0 -0
  242. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/vlsir/tests/resources/pads_correct.sp +0 -0
  243. {gplugins-2.0.0 → gplugins-2.0.1}/gplugins/vlsir/tests/test_vlsir.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gplugins
3
- Version: 2.0.0
3
+ Version: 2.0.1
4
4
  Summary: gdsfactory plugins
5
5
  Keywords: python
6
6
  Author-email: gdsfactory <contact@gdsfactory.com>
@@ -49,14 +49,14 @@ Requires-Dist: mypy ; extra == "maintainer"
49
49
  Requires-Dist: tbump ; extra == "maintainer"
50
50
  Requires-Dist: towncrier ; extra == "maintainer"
51
51
  Requires-Dist: meow-sim>=0.14.1,<0.15 ; extra == "meow"
52
- Requires-Dist: sax>=0.15.6,<0.16.0 ; extra == "meow"
52
+ Requires-Dist: sax~=0.16.3 ; extra == "meow"
53
53
  Requires-Dist: tidy3d>=2.8.2,<2.9 ; extra == "meow"
54
54
  Requires-Dist: shapely ; extra == "meshwell"
55
55
  Requires-Dist: meshwell~=2.1.1 ; extra == "meshwell"
56
56
  Requires-Dist: bokeh ; extra == "path-length-analysis"
57
57
  Requires-Dist: numba ; extra == "path-length-analysis"
58
58
  Requires-Dist: shapely ; extra == "path-length-analysis"
59
- Requires-Dist: sax~=0.15.14 ; extra == "sax"
59
+ Requires-Dist: sax~=0.16.3 ; extra == "sax"
60
60
  Requires-Dist: bokeh ; extra == "schematic"
61
61
  Requires-Dist: ipywidgets ; extra == "schematic"
62
62
  Requires-Dist: natsort ; extra == "schematic"
@@ -80,7 +80,7 @@ Provides-Extra: schematic
80
80
  Provides-Extra: tidy3d
81
81
  Provides-Extra: vlsir
82
82
 
83
- # gplugins 2.0.0
83
+ # gplugins 2.0.1
84
84
 
85
85
  [![docs](https://github.com/gdsfactory/gplugins/actions/workflows/pages.yml/badge.svg)](https://gdsfactory.github.io/gplugins/)
86
86
  [![PyPI](https://img.shields.io/pypi/v/gplugins)](https://pypi.org/project/gplugins/)
@@ -1,4 +1,4 @@
1
- # gplugins 2.0.0
1
+ # gplugins 2.0.1
2
2
 
3
3
  [![docs](https://github.com/gdsfactory/gplugins/actions/workflows/pages.yml/badge.svg)](https://gdsfactory.github.io/gplugins/)
4
4
  [![PyPI](https://img.shields.io/pypi/v/gplugins)](https://pypi.org/project/gplugins/)
@@ -1,6 +1,6 @@
1
1
  """gplugins - gdsfactory plugins."""
2
2
 
3
- __version__ = "2.0.0"
3
+ __version__ = "2.0.1"
4
4
 
5
5
  import pathlib
6
6
 
@@ -0,0 +1,31 @@
1
+ from typing import List
2
+ import gdsfactory as gf
3
+ import kfactory as kf
4
+ from shapely.geometry import Polygon, MultiPolygon
5
+
6
+ def region_to_shapely_polygons(region: kf.kdb.Region) -> MultiPolygon:
7
+ """Convert a kfactory Region to a list of Shapely polygons."""
8
+ polygons = []
9
+ for polygon_kdb in region.each():
10
+ exterior_coords = [
11
+ (gf.kcl.to_um(point.x), gf.kcl.to_um(point.y))
12
+ for point in polygon_kdb.each_point_hull()
13
+ ]
14
+ # Extract hole coordinates
15
+ holes = []
16
+ num_holes = polygon_kdb.holes()
17
+ for hole_idx in range(num_holes):
18
+ hole_coords = []
19
+ for point in polygon_kdb.each_point_hole(hole_idx):
20
+ hole_coords.append((gf.kcl.to_um(point.x), gf.kcl.to_um(point.y)))
21
+ holes.append(hole_coords)
22
+
23
+
24
+ # Create Shapely polygon
25
+ if holes:
26
+ polygon = Polygon(exterior_coords, holes)
27
+ else:
28
+ polygon = Polygon(exterior_coords)
29
+ polygons.append(polygon)
30
+
31
+ return MultiPolygon(polygons)
@@ -224,10 +224,7 @@ def run_capacitive_simulation_elmer(
224
224
  else:
225
225
  prisms = get_meshwell_prisms(
226
226
  component=component,
227
- type="3D",
228
- filename=simulation_folder / filename,
229
227
  layer_stack=layer_stack,
230
- n_threads=n_processes,
231
228
  )
232
229
  cad(
233
230
  entities_list=prisms,
@@ -263,7 +260,7 @@ def run_capacitive_simulation_elmer(
263
260
  # Signals are converted to Elmer Boundary Conditions
264
261
  ground_layers = {
265
262
  next(k for k, v in layer_stack.layers.items() if v.layer == port.layer)
266
- for port in component.get_ports()
263
+ for port in component.ports
267
264
  } # ports allowed only on metal
268
265
  metal_surfaces = [
269
266
  e for e in mesh_surface_entities if any(ground in e for ground in ground_layers)
@@ -286,9 +286,10 @@ class MEOW:
286
286
  """Convert LayerStack to meow extrusions."""
287
287
  extrusions = {}
288
288
  for layer in self.layer_stack.layers.values():
289
- if layer.layer not in extrusions.keys():
290
- extrusions[layer.layer] = []
291
- extrusions[layer.layer].append(
289
+ layer_tuple = gf.get_layer_tuple((layer.derived_layer or layer.layer).layer)
290
+ if layer_tuple not in extrusions.keys():
291
+ extrusions[layer_tuple] = []
292
+ extrusions[layer_tuple].append(
292
293
  mw.GdsExtrusionRule(
293
294
  material=self.gf_material_to_meow_material(
294
295
  layer.material,
@@ -1,41 +1,13 @@
1
1
  import gdsfactory as gf
2
2
  from meshwell.polyprism import PolyPrism
3
- from typing import List, Dict
3
+ from typing import List, Dict, Literal
4
4
  from shapely.geometry import Polygon, MultiPolygon
5
5
  import math
6
6
  import kfactory as kf
7
7
  from gdsfactory.add_padding import add_padding_container, add_padding
8
8
  from functools import partial
9
9
  from gdsfactory.generic_tech.layer_map import LAYER
10
- from typing import Literal
11
-
12
-
13
- def region_to_shapely_polygons(region: kf.kdb.Region) -> List[Polygon]:
14
- """Convert a kfactory Region to a list of Shapely polygons."""
15
- polygons = []
16
- for polygon_kdb in region.each():
17
- # Extract exterior coordinates
18
- exterior_coords = []
19
- for point in polygon_kdb.each_point_hull():
20
- exterior_coords.append((gf.kcl.to_um(point.x), gf.kcl.to_um(point.y)))
21
-
22
- # Extract hole coordinates
23
- holes = []
24
- for hole_idx in range(polygon_kdb.holes()):
25
- hole_coords = []
26
- hole = polygon_kdb.hole(hole_idx)
27
- for point in hole.each_point():
28
- hole_coords.append((gf.kcl.to_um(point.x), gf.kcl.to_um(point.y)))
29
- holes.append(hole_coords)
30
-
31
- # Create Shapely polygon
32
- if holes:
33
- polygon = Polygon(exterior_coords, holes)
34
- else:
35
- polygon = Polygon(exterior_coords)
36
- polygons.append(polygon)
37
-
38
- return MultiPolygon(polygons)
10
+ from gplugins.common.utils.geometry import region_to_shapely_polygons
39
11
 
40
12
 
41
13
  def build_buffer_dict_from_layer_level(
@@ -132,25 +104,27 @@ def get_meshwell_prisms(
132
104
 
133
105
  return prisms
134
106
 
135
-
136
107
  if __name__ == "__main__":
137
- from gdsfactory.components import ge_detector_straight_si_contacts
108
+ from gdsfactory.components import ge_detector_straight_si_contacts, add_frame
138
109
  from gdsfactory.generic_tech.layer_stack import get_layer_stack
139
110
  from gdsfactory.generic_tech.layer_map import LAYER
140
111
  from meshwell.cad import cad
141
112
  from meshwell.mesh import mesh
142
113
 
143
- prisms = get_meshwell_prisms(
144
- component=ge_detector_straight_si_contacts(),
145
- layer_stack=get_layer_stack(sidewall_angle_wg=0),
146
- name_by="layer",
147
- )
148
-
149
- cad(entities_list=prisms, output_file="meshwell_prisms_3D.xao")
150
- mesh(
151
- input_file="meshwell_prisms_3D.xao",
152
- output_file="meshwell_prisms_3D.msh",
153
- default_characteristic_length=1000,
154
- dim=3,
155
- verbosity=10,
156
- )
114
+
115
+ for component in [ge_detector_straight_si_contacts, add_frame]:
116
+ c = component()
117
+ prisms = get_meshwell_prisms(
118
+ component=c,
119
+ layer_stack=get_layer_stack(sidewall_angle_wg=0),
120
+ name_by="layer",
121
+ )
122
+
123
+ cad(entities_list=prisms, output_file=f"meshwell_prisms_3D_{c.name}.xao")
124
+ mesh(
125
+ input_file=f"meshwell_prisms_3D_{c.name}.xao",
126
+ output_file=f"meshwell_prisms_3D_{c.name}.msh",
127
+ default_characteristic_length=1000,
128
+ dim=3,
129
+ verbosity=10,
130
+ )
@@ -11,125 +11,7 @@ from functools import partial
11
11
  from gdsfactory.generic_tech.layer_map import LAYER
12
12
  from typing import Literal
13
13
  import numpy as np
14
-
15
-
16
- def region_to_shapely_polygons(region: kf.kdb.Region) -> List[Polygon]:
17
- """Convert a kfactory Region to a list of Shapely polygons."""
18
- polygons = []
19
- for polygon_kdb in region.each():
20
- # Extract exterior coordinates
21
- exterior_coords = []
22
- for point in polygon_kdb.each_point_hull():
23
- exterior_coords.append((gf.kcl.to_um(point.x), gf.kcl.to_um(point.y)))
24
-
25
- # Extract hole coordinates
26
- holes = []
27
- for hole_idx in range(polygon_kdb.holes()):
28
- hole_coords = []
29
- hole = polygon_kdb.hole(hole_idx)
30
- for point in hole.each_point():
31
- hole_coords.append((gf.kcl.to_um(point.x), gf.kcl.to_um(point.y)))
32
- holes.append(hole_coords)
33
-
34
- # Create Shapely polygon
35
- if holes:
36
- polygon = Polygon(exterior_coords, holes)
37
- else:
38
- polygon = Polygon(exterior_coords)
39
- polygons.append(polygon)
40
-
41
- return MultiPolygon(polygons)
42
-
43
-
44
- def build_buffer_dict_from_layer_level(layer_level: gf.technology.LayerLevel) -> Dict[float, float]:
45
- """Build buffer dictionary from LayerLevel properties."""
46
- zmin = layer_level.zmin
47
- zmax = zmin + layer_level.thickness
48
-
49
- # Priority 1: z_to_bias if available
50
- if layer_level.z_to_bias is not None:
51
- z_values, bias_values = layer_level.z_to_bias
52
- return dict(zip(z_values, bias_values))
53
-
54
- # Priority 2: Handle sidewall angle
55
- if layer_level.sidewall_angle != 0.0:
56
- angle_rad = math.radians(layer_level.sidewall_angle)
57
- height = layer_level.thickness
58
- width_to_z = layer_level.width_to_z
59
-
60
- # Calculate buffer change due to sidewall angle
61
- # Positive angle means outward sloping, negative means inward
62
- buffer_change = height * math.tan(angle_rad)
63
-
64
- if width_to_z == 0.0: # Reference at bottom
65
- bottom_buffer = 0.0
66
- top_buffer = buffer_change
67
- elif width_to_z == 1.0: # Reference at top
68
- bottom_buffer = -buffer_change
69
- top_buffer = 0.0
70
- else: # Reference somewhere in middle
71
- ref_height = height * width_to_z
72
- bottom_buffer = -ref_height * math.tan(angle_rad)
73
- top_buffer = (height - ref_height) * math.tan(angle_rad)
74
-
75
- return {zmin: bottom_buffer, zmax: top_buffer}
76
-
77
- # Default: Simple extrusion
78
- return {zmin: 0.0, zmax: 0.0}
79
-
80
-
81
- def get_meshwell_prisms(
82
- component: gf.Component,
83
- layer_stack: gf.technology.LayerStack,
84
- wafer_layer: gf.typings.Layer | None = LAYER.WAFER,
85
- wafer_padding: float | None = 0.0,
86
- name_by: Literal["layer", "material"] = "layer"
87
- ) -> List[PolyPrism]:
88
- """Convert LayerStack + Component to meshwell PolyPrism objects."""
89
- prisms = []
90
-
91
- if wafer_padding is not None and wafer_layer is not None:
92
- component = add_padding_container(component=component, function=partial(add_padding, layers=(wafer_layer,), default=wafer_padding))
93
-
94
- # Iterate through each layer in the stack
95
- for layer_name, layer_level in layer_stack.layers.items():
96
-
97
- # Get shapes for this layer from the component
98
- region = layer_level.layer.get_shapes(component)
99
-
100
- # Skip if no shapes found
101
- if region.is_empty():
102
- continue
103
-
104
- # Convert kfactory Region to Shapely polygons
105
- shapely_polygons = region_to_shapely_polygons(region)
106
-
107
- # Skip if no valid polygons
108
- if not shapely_polygons:
109
- continue
110
-
111
- # Build buffer dictionary from layer level properties
112
- buffers = build_buffer_dict_from_layer_level(layer_level)
113
-
114
- # Create PolyPrism object
115
- if name_by == "layer":
116
- physical_name = layer_name
117
- elif name_by == "material":
118
- physical_name = layer_level.material
119
- else:
120
- raise ValueError("name_by must be 'layer' or 'material'")
121
- prism = PolyPrism(
122
- polygons=shapely_polygons,
123
- buffers=buffers,
124
- physical_name=physical_name,
125
- mesh_order=layer_level.mesh_order,
126
- mesh_bool=True,
127
- additive=False
128
- )
129
-
130
- prisms.append(prism)
131
-
132
- return prisms
14
+ from gplugins.common.utils.geometry import region_to_shapely_polygons
133
15
 
134
16
 
135
17
  def get_u_bounds_polygons(
@@ -0,0 +1,69 @@
1
+ import pytest
2
+ import gdsfactory as gf
3
+
4
+
5
+ from gdsfactory.components import bend_circular, add_frame
6
+ from gdsfactory.generic_tech.layer_stack import get_layer_stack
7
+ from meshwell.cad import cad
8
+ from meshwell.mesh import mesh
9
+ from pathlib import Path
10
+ from tempfile import TemporaryDirectory
11
+ from gplugins.meshwell import (
12
+ get_meshwell_prisms, get_meshwell_cross_section
13
+ )
14
+ from shapely.geometry import LineString
15
+
16
+ @pytest.mark.parametrize("component", [(bend_circular), (add_frame)])
17
+ def test_prisms(component) -> None:
18
+ prisms = get_meshwell_prisms(
19
+ component=component(),
20
+ layer_stack=get_layer_stack(sidewall_angle_wg=0),
21
+ name_by="layer",
22
+ )
23
+
24
+ with TemporaryDirectory() as tmp_dir:
25
+ xao_file = Path(tmp_dir) / "meshwell_prisms_3D.xao"
26
+ msh_file = Path(tmp_dir) / "meshwell_prisms_3D.msh"
27
+ cad(entities_list=prisms, output_file=xao_file)
28
+ mesh(
29
+ input_file=xao_file,
30
+ output_file=msh_file,
31
+ default_characteristic_length=1000,
32
+ dim=3,
33
+ verbosity=10,
34
+ )
35
+
36
+
37
+ def test_prisms_empty_component() -> None:
38
+ """Test that get_meshwell_prisms handles empty components gracefully."""
39
+ c = gf.Component()
40
+ prisms = get_meshwell_prisms(
41
+ component=c,
42
+ layer_stack=get_layer_stack(sidewall_angle_wg=0),
43
+ name_by="layer",
44
+ wafer_padding=None,
45
+ )
46
+ assert len(prisms) == 0
47
+
48
+
49
+ @pytest.mark.parametrize("component", [(bend_circular), (add_frame)])
50
+ def test_cross_section(component) -> None:
51
+ cross_section_line = LineString([(4, -15), (4, 15)])
52
+ surfaces = get_meshwell_cross_section(
53
+ component=component(),
54
+ line=cross_section_line,
55
+ layer_stack=get_layer_stack(sidewall_angle_wg=0),
56
+ name_by="layer",
57
+ )
58
+
59
+ with TemporaryDirectory() as tmp_dir:
60
+ xao_file = Path(tmp_dir) / "meshwell_prisms_3D.xao"
61
+ msh_file = Path(tmp_dir) / "meshwell_prisms_3D.msh"
62
+ cad(entities_list=surfaces, output_file=xao_file)
63
+ mesh(
64
+ input_file=xao_file,
65
+ output_file=msh_file,
66
+ default_characteristic_length=1000,
67
+ dim=2,
68
+ verbosity=10,
69
+ )
@@ -246,6 +246,19 @@ def run_capacitive_simulation_palace(
246
246
 
247
247
  .. _Palace: https://github.com/awslabs/palace
248
248
  """
249
+ if not isinstance(n_processes, int):
250
+ raise TypeError(f"n_processes must be an integer, got {type(n_processes)}")
251
+ if n_processes < 1:
252
+ raise ValueError(f"n_processes must be >= 1, got {n_processes}")
253
+
254
+ if solver_config:
255
+ order = solver_config.get("Order")
256
+ if order is not None:
257
+ if not isinstance(order, int):
258
+ raise TypeError(f"Solver Order must be an integer, got {type(order)}")
259
+ if order < 1:
260
+ raise ValueError(f"Solver Order must be >= 1, got {order}")
261
+
249
262
  if layer_stack is None:
250
263
  layer_stack = LayerStack(
251
264
  layers={
@@ -63,17 +63,17 @@ def get_reasonable_mesh_parameters_capacitance(c: Component):
63
63
  # port_names=[port.name for port in c.ports],
64
64
  default_characteristic_length=50,
65
65
  resolution_specs={
66
- "bw": [ConstantInField(resolution=10, apply_to="surfaces")],
66
+ "bw": [ConstantInField(resolution=100, apply_to="surfaces")],
67
67
  "substrate": [
68
- ConstantInField(resolution=20, apply_to="curves"),
69
- ConstantInField(resolution=15, apply_to="surfaces"),
70
- ConstantInField(resolution=30, apply_to="volumes"),
68
+ ConstantInField(resolution=200, apply_to="curves"),
69
+ ConstantInField(resolution=150, apply_to="surfaces"),
70
+ ConstantInField(resolution=300, apply_to="volumes"),
71
71
  ],
72
- "vacuum": [ConstantInField(resolution=20, apply_to="surfaces")],
72
+ "vacuum": [ConstantInField(resolution=200, apply_to="surfaces")],
73
73
  **{
74
74
  f"bw@{port.name}___substrate": [
75
75
  ThresholdField(
76
- sizemin=2, distmin=4, distmax=30, sizemax=10, apply_to="curves"
76
+ sizemin=20, distmin=4, distmax=30, sizemax=100, apply_to="curves"
77
77
  )
78
78
  ]
79
79
  # Older style:
@@ -90,40 +90,69 @@ def get_reasonable_mesh_parameters_capacitance(c: Component):
90
90
  )
91
91
 
92
92
 
93
- def test_palace_capacitance_simulation_runs(geometry) -> None:
94
- c = geometry
95
- run_capacitive_simulation_palace(
96
- c,
93
+ def test_palace_capacitance_simulation_runs(geometry, tmp_path) -> None:
94
+ results = run_capacitive_simulation_palace(
95
+ geometry,
97
96
  layer_stack=layer_stack,
98
97
  material_spec=material_spec,
99
- mesh_parameters=get_reasonable_mesh_parameters_capacitance(c),
98
+ mesh_parameters=get_reasonable_mesh_parameters_capacitance(geometry),
99
+ simulation_folder=tmp_path,
100
100
  )
101
+ assert results.capacitance_matrix
102
+ assert results.mesh_location
103
+ assert results.field_file_location
101
104
 
102
105
 
103
106
  @pytest.mark.parametrize("n_processes", [(1), (2), (4)])
104
107
  def test_palace_capacitance_simulation_n_processes(geometry, n_processes) -> None:
105
- c = geometry
106
108
  run_capacitive_simulation_palace(
107
- c,
109
+ geometry,
108
110
  layer_stack=layer_stack,
109
111
  material_spec=material_spec,
110
112
  n_processes=n_processes,
111
- mesh_parameters=get_reasonable_mesh_parameters_capacitance(c),
113
+ mesh_parameters=get_reasonable_mesh_parameters_capacitance(geometry),
112
114
  )
113
115
 
114
116
 
117
+ @pytest.mark.parametrize("invalid_n_processes", [0, -1, -5, 1.5, "two", None])
118
+ def test_palace_capacitance_simulation_invalid_n_processes(
119
+ geometry, invalid_n_processes
120
+ ) -> None:
121
+ with pytest.raises((ValueError, TypeError)):
122
+ run_capacitive_simulation_palace(
123
+ geometry,
124
+ layer_stack=layer_stack,
125
+ material_spec=material_spec,
126
+ mesh_parameters=get_reasonable_mesh_parameters_capacitance(geometry),
127
+ n_processes=invalid_n_processes,
128
+ )
129
+
130
+
115
131
  @pytest.mark.parametrize("element_order", [(1), (2), (3)])
116
132
  def test_palace_capacitance_simulation_element_order(geometry, element_order) -> None:
117
- c = geometry
118
133
  run_capacitive_simulation_palace(
119
- c,
134
+ geometry,
120
135
  layer_stack=layer_stack,
121
136
  material_spec=material_spec,
122
137
  solver_config={"Order": element_order},
123
- mesh_parameters=get_reasonable_mesh_parameters_capacitance(c),
138
+ mesh_parameters=get_reasonable_mesh_parameters_capacitance(geometry),
124
139
  )
125
140
 
126
141
 
142
+ @pytest.mark.parametrize("invalid_element_order", [0, -1, 1.5, "two"])
143
+ def test_palace_capacitance_simulation_invalid_element_order(
144
+ geometry, invalid_element_order
145
+ ) -> None:
146
+ with pytest.raises((ValueError, TypeError)):
147
+ run_capacitive_simulation_palace(
148
+ geometry,
149
+ layer_stack=layer_stack,
150
+ material_spec=material_spec,
151
+ solver_config={"Order": invalid_element_order},
152
+ mesh_parameters=get_reasonable_mesh_parameters_capacitance(geometry),
153
+ )
154
+
155
+
127
156
  @pytest.mark.skip(reason="TODO")
128
157
  def test_palace_capacitance_simulation_mesh_size_field(geometry) -> None:
129
158
  pass
@@ -25,7 +25,7 @@ license = {file = "LICENSE"}
25
25
  name = "gplugins"
26
26
  readme = "README.md"
27
27
  requires-python = ">=3.11"
28
- version = "2.0.0"
28
+ version = "2.0.1"
29
29
 
30
30
  [project.optional-dependencies]
31
31
  dev = [
@@ -51,10 +51,10 @@ gfviz = ["jinja2", "fastapi", "shapely", "natsort"]
51
51
  klayout = ["klayout", "pyvis<=0.3.1", "vlsir", "vlsirtools", "gitpython"]
52
52
  luminescent = ["luminescent>=0.2.12,<0.4.0", "sortedcontainers"]
53
53
  maintainer = ["mypy", "tbump", "towncrier"]
54
- meow = ["meow-sim>=0.14.1,<0.15", "sax>=0.15.6,<0.16.0", "tidy3d>=2.8.2,<2.9"]
54
+ meow = ["meow-sim>=0.14.1,<0.15", "sax~=0.16.3", "tidy3d>=2.8.2,<2.9"]
55
55
  meshwell = ["shapely", "meshwell~=2.1.1"]
56
56
  path_length_analysis = ["bokeh", "numba", "shapely"]
57
- sax = ["sax~=0.15.14"]
57
+ sax = ["sax~=0.16.3"]
58
58
  schematic = ["bokeh", "ipywidgets", "natsort"]
59
59
  tidy3d = ["tidy3d>=2.8.2,<2.9", "gdstk"]
60
60
  vlsir = ["vlsir", "vlsirtools"]
@@ -178,7 +178,7 @@ message_template = "Bump to {new_version}"
178
178
  tag_template = "v{new_version}"
179
179
 
180
180
  [tool.tbump.version]
181
- current = "2.0.0"
181
+ current = "2.0.1"
182
182
  regex = '''
183
183
  (?P<major>\d+)
184
184
  \.
File without changes