gplugins 1.3.3__tar.gz → 1.3.5__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 (251) hide show
  1. {gplugins-1.3.3 → gplugins-1.3.5}/PKG-INFO +4 -4
  2. {gplugins-1.3.3 → gplugins-1.3.5}/README.md +1 -1
  3. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/__init__.py +1 -1
  4. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/base_models/component.py +18 -7
  5. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/netlist.py +13 -3
  6. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/get_meep_geometry.py +38 -13
  7. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/get_simulation.py +2 -6
  8. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/meep_adjoint_optimization.py +5 -3
  9. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/write_sparameters_meep.py +3 -1
  10. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/write_sparameters_meep_mpi.py +1 -1
  11. {gplugins-1.3.3 → gplugins-1.3.5}/pyproject.toml +4 -5
  12. gplugins-1.3.3/gplugins/common/utils/get_component_with_local_layers.py +0 -128
  13. {gplugins-1.3.3 → gplugins-1.3.5}/LICENSE +0 -0
  14. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/__init__.py +0 -0
  15. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/base_models/__init__.py +0 -0
  16. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/base_models/simulation.py +0 -0
  17. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/config.py +0 -0
  18. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/types.py +0 -0
  19. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/__init__.py +0 -0
  20. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/add_simulation_markers.py +0 -0
  21. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/async_helpers.py +0 -0
  22. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/cache.py +0 -0
  23. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/convert_sparameters.py +0 -0
  24. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/disable_print.py +0 -0
  25. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/get_capacitance.py +0 -0
  26. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/get_component_with_net_layers.py +0 -0
  27. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/get_effective_indices.py +0 -0
  28. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/get_scattering.py +0 -0
  29. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/get_sparameters_path.py +0 -0
  30. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/optical_constants.py +0 -0
  31. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/parse_layer_stack.py +0 -0
  32. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/plot.py +0 -0
  33. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/plot_csv.py +0 -0
  34. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/port_symmetries.py +0 -0
  35. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/common/utils/tests/test_get_component_with_new_port_layers.py +0 -0
  36. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/devsim/__init__.py +0 -0
  37. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/devsim/doping.py +0 -0
  38. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/devsim/get_simulation.py +0 -0
  39. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/devsim/get_simulation_xsection.py +0 -0
  40. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/devsim/get_solver.py +0 -0
  41. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/devsim/test_devsim.py +0 -0
  42. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/elmer/__init__.py +0 -0
  43. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/elmer/electrostatic.sif.j2 +0 -0
  44. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/elmer/get_capacitance.py +0 -0
  45. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/elmer/tests/test_elmer.py +0 -0
  46. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/fdtdz/__init__.py +0 -0
  47. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/fdtdz/get_epsilon_fdtdz.py +0 -0
  48. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/fdtdz/get_ports_fdtdz.py +0 -0
  49. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/fdtdz/get_sparameters_fdtdz.py +0 -0
  50. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/femwell/__init__.py +0 -0
  51. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/femwell/mode_solver.py +0 -0
  52. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/femwell/solve_thermal.py +0 -0
  53. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/femwell/test_mode_solver.py +0 -0
  54. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/Makefile +0 -0
  55. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/__init__.py +0 -0
  56. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/b64.py +0 -0
  57. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/gfviz.py +0 -0
  58. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/serve.py +0 -0
  59. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/static/b64.js +0 -0
  60. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/static/schemedit.js +0 -0
  61. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/static/schemedit.wasm +0 -0
  62. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/templates/example.json +0 -0
  63. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gfviz/templates/index.html +0 -0
  64. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/__init__.py +0 -0
  65. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/get_material.py +0 -0
  66. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/get_port_eigenmode.py +0 -0
  67. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/get_simulation_grating_farfield.py +0 -0
  68. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/get_simulation_grating_fiber.py +0 -0
  69. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_eigenmode.py +0 -0
  70. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_materials.py +0 -0
  71. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_crossing.csv +0 -0
  72. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_straight.csv +0 -0
  73. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_crossing.csv +0 -0
  74. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_straight.csv +0 -0
  75. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_symmetries_straight.csv +0 -0
  76. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi.csv +0 -0
  77. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi_pool.csv +0 -0
  78. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_crossing_symmetric.csv +0 -0
  79. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight.csv +0 -0
  80. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_batch.csv +0 -0
  81. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi.csv +0 -0
  82. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi_pool.csv +0 -0
  83. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_symmetric.csv +0 -0
  84. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/test_write_sparameters_meep.py +0 -0
  85. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/write_sparameters_grating.py +0 -0
  86. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmeep/write_sparameters_meep_batch.py +0 -0
  87. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/__init__.py +0 -0
  88. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/define_polysurfaces.py +0 -0
  89. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/get_mesh.py +0 -0
  90. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/parse_component.py +0 -0
  91. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/parse_gds.py +0 -0
  92. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/tests/test_custom_names.py +0 -0
  93. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/tests/test_meshing_2D.py +0 -0
  94. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/tests/test_meshing_3D.py +0 -0
  95. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/uz_xsection_mesh.py +0 -0
  96. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/xy_xsection_mesh.py +0 -0
  97. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/gmsh/xyz_mesh.py +0 -0
  98. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/__init__.py +0 -0
  99. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/dataprep/__init__.py +0 -0
  100. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/dataprep/regions.py +0 -0
  101. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/drc/__init__.py +0 -0
  102. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/drc/check_duplicated_cells.py +0 -0
  103. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/drc/check_exclusion.py +0 -0
  104. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/drc/check_inclusion.py +0 -0
  105. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/drc/check_space.py +0 -0
  106. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/drc/check_width.py +0 -0
  107. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/drc/count_drc.py +0 -0
  108. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/drc/samples/drc_errors.py +0 -0
  109. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/drc/write_drc.py +0 -0
  110. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/get_density.py +0 -0
  111. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/get_netlist.py +0 -0
  112. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/netlist_graph.py +0 -0
  113. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/netlist_spice_reader.py +0 -0
  114. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/plot_nets.py +0 -0
  115. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/tests/test_dataprep_regions.py +0 -0
  116. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/tests/test_density.py +0 -0
  117. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/tests/test_drc_exclusion.py +0 -0
  118. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/tests/test_drc_inclusion.py +0 -0
  119. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/tests/test_drc_space.py +0 -0
  120. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/tests/test_drc_width.py +0 -0
  121. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/tests/test_global_density.py +0 -0
  122. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/tests/test_netlist_spice_reader.py +0 -0
  123. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/klayout/tests/test_plot_nets.py +0 -0
  124. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/README.md +0 -0
  125. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/__init__.py +0 -0
  126. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/interconnect.py +0 -0
  127. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/mapping_ubcpdk.yml +0 -0
  128. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/read.py +0 -0
  129. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/settings.py +0 -0
  130. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/tests/test_lumerical_read_sparameters.py +0 -0
  131. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/tests/test_netlist.py +0 -0
  132. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/tests/test_netlist_get_routes.py +0 -0
  133. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/write_sparameters_lumerical.py +0 -0
  134. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/lumerical/write_sparameters_lumerical_components.py +0 -0
  135. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/materials/__init__.py +0 -0
  136. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/materials/inorganic.py +0 -0
  137. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/materials/optical/__init__.py +0 -0
  138. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/materials/optical/optical_mat.py +0 -0
  139. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/materials/optical/refractive_index_info.py +0 -0
  140. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/materials/semiconductor/__init__.py +0 -0
  141. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/materials/semiconductor/semiconductor_mat.py +0 -0
  142. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/meow/__init__.py +0 -0
  143. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/meow/meow_eme.py +0 -0
  144. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/meow/test_meow_simulation.py +0 -0
  145. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/__init__.py +0 -0
  146. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/coupler.py +0 -0
  147. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/find_coupling_vs_gap.py +0 -0
  148. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/find_mode_dispersion.py +0 -0
  149. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/find_modes.py +0 -0
  150. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/find_modes_cross_section.py +0 -0
  151. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/find_neff_ng_dw_dh.py +0 -0
  152. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/find_neff_vs_width.py +0 -0
  153. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/get_mode_solver_coupler.py +0 -0
  154. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/get_mode_solver_cross_section.py +0 -0
  155. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/get_mode_solver_rib.py +0 -0
  156. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/modes/neff_vs_width_nitride.csv +0 -0
  157. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/modes/neff_vs_width_rib.csv +0 -0
  158. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/modes/neff_vs_width_strip.csv +0 -0
  159. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/neff_convergence_test.py +0 -0
  160. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/neff_vs_width.csv +0 -0
  161. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/overlap.py +0 -0
  162. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/tests/test_dw_dh/test_dw_dh.csv +0 -0
  163. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/tests/test_dw_dh/test_dw_dh.obtained.csv +0 -0
  164. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/tests/test_dw_dh/test_dw_dh_dispersion.csv +0 -0
  165. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/tests/test_dw_dh.py +0 -0
  166. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/tests/test_find_modes.py +0 -0
  167. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/tests/test_find_modes_dispersion.py +0 -0
  168. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.csv +0 -0
  169. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.obtained.csv +0 -0
  170. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/tests/test_neff_vs_width.py +0 -0
  171. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/types.py +0 -0
  172. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/modes/waveguide.py +0 -0
  173. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/palace/__init__.py +0 -0
  174. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/palace/driven.json +0 -0
  175. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/palace/electrostatic.json +0 -0
  176. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/palace/get_capacitance.py +0 -0
  177. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/palace/get_scattering.py +0 -0
  178. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/palace/tests/test_palace.py +0 -0
  179. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/path_length_analysis/__init__.py +0 -0
  180. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/path_length_analysis/path_length_analysis.py +0 -0
  181. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/path_length_analysis/path_length_analysis_from_gds.py +0 -0
  182. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/path_length_analysis/test_pathlength_extraction.py +0 -0
  183. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/photonic_circuit_models/__init__.py +0 -0
  184. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/photonic_circuit_models/coupler.py +0 -0
  185. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/photonic_circuit_models/fsr.py +0 -0
  186. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/photonic_circuit_models/heater.py +0 -0
  187. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/photonic_circuit_models/mzi.py +0 -0
  188. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/photonic_circuit_models/ring.py +0 -0
  189. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/process/__init__.py +0 -0
  190. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/process/diffusion.py +0 -0
  191. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/process/implant_tables.py +0 -0
  192. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/process/pysrim.py +0 -0
  193. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/process/silicon.py +0 -0
  194. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/process/skew/antimony_si_skew.csv +0 -0
  195. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/process/skew/arsenic_si_skew.csv +0 -0
  196. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/process/skew/boron_si_skew.csv +0 -0
  197. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/process/skew/phosphorus_si_skew.csv +0 -0
  198. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/__init__.py +0 -0
  199. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/build_model.py +0 -0
  200. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/integrations/__init__.py +0 -0
  201. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/integrations/femwell_waveguide_model.py +0 -0
  202. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/integrations/meep_FDTD_model.py +0 -0
  203. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/integrations/meow_eme_model.py +0 -0
  204. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/interpolators.py +0 -0
  205. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/mlp.py +0 -0
  206. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/models.py +0 -0
  207. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/parameter.py +0 -0
  208. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/plot_model.py +0 -0
  209. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/read.py +0 -0
  210. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/tests/test_mzi.py +0 -0
  211. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.obtained.yml +0 -0
  212. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.yml +0 -0
  213. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/tests/test_mzi_lattice.py +0 -0
  214. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sax/tests/test_parameters.py +0 -0
  215. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sentaurus/mask_sde.py +0 -0
  216. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sentaurus/mask_sprocess.py +0 -0
  217. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sentaurus/sde.py +0 -0
  218. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sentaurus/sdevice.py +0 -0
  219. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sentaurus/sprocess.py +0 -0
  220. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/sentaurus/svisual.py +0 -0
  221. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/spice/__init__.py +0 -0
  222. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/spice/spice_to_yaml.py +0 -0
  223. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/spice/tests/__init__.py +0 -0
  224. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/spice/tests/test_interconnect.py +0 -0
  225. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/__init__.py +0 -0
  226. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/component.py +0 -0
  227. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/get_results.py +0 -0
  228. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/get_simulation_grating_coupler.py +0 -0
  229. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/materials.py +0 -0
  230. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/modes.py +0 -0
  231. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/test_component_modeler.py +0 -0
  232. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/test_materials.py +0 -0
  233. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/test_modes/test_sweep_width.csv +0 -0
  234. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/test_modes/test_sweep_width.obtained.csv +0 -0
  235. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/test_modes_coupler.py +0 -0
  236. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/test_modes_waveguide.py +0 -0
  237. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/test_plot_simulation_grating_coupler.py +0 -0
  238. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/test_write_sparameters.py +0 -0
  239. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/tests_sparameters/sim_ref.yaml +0 -0
  240. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters.py +0 -0
  241. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters_grating_coupler.py +0 -0
  242. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/types.py +0 -0
  243. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/util.py +0 -0
  244. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/tidy3d/write_sparameters_grating_coupler.py +0 -0
  245. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/typings.py +0 -0
  246. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/vlsir/__init__.py +0 -0
  247. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/vlsir/export_netlist.py +0 -0
  248. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/vlsir/tests/resources/pads_correct.cir +0 -0
  249. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/vlsir/tests/resources/pads_correct.scs +0 -0
  250. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/vlsir/tests/resources/pads_correct.sp +0 -0
  251. {gplugins-1.3.3 → gplugins-1.3.5}/gplugins/vlsir/tests/test_vlsir.py +0 -0
@@ -1,19 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gplugins
3
- Version: 1.3.3
3
+ Version: 1.3.5
4
4
  Summary: gdsfactory plugins
5
5
  Keywords: python
6
6
  Author-email: gdsfactory <contact@gdsfactory.com>
7
7
  Requires-Python: >=3.11
8
8
  Description-Content-Type: text/markdown
9
- Classifier: Programming Language :: Python :: 3.10
10
9
  Classifier: Programming Language :: Python :: 3.11
11
10
  Classifier: Programming Language :: Python :: 3.12
11
+ Classifier: Programming Language :: Python :: 3.13
12
12
  Classifier: Operating System :: OS Independent
13
13
  License-File: LICENSE
14
14
  Requires-Dist: gdsfactory>=9.3.5
15
15
  Requires-Dist: pint
16
- Requires-Dist: gdstk
17
16
  Requires-Dist: tqdm
18
17
  Requires-Dist: numpy
19
18
  Requires-Dist: xarray==2025.1.2
@@ -73,6 +72,7 @@ Requires-Dist: tidy3d>=2.8.2,<2.9 ; extra == "tidy3d"
73
72
  Requires-Dist: meshio ; extra == "tidy3d"
74
73
  Requires-Dist: numpy ; extra == "tidy3d"
75
74
  Requires-Dist: meshwell~=1.0.7 ; extra == "tidy3d"
75
+ Requires-Dist: gdstk ; extra == "tidy3d"
76
76
  Requires-Dist: vlsir ; extra == "vlsir"
77
77
  Requires-Dist: vlsirtools ; extra == "vlsir"
78
78
  Provides-Extra: dev
@@ -90,7 +90,7 @@ Provides-Extra: schematic
90
90
  Provides-Extra: tidy3d
91
91
  Provides-Extra: vlsir
92
92
 
93
- # gplugins 1.3.3
93
+ # gplugins 1.3.5
94
94
 
95
95
  [![docs](https://github.com/gdsfactory/gplugins/actions/workflows/pages.yml/badge.svg)](https://gdsfactory.github.io/gplugins/)
96
96
  [![PyPI](https://img.shields.io/pypi/v/gplugins)](https://pypi.org/project/gplugins/)
@@ -1,4 +1,4 @@
1
- # gplugins 1.3.3
1
+ # gplugins 1.3.5
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__ = "1.3.3"
3
+ __version__ = "1.3.5"
4
4
 
5
5
  import pathlib
6
6
 
@@ -19,6 +19,8 @@ from gplugins.gmsh.parse_gds import cleanup_component
19
19
 
20
20
  from ..types import AnyShapelyPolygon, GFComponent
21
21
 
22
+ from gdsfactory.pdk import get_layer_stack, get_layer, get_layer_name
23
+
22
24
  Coordinate: TypeAlias = tuple[float, float]
23
25
 
24
26
 
@@ -223,13 +225,22 @@ class LayeredComponentBase(BaseModel):
223
225
  )
224
226
 
225
227
  def get_port_layers(self, port: gf.Port) -> tuple[str, ...]:
226
- # FIXME: extract actual layer
227
- # this needs to be a list of all layers and derived layers that are
228
- # associated with the port layer enum
229
- return ("core",)
230
- return tuple(
231
- k for k, v in self.layer_stack.layers.items() if port.layer in v.layer
232
- )
228
+ layer_name = get_layer_name(port.layer)
229
+
230
+ derived_layers = []
231
+ for l_name, level in self.layer_stack.layers.items():
232
+ if layer_name in str(level.layer):
233
+ derived_layers.append(l_name)
234
+
235
+ return derived_layers
236
+
237
+
238
+
239
+
240
+ # return ("core",)
241
+ # return tuple(
242
+ # k for k, v in self.layer_stack.layers.items() if port.layer in v.layer
243
+ # )
233
244
 
234
245
  def get_layer_bbox(
235
246
  self, layername: str
@@ -1,9 +1,9 @@
1
1
  from functools import lru_cache
2
2
 
3
3
  import gdsfactory as gf
4
- import gdstk
5
4
  import numpy as np
6
5
  import shapely.geometry as sg
6
+ import shapely.ops as so
7
7
  from natsort import natsorted
8
8
 
9
9
 
@@ -225,10 +225,12 @@ def get_icon_poly(name):
225
225
  polys = min(polys_priority.items(), key=lambda x: x[0])[1]
226
226
  if not polys:
227
227
  return default
228
- polys = gdstk.boolean(polys, [], operation="or")
228
+ polys = [sg.Polygon(p) for p in polys]
229
+ polys = so.unary_union(polys)
230
+ polys = _extract_vertices(polys)
229
231
  if not polys:
230
232
  return default
231
- poly = rdp(polys[0].points)
233
+ poly = rdp(polys[0])
232
234
  if (poly.shape[0] < 3) or (poly.shape[0] > 100):
233
235
  return default
234
236
  poly = (poly - c.bbox_np()[0:1]) / (c.bbox_np()[1:2] - c.bbox_np()[0:1])
@@ -242,6 +244,14 @@ def get_icon_poly(name):
242
244
  return poly
243
245
 
244
246
 
247
+ def _extract_vertices(geometry):
248
+ if geometry.geom_type == 'Polygon':
249
+ return [list(geometry.exterior.coords)]
250
+ elif geometry.geom_type == 'MultiPolygon':
251
+ return [list(p.exterior.coords) for p in geometry.geoms]
252
+ else:
253
+ raise TypeError(f"Unhandled geometry type: {geometry.geom_type}")
254
+
245
255
  def rdp(poly, eps=0.1):
246
256
  poly = np.asarray(poly)
247
257
  if not poly.shape:
@@ -3,9 +3,13 @@ from __future__ import annotations
3
3
  import gdsfactory as gf
4
4
  import meep as mp
5
5
  import numpy as np
6
- from gdsfactory.pdk import get_layer_stack
6
+ from kfactory import LayerEnum
7
+ from typing import cast
8
+ import shapely
9
+ from gdsfactory.pdk import get_layer_stack, get_layer, get_layer_name
7
10
  from gdsfactory.technology import LayerStack
8
- from gdsfactory.typings import ComponentSpec, CrossSectionSpec
11
+ from gdsfactory.technology import DerivedLayer, LayerStack, LayerViews, LogicalLayer
12
+ from gdsfactory.typings import ComponentSpec, CrossSectionSpec, LayerSpecs
9
13
 
10
14
  from gplugins.common.utils.parse_layer_stack import order_layer_stack
11
15
  from gplugins.gmeep.get_material import get_material
@@ -18,6 +22,7 @@ def get_meep_geometry_from_component(
18
22
  wavelength: float = 1.55,
19
23
  is_3d: bool = False,
20
24
  dispersive: bool = False,
25
+ exclude_layers: LayerSpecs | None = None,
21
26
  **kwargs,
22
27
  ) -> list[mp.GeometricObject]:
23
28
  """Returns Meep geometry from a gdsfactory component.
@@ -32,6 +37,9 @@ def get_meep_geometry_from_component(
32
37
  kwargs: settings.
33
38
  """
34
39
  component = gf.get_component(component=component, **kwargs)
40
+ polygons_per_layer = component.get_polygons_points(merge=True)
41
+
42
+
35
43
  layer_stack = layer_stack or get_layer_stack()
36
44
 
37
45
  layer_to_thickness = layer_stack.get_layer_to_thickness()
@@ -41,24 +49,40 @@ def get_meep_geometry_from_component(
41
49
  component_with_booleans = layer_stack.get_component_with_derived_layers(component)
42
50
 
43
51
  geometry = []
52
+ exclude_layers = exclude_layers or []
44
53
  layer_to_polygons = component_with_booleans.get_polygons_points()
45
54
 
46
- ordered_layer_stack_keys = order_layer_stack(layer_stack)[::-1]
55
+ # ordered_layer_stack_keys = order_layer_stack(layer_stack)[::-1]
56
+
57
+ for level in layer_stack.layers.values():
58
+ layer = level.layer
59
+
60
+ if isinstance(layer, LogicalLayer):
61
+ assert isinstance(layer.layer, tuple | LayerEnum)
62
+ layer_tuple = cast(tuple[int, int], tuple(layer.layer))
63
+ elif isinstance(layer, DerivedLayer):
64
+ assert level.derived_layer is not None
65
+ assert isinstance(level.derived_layer.layer, tuple | LayerEnum)
66
+ layer_tuple = cast(tuple[int, int], tuple(level.derived_layer.layer))
67
+ else:
68
+ raise ValueError(f"Layer {layer!r} is not a DerivedLayer or LogicalLayer")
47
69
 
48
- for layername in ordered_layer_stack_keys:
49
- layer = layer_stack.layers[layername].layer
70
+ layer_index = int(get_layer(layer_tuple))
50
71
 
51
- if layer not in layer_to_polygons:
72
+ if layer_index in exclude_layers:
52
73
  continue
53
- polygons = layer_to_polygons[layer]
54
- print(f"layer: {layer}, polygons: {polygons}")
55
74
 
56
- if layer in layer_to_thickness and layer in layer_to_material:
57
- height = layer_to_thickness[layer] if is_3d else mp.inf
58
- zmin_um = layer_to_zmin[layer] if is_3d else 0
59
- # center = mp.Vector3(0, 0, (zmin_um + height) / 2)
75
+ if layer_index not in polygons_per_layer:
76
+ continue
60
77
 
78
+ zmin = level.zmin
79
+ zmin_um = layer_to_zmin[layer] if is_3d else 0
80
+ if zmin is not None:
81
+ has_polygons = True
82
+ polygons = polygons_per_layer[layer_index]
83
+ height = level.thickness
61
84
  for polygon in polygons:
85
+ p = shapely.geometry.Polygon(polygon)
62
86
  vertices = [mp.Vector3(p[0], p[1], zmin_um) for p in polygon]
63
87
  material_name = layer_to_material[layer]
64
88
 
@@ -80,6 +104,7 @@ def get_meep_geometry_from_component(
80
104
  # center=center
81
105
  )
82
106
  )
107
+
83
108
  return geometry
84
109
 
85
110
 
@@ -163,7 +188,7 @@ if __name__ == "__main__":
163
188
 
164
189
  import gplugins.gmeep as gm
165
190
 
166
- c = gf.components.taper_strip_to_ridge_trenches()
191
+ c = gf.components.straight()
167
192
  sp = gm.write_sparameters_meep(
168
193
  c, run=False, ymargin_top=3, ymargin_bot=3, is_3d=True
169
194
  )
@@ -170,12 +170,8 @@ def get_simulation(
170
170
  else component
171
171
  )
172
172
 
173
- component_extended.show()
174
- # component_extended.flatten()
175
-
176
- # geometry_center = [component_extended.x, component_extended.y]
177
- # geometry_center = [0, 0]
178
- # print(geometry_center)
173
+ component_extended = component_extended.copy()
174
+ component_extended.flatten()
179
175
 
180
176
  layers_thickness = [
181
177
  layer_to_thickness[layer]
@@ -5,7 +5,6 @@ from types import LambdaType
5
5
  from typing import Any
6
6
 
7
7
  import gdsfactory as gf
8
- import nlopt
9
8
  import numpy as np
10
9
  from gdsfactory import Component
11
10
  from gdsfactory.technology import LayerStack
@@ -190,7 +189,7 @@ def run_meep_adjoint_optimizer(
190
189
  cost_function: LambdaType,
191
190
  update_variable: np.ndarray,
192
191
  maximize_cost_function: bool = True,
193
- algorithm: int = nlopt.LD_MMA,
192
+ algorithm_name: str = "LD_MMA",
194
193
  lower_bound: Any = 0,
195
194
  upper_bound: Any = 1,
196
195
  maxeval: int = 10,
@@ -205,7 +204,7 @@ def run_meep_adjoint_optimizer(
205
204
  cost_function: cost function to optimize.
206
205
  update_variable: variable to update the optimization with.
207
206
  maximize_cost_function: if True, maximize the cost function, else minimize it.
208
- algorithm: nlopt algorithm to use (default: nlopt.LD_MMA).
207
+ algorithm_name: nlopt algorithm to use (default: nlopt.LD_MMA).
209
208
  lower_bound: lower bound for the optimization.
210
209
  upper_bound: upper bound for the optimization.
211
210
  maxeval: maximum number of evaluations.
@@ -219,6 +218,9 @@ def run_meep_adjoint_optimizer(
219
218
  threshold_offset_from_max: threshold offset from max eps value.
220
219
  layer: layer to apply to the optimized component.
221
220
  """
221
+ import nlopt
222
+
223
+ algorithm = getattr(nlopt, algorithm_name)
222
224
  solver = nlopt.opt(algorithm, number_of_params)
223
225
  solver.set_lower_bounds(lower_bound)
224
226
  solver.set_upper_bounds(upper_bound)
@@ -19,7 +19,7 @@ from gdsfactory.component import Component
19
19
  from gdsfactory.pdk import get_layer_stack
20
20
  from gdsfactory.serialization import clean_value_json
21
21
  from gdsfactory.technology import LayerStack
22
- from gdsfactory.typings import ComponentSpec, PathType, Port, PortSymmetries
22
+ from gdsfactory.typings import ComponentSpec, PathType, Port, PortSymmetries, LayerSpec
23
23
  from tqdm.auto import tqdm
24
24
 
25
25
  from gplugins.common.utils import port_symmetries
@@ -151,6 +151,7 @@ def write_sparameters_meep(
151
151
  plot_args: dict | None = None,
152
152
  only_return_filepath_sim_settings=False,
153
153
  verbosity: int = 0,
154
+ padding_layers: tuple[LayerSpec, ...] = ("PADDING",),
154
155
  **settings,
155
156
  ) -> dict[str, np.ndarray]:
156
157
  r"""Returns Sparameters and writes them to npz filepath.
@@ -340,6 +341,7 @@ def write_sparameters_meep(
340
341
 
341
342
  component = gf.add_padding_container(
342
343
  component,
344
+ layers=padding_layers,
343
345
  default=0,
344
346
  top=ymargin_top,
345
347
  bottom=ymargin_bot,
@@ -164,7 +164,7 @@ def write_sparameters_meep_mpi(
164
164
  with open(parameters_file, "wb") as outp:
165
165
  pickle.dump(settings, outp, pickle.HIGHEST_PROTOCOL)
166
166
 
167
- # Save component to disk through gds for gdstk compatibility
167
+ # Save component to disk through gds
168
168
  component_file = tempfile.with_suffix(".gds")
169
169
  component.write_gds(component_file, with_metadata=True)
170
170
 
@@ -7,15 +7,14 @@ requires = ["flit_core >=3.2,<4"]
7
7
  [project]
8
8
  authors = [{name = "gdsfactory", email = "contact@gdsfactory.com"}]
9
9
  classifiers = [
10
- "Programming Language :: Python :: 3.10",
11
10
  "Programming Language :: Python :: 3.11",
12
11
  "Programming Language :: Python :: 3.12",
12
+ "Programming Language :: Python :: 3.13",
13
13
  "Operating System :: OS Independent"
14
14
  ]
15
15
  dependencies = [
16
16
  "gdsfactory>=9.3.5",
17
17
  "pint",
18
- "gdstk",
19
18
  "tqdm",
20
19
  "numpy",
21
20
  "xarray==2025.1.2"
@@ -26,7 +25,7 @@ license = {file = "LICENSE"}
26
25
  name = "gplugins"
27
26
  readme = "README.md"
28
27
  requires-python = ">=3.11"
29
- version = "1.3.3"
28
+ version = "1.3.5"
30
29
 
31
30
  [project.optional-dependencies]
32
31
  dev = [
@@ -71,7 +70,7 @@ sax = [
71
70
  "ray"
72
71
  ]
73
72
  schematic = ["bokeh", "ipywidgets", "natsort"]
74
- tidy3d = ["tidy3d>=2.8.2,<2.9", "meshio", "numpy", "meshwell~=1.0.7"]
73
+ tidy3d = ["tidy3d>=2.8.2,<2.9", "meshio", "numpy", "meshwell~=1.0.7", "gdstk"]
75
74
  vlsir = ["vlsir", "vlsirtools"]
76
75
 
77
76
  [tool.codespell]
@@ -193,7 +192,7 @@ message_template = "Bump to {new_version}"
193
192
  tag_template = "v{new_version}"
194
193
 
195
194
  [tool.tbump.version]
196
- current = "1.3.3"
195
+ current = "1.3.5"
197
196
  regex = '''
198
197
  (?P<major>\d+)
199
198
  \.
@@ -1,128 +0,0 @@
1
- import copy
2
- from dataclasses import dataclass
3
-
4
- import gdsfactory as gf
5
- import gdstk
6
- from gdsfactory.component import Component
7
- from gdsfactory.pdk import get_layer
8
- from gdsfactory.typings import Layer
9
- from gdstk import Polygon
10
-
11
-
12
- @dataclass
13
- class LocalMapping:
14
- """Dataclass to map polygons to new layers.
15
-
16
- Arguments:
17
- new_layer_name: new layer name for the updated LayerStack
18
- new_layer_number: new layer number for the updated LayerStack and GDS
19
- old_layer_name: original LayerStack key entry
20
- domains: list of gdstk polygons; Component polygons inside these domains are mapped to new_layer
21
- """
22
-
23
- new_layer_name: str
24
- new_layer_number: Layer
25
- old_layer_name: str
26
- domains: list[Polygon]
27
-
28
-
29
- def get_component_with_local_layers(
30
- component,
31
- layer_stack,
32
- mappings: list[LocalMapping],
33
- precision: float = 1e-4,
34
- ) -> Component:
35
- """Returns a component where polygons within "domains" belonging to "old_layer_name" are remapped to "new_layer_name" (with layer details copied from old_layer), and polygons outside the domain are kept on "old_layer_name".
36
-
37
- Args:
38
- component: to process.
39
- layer_stack: to process.
40
- mappings: list of LocalMapping objects.
41
- precision: of the boolean operations.
42
- """
43
- # Initialize returned component and layerstack
44
- local_component = component.copy()
45
- local_component.flatten()
46
- local_layer_stack = layer_stack.model_copy()
47
-
48
- for mapping in mappings:
49
- # Create the new layer
50
- old_layer_number = layer_stack.layers[mapping.old_layer_name].layer
51
- new_layer = copy.deepcopy(layer_stack.layers[mapping.old_layer_name])
52
- new_layer.layer = mapping.new_layer_number
53
- local_layer_stack.layers[mapping.new_layer_name] = new_layer
54
-
55
- # Assign the polygons
56
- for domain in mapping.domains:
57
- layer_polygons = local_component.get_polygons(by_spec=True)[
58
- old_layer_number
59
- ]
60
- local_component.remove_layers([old_layer_number])
61
- gds_layer, gds_datatype = tuple(get_layer(old_layer_number))
62
- for layer_polygon in layer_polygons:
63
- # Polygons inside the domain
64
- p_inside = gdstk.boolean(
65
- operand1=gdstk.Polygon(layer_polygon),
66
- operand2=domain,
67
- operation="and",
68
- precision=precision,
69
- layer=gds_layer,
70
- datatype=gds_datatype,
71
- )
72
- # Outside the domain
73
- p_outside = gdstk.boolean(
74
- operand1=gdstk.Polygon(layer_polygon),
75
- operand2=domain,
76
- operation="not",
77
- precision=precision,
78
- layer=gds_layer,
79
- datatype=gds_datatype,
80
- )
81
- if p_inside:
82
- local_component.add_polygon(
83
- p_inside, layer=mapping.new_layer_number
84
- )
85
- if p_outside:
86
- local_component.add_polygon(p_outside, layer=old_layer_number)
87
-
88
- return local_component, local_layer_stack
89
-
90
-
91
- if __name__ == "__main__":
92
- c = gf.components.spiral_racetrack_heater_metal()
93
-
94
- layer_stack = gf.generic_tech.LAYER_STACK
95
-
96
- mapping1 = LocalMapping(
97
- new_layer_name="test1",
98
- old_layer_name="heater",
99
- domains=[
100
- gdstk.rectangle(
101
- corner1=(0, -15),
102
- corner2=(10, -60),
103
- ),
104
- gdstk.rectangle(
105
- corner1=(20, -15),
106
- corner2=(30, -60),
107
- ),
108
- ],
109
- new_layer_number=(10002, 0),
110
- )
111
-
112
- mapping2 = LocalMapping(
113
- new_layer_name="test2",
114
- old_layer_name="heater",
115
- domains=[gdstk.ellipse(center=(30, 10), radius=10)],
116
- new_layer_number=(10003, 0),
117
- )
118
-
119
- c_local, layer_stack_local = get_component_with_local_layers(
120
- c,
121
- layer_stack,
122
- mappings=[mapping1, mapping2],
123
- )
124
-
125
- print(layer_stack_local.layers.keys())
126
- print(layer_stack_local.layers["test1"])
127
-
128
- c_local.show()
File without changes
File without changes