gplugins 1.1.4__tar.gz → 1.2.0__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 (256) hide show
  1. {gplugins-1.1.4 → gplugins-1.2.0}/PKG-INFO +41 -16
  2. {gplugins-1.1.4 → gplugins-1.2.0}/README.md +26 -3
  3. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/__init__.py +2 -2
  4. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_component_with_net_layers.py +2 -2
  5. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/femwell/__init__.py +1 -1
  6. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/get_mesh.py +4 -1
  7. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/uz_xsection_mesh.py +2 -2
  8. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/dataprep/regions.py +4 -7
  9. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_dataprep_regions.py +2 -6
  10. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_global_density.py +1 -1
  11. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/meow/meow_eme.py +2 -1
  12. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_coupling_vs_gap.py +3 -2
  13. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_neff_vs_width.py +2 -2
  14. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/path_length_analysis/path_length_analysis_from_gds.py +13 -13
  15. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/__init__.py +1 -1
  16. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/build_model.py +1 -0
  17. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/plot_model.py +1 -0
  18. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/spice/spice_to_yaml.py +15 -23
  19. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/component.py +4 -5
  20. gplugins-1.2.0/gplugins/vlsir/tests/resources/pads_correct.cir +61 -0
  21. gplugins-1.2.0/gplugins/vlsir/tests/resources/pads_correct.scs +72 -0
  22. gplugins-1.2.0/gplugins/vlsir/tests/resources/pads_correct.sp +69 -0
  23. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/vlsir/tests/test_vlsir.py +12 -8
  24. {gplugins-1.1.4 → gplugins-1.2.0}/pyproject.toml +25 -18
  25. gplugins-1.1.4/gplugins/vlsir/tests/resources/pads_correct.cir +0 -95
  26. gplugins-1.1.4/gplugins/vlsir/tests/resources/pads_correct.scs +0 -112
  27. gplugins-1.1.4/gplugins/vlsir/tests/resources/pads_correct.sp +0 -105
  28. {gplugins-1.1.4 → gplugins-1.2.0}/LICENSE +0 -0
  29. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/__init__.py +0 -0
  30. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/base_models/__init__.py +0 -0
  31. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/base_models/component.py +0 -0
  32. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/base_models/simulation.py +0 -0
  33. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/config.py +0 -0
  34. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/types.py +0 -0
  35. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/__init__.py +0 -0
  36. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/add_simulation_markers.py +0 -0
  37. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/async_helpers.py +0 -0
  38. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/cache.py +0 -0
  39. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/convert_sparameters.py +0 -0
  40. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/disable_print.py +0 -0
  41. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_capacitance.py +0 -0
  42. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_component_with_local_layers.py +0 -0
  43. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_effective_indices.py +0 -0
  44. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_scattering.py +0 -0
  45. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_sparameters_path.py +0 -0
  46. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/optical_constants.py +0 -0
  47. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/parse_layer_stack.py +0 -0
  48. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/plot.py +0 -0
  49. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/plot_csv.py +0 -0
  50. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/port_symmetries.py +0 -0
  51. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/tests/test_get_component_with_new_port_layers.py +0 -0
  52. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/dagster/Makefile +0 -0
  53. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/dagster/__init__.py +0 -0
  54. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/dagster/workflow.py +0 -0
  55. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/__init__.py +5 -5
  56. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/doping.py +0 -0
  57. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/get_simulation.py +0 -0
  58. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/get_simulation_xsection.py +0 -0
  59. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/get_solver.py +0 -0
  60. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/test_devsim.py +0 -0
  61. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/elmer/__init__.py +0 -0
  62. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/elmer/electrostatic.sif.j2 +0 -0
  63. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/elmer/get_capacitance.py +0 -0
  64. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/elmer/tests/test_elmer.py +0 -0
  65. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/fdtdz/__init__.py +0 -0
  66. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/fdtdz/get_epsilon_fdtdz.py +0 -0
  67. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/fdtdz/get_ports_fdtdz.py +0 -0
  68. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/fdtdz/get_sparameters_fdtdz.py +0 -0
  69. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/femwell/mode_solver.py +0 -0
  70. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/femwell/solve_thermal.py +0 -0
  71. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/femwell/test_mode_solver.py +0 -0
  72. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/Makefile +0 -0
  73. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/__init__.py +0 -0
  74. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/b64.py +0 -0
  75. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/gfviz.py +0 -0
  76. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/netlist.py +0 -0
  77. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/serve.py +0 -0
  78. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/static/b64.js +0 -0
  79. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/static/schemedit.js +0 -0
  80. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/static/schemedit.wasm +0 -0
  81. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/templates/example.json +0 -0
  82. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/templates/index.html +0 -0
  83. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/__init__.py +8 -8
  84. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_material.py +0 -0
  85. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_meep_geometry.py +0 -0
  86. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_port_eigenmode.py +0 -0
  87. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_simulation.py +0 -0
  88. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_simulation_grating_farfield.py +0 -0
  89. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_simulation_grating_fiber.py +0 -0
  90. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/meep_adjoint_optimization.py +0 -0
  91. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_eigenmode.py +0 -0
  92. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_materials.py +0 -0
  93. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_crossing.csv +0 -0
  94. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_straight.csv +0 -0
  95. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_crossing.csv +0 -0
  96. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_straight.csv +0 -0
  97. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_symmetries_straight.csv +0 -0
  98. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi.csv +0 -0
  99. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi_pool.csv +0 -0
  100. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_crossing_symmetric.csv +0 -0
  101. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight.csv +0 -0
  102. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_batch.csv +0 -0
  103. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi.csv +0 -0
  104. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi_pool.csv +0 -0
  105. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_symmetric.csv +0 -0
  106. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep.py +0 -0
  107. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/write_sparameters_grating.py +0 -0
  108. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/write_sparameters_meep.py +0 -0
  109. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/write_sparameters_meep_batch.py +0 -0
  110. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/write_sparameters_meep_mpi.py +0 -0
  111. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/__init__.py +2 -2
  112. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/define_polysurfaces.py +0 -0
  113. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/parse_component.py +0 -0
  114. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/parse_gds.py +0 -0
  115. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/tests/test_custom_names.py +0 -0
  116. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/tests/test_meshing_2D.py +0 -0
  117. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/tests/test_meshing_3D.py +0 -0
  118. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/xy_xsection_mesh.py +0 -0
  119. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/xyz_mesh.py +0 -0
  120. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/__init__.py +0 -0
  121. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/dataprep/__init__.py +0 -0
  122. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/__init__.py +0 -0
  123. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_duplicated_cells.py +0 -0
  124. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_exclusion.py +0 -0
  125. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_inclusion.py +0 -0
  126. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_space.py +0 -0
  127. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_width.py +0 -0
  128. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/count_drc.py +0 -0
  129. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/samples/drc_errors.py +0 -0
  130. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/write_drc.py +0 -0
  131. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/get_density.py +0 -0
  132. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/get_netlist.py +0 -0
  133. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/netlist_graph.py +0 -0
  134. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/netlist_spice_reader.py +0 -0
  135. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/plot_nets.py +0 -0
  136. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_density.py +0 -0
  137. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_drc_exclusion.py +0 -0
  138. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_drc_inclusion.py +0 -0
  139. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_drc_space.py +0 -0
  140. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_drc_width.py +0 -0
  141. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_netlist_spice_reader.py +0 -0
  142. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_plot_nets.py +0 -0
  143. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/README.md +0 -0
  144. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/__init__.py +1 -1
  145. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/interconnect.py +0 -0
  146. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/mapping_ubcpdk.yml +0 -0
  147. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/read.py +0 -0
  148. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/settings.py +0 -0
  149. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/tests/test_lumerical_read_sparameters.py +0 -0
  150. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/tests/test_netlist.py +0 -0
  151. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/tests/test_netlist_get_routes.py +0 -0
  152. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/write_sparameters_lumerical.py +0 -0
  153. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/write_sparameters_lumerical_components.py +0 -0
  154. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/__init__.py +0 -0
  155. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/inorganic.py +0 -0
  156. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/optical/__init__.py +0 -0
  157. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/optical/optical_mat.py +0 -0
  158. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/optical/refractive_index_info.py +0 -0
  159. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/semiconductor/__init__.py +0 -0
  160. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/semiconductor/semiconductor_mat.py +0 -0
  161. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/meow/__init__.py +0 -0
  162. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/meow/test_meow_simulation.py +0 -0
  163. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/__init__.py +6 -6
  164. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/coupler.py +0 -0
  165. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_mode_dispersion.py +0 -0
  166. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_modes.py +0 -0
  167. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_modes_cross_section.py +0 -0
  168. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_neff_ng_dw_dh.py +0 -0
  169. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/get_mode_solver_coupler.py +0 -0
  170. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/get_mode_solver_cross_section.py +0 -0
  171. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/get_mode_solver_rib.py +0 -0
  172. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/modes/neff_vs_width_nitride.csv +0 -0
  173. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/modes/neff_vs_width_rib.csv +0 -0
  174. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/modes/neff_vs_width_strip.csv +0 -0
  175. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/neff_convergence_test.py +0 -0
  176. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/neff_vs_width.csv +0 -0
  177. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/overlap.py +0 -0
  178. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_dw_dh/test_dw_dh.csv +0 -0
  179. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_dw_dh/test_dw_dh.obtained.csv +0 -0
  180. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_dw_dh/test_dw_dh_dispersion.csv +0 -0
  181. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_dw_dh.py +0 -0
  182. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_find_modes.py +0 -0
  183. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_find_modes_dispersion.py +0 -0
  184. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.csv +0 -0
  185. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.obtained.csv +0 -0
  186. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_neff_vs_width.py +0 -0
  187. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/types.py +0 -0
  188. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/waveguide.py +0 -0
  189. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/__init__.py +0 -0
  190. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/driven.json +0 -0
  191. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/electrostatic.json +0 -0
  192. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/get_capacitance.py +0 -0
  193. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/get_scattering.py +0 -0
  194. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/tests/test_palace.py +0 -0
  195. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/path_length_analysis/__init__.py +0 -0
  196. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/path_length_analysis/path_length_analysis.py +0 -0
  197. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/path_length_analysis/test_pathlength_extraction.py +0 -0
  198. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/__init__.py +0 -0
  199. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/coupler.py +0 -0
  200. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/fsr.py +0 -0
  201. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/heater.py +0 -0
  202. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/mzi.py +0 -0
  203. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/ring.py +0 -0
  204. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/__init__.py +0 -0
  205. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/diffusion.py +0 -0
  206. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/implant_tables.py +0 -0
  207. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/pysrim.py +0 -0
  208. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/silicon.py +0 -0
  209. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/skew/antimony_si_skew.csv +0 -0
  210. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/skew/arsenic_si_skew.csv +0 -0
  211. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/skew/boron_si_skew.csv +0 -0
  212. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/skew/phosphorus_si_skew.csv +0 -0
  213. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/integrations/__init__.py +0 -0
  214. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/integrations/femwell_waveguide_model.py +0 -0
  215. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/integrations/meep_FDTD_model.py +0 -0
  216. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/integrations/meow_eme_model.py +0 -0
  217. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/interpolators.py +0 -0
  218. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/mlp.py +0 -0
  219. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/models.py +0 -0
  220. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/parameter.py +0 -0
  221. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/read.py +0 -0
  222. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_mzi.py +0 -0
  223. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.obtained.yml +0 -0
  224. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.yml +0 -0
  225. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_mzi_lattice.py +0 -0
  226. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_parameters.py +0 -0
  227. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/mask_sde.py +0 -0
  228. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/mask_sprocess.py +0 -0
  229. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/sde.py +0 -0
  230. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/sdevice.py +0 -0
  231. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/sprocess.py +0 -0
  232. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/svisual.py +0 -0
  233. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/spice/__init__.py +0 -0
  234. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/spice/tests/__init__.py +0 -0
  235. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/spice/tests/test_interconnect.py +0 -0
  236. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/__init__.py +3 -3
  237. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/get_results.py +0 -0
  238. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/get_simulation_grating_coupler.py +0 -0
  239. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/materials.py +0 -0
  240. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/modes.py +0 -0
  241. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_component_modeler.py +0 -0
  242. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_materials.py +0 -0
  243. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_modes/test_sweep_width.csv +0 -0
  244. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_modes/test_sweep_width.obtained.csv +0 -0
  245. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_modes_coupler.py +0 -0
  246. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_modes_waveguide.py +0 -0
  247. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_plot_simulation_grating_coupler.py +0 -0
  248. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_write_sparameters.py +0 -0
  249. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/tests_sparameters/sim_ref.yaml +0 -0
  250. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters.py +0 -0
  251. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters_grating_coupler.py +0 -0
  252. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/types.py +0 -0
  253. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/util.py +0 -0
  254. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/write_sparameters_grating_coupler.py +0 -0
  255. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/vlsir/__init__.py +0 -0
  256. {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/vlsir/export_netlist.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: gplugins
3
- Version: 1.1.4
3
+ Version: 1.2.0
4
4
  Summary: gdsfactory plugins
5
5
  Keywords: python
6
6
  Author-email: gdsfactory <contact@gdsfactory.com>
@@ -14,28 +14,23 @@ Requires-Dist: gdsfactory>=8.5.3
14
14
  Requires-Dist: pint
15
15
  Requires-Dist: gdstk
16
16
  Requires-Dist: tqdm
17
- Requires-Dist: numpy<2
17
+ Requires-Dist: numpy
18
18
  Requires-Dist: dagster ; extra == "dagster"
19
19
  Requires-Dist: dagit ; extra == "dagster"
20
20
  Requires-Dist: pre-commit ; extra == "dev"
21
21
  Requires-Dist: pytest ; extra == "dev"
22
22
  Requires-Dist: pytest-cov ; extra == "dev"
23
23
  Requires-Dist: pytest_regressions ; extra == "dev"
24
- Requires-Dist: jsondiff ; extra == "dev"
25
- Requires-Dist: mypy ; extra == "dev"
26
24
  Requires-Dist: pyswarms ; extra == "dev"
27
- Requires-Dist: autograd ; extra == "dev"
28
- Requires-Dist: hyperopt ; extra == "dev"
29
- Requires-Dist: tbump ; extra == "dev"
30
- Requires-Dist: towncrier ; extra == "dev"
31
25
  Requires-Dist: ray ; extra == "dev"
26
+ Requires-Dist: autograd ; extra == "dev"
32
27
  Requires-Dist: devsim ; extra == "devsim"
33
28
  Requires-Dist: pyvista<=0.43.8 ; extra == "devsim"
34
- Requires-Dist: tidy3d>=2.5.2,<2.8 ; extra == "devsim"
29
+ Requires-Dist: tidy3d>=2.7.8,<2.8 ; extra == "devsim"
35
30
  Requires-Dist: jupytext ; extra == "docs"
36
31
  Requires-Dist: matplotlib ; extra == "docs"
37
32
  Requires-Dist: jupyter-book~=1.0 ; extra == "docs"
38
- Requires-Dist: pyvista[all, trame]<=0.43.8 ; extra == "docs"
33
+ Requires-Dist: pyvista[all]<=0.43.8 ; extra == "docs"
39
34
  Requires-Dist: femwell~=0.1.11 ; extra == "femwell"
40
35
  Requires-Dist: meshwell~=1.0.7 ; extra == "femwell"
41
36
  Requires-Dist: jinja2 ; extra == "gfviz"
@@ -55,11 +50,16 @@ Requires-Dist: klayout ; extra == "klayout"
55
50
  Requires-Dist: pyvis<=0.3.1 ; extra == "klayout"
56
51
  Requires-Dist: vlsir~=6.0 ; extra == "klayout"
57
52
  Requires-Dist: vlsirtools~=6.0 ; extra == "klayout"
53
+ Requires-Dist: luminescent~=0.2.12 ; extra == "luminescent"
54
+ Requires-Dist: sortedcontainers ; extra == "luminescent"
55
+ Requires-Dist: mypy ; extra == "maintainer"
56
+ Requires-Dist: tbump ; extra == "maintainer"
57
+ Requires-Dist: towncrier ; extra == "maintainer"
58
58
  Requires-Dist: jax>=0.4.26 ; extra == "meow"
59
59
  Requires-Dist: jaxlib>=0.4.26 ; extra == "meow"
60
60
  Requires-Dist: flax>=0.8.2 ; extra == "meow"
61
61
  Requires-Dist: meow-sim~=0.11.0 ; extra == "meow"
62
- Requires-Dist: tidy3d>=2.5.2,<2.8 ; extra == "meow"
62
+ Requires-Dist: tidy3d>=2.7.8,<2.8 ; extra == "meow"
63
63
  Requires-Dist: jax>=0.4.26 ; extra == "sax"
64
64
  Requires-Dist: jaxlib>=0.4.26 ; extra == "sax"
65
65
  Requires-Dist: flax>=0.8.2 ; extra == "sax"
@@ -69,9 +69,9 @@ Requires-Dist: pyvis<=0.3.1 ; extra == "sax"
69
69
  Requires-Dist: bokeh ; extra == "schematic"
70
70
  Requires-Dist: ipywidgets ; extra == "schematic"
71
71
  Requires-Dist: natsort ; extra == "schematic"
72
- Requires-Dist: tidy3d>=2.5.2,<2.8 ; extra == "tidy3d"
72
+ Requires-Dist: tidy3d>=2.7.8,<2.8 ; extra == "tidy3d"
73
73
  Requires-Dist: meshio ; extra == "tidy3d"
74
- Requires-Dist: numpy<2 ; extra == "tidy3d"
74
+ Requires-Dist: numpy ; extra == "tidy3d"
75
75
  Requires-Dist: meshwell~=1.0.7 ; extra == "tidy3d"
76
76
  Requires-Dist: vlsir~=6.0 ; extra == "vlsir"
77
77
  Requires-Dist: vlsirtools~=6.0 ; extra == "vlsir"
@@ -83,13 +83,15 @@ Provides-Extra: femwell
83
83
  Provides-Extra: gfviz
84
84
  Provides-Extra: gmsh
85
85
  Provides-Extra: klayout
86
+ Provides-Extra: luminescent
87
+ Provides-Extra: maintainer
86
88
  Provides-Extra: meow
87
89
  Provides-Extra: sax
88
90
  Provides-Extra: schematic
89
91
  Provides-Extra: tidy3d
90
92
  Provides-Extra: vlsir
91
93
 
92
- # gplugins 1.1.4
94
+ # gplugins 1.2.0
93
95
 
94
96
  [![docs](https://github.com/gdsfactory/gplugins/actions/workflows/pages.yml/badge.svg)](https://gdsfactory.github.io/gplugins/)
95
97
  [![PyPI](https://img.shields.io/pypi/v/gplugins)](https://pypi.org/project/gplugins/)
@@ -97,7 +99,7 @@ Provides-Extra: vlsir
97
99
  [![MIT](https://img.shields.io/github/license/gdsfactory/gplugins)](https://choosealicense.com/licenses/mit/)
98
100
  [![codecov](https://img.shields.io/codecov/c/github/gdsfactory/gplugins)](https://codecov.io/gh/gdsfactory/gdsfactory/tree/main/gplugins)
99
101
 
100
- gdsfactory plugins:
102
+ GDSFactory plugins:
101
103
 
102
104
  - `devsim` TCAD device simulator.
103
105
  - `meow` Eigen Mode Expansion (EME).
@@ -107,13 +109,15 @@ gdsfactory plugins:
107
109
  - `lumerical` For Ansys FDTD and Circuit interconnect.
108
110
  - `klayout` for fill, dataprep and testing.
109
111
  - `ray` for distributed computing and optimization.
110
- - `sax` S-parameter circuit solver.
111
112
  - `schematic`: for bokeh schematic editor and `path_length_analysis`.
112
113
  - `meep` for FDTD.
113
114
  - `mpb` for MPB mode solver.
114
115
  - `elmer` for electrostatic (capacitive) simulations.
115
116
  - `palace` for full-wave driven (S parameter) and electrostatic (capacitive) simulations.
117
+ - `sax` S-parameter circuit solver.
116
118
  - `vlsir` for parsing GDS-extracted circuit netlists into Cadence Spectre, NgSpice and Xyce Schematic File formats.
119
+ - `luminescent` for FDTD simulations.
120
+
117
121
 
118
122
  ## Installation
119
123
 
@@ -144,6 +148,27 @@ The following plugins require special installation as they can't be installed wi
144
148
  - For Elmer, refer to [Elmer FEM – Installation](https://www.elmerfem.org/blog/binaries/) for installation or compilation instructions each platform. Gplugins assumes `ElmerSolver`, `ElmerSolver_mpi`, and `ElmerGrid` are available in your PATH environment variable.
145
149
  - For Palace, refer to [Palace – Installation](https://awslabs.github.io/palace/stable/install/) for compilation instructions using Spack or Singularity. Gplugins assumes `palace` is available in your PATH environment variable.
146
150
 
151
+ ## Installation for contributors
152
+
153
+ We recommend `uv` for installing GDSFactory:
154
+
155
+ ```bash
156
+ # On macOS and Linux.
157
+ curl -LsSf https://astral.sh/uv/install.sh | sh
158
+ ```
159
+
160
+ ```bash
161
+ # On Windows.
162
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
163
+ ```
164
+
165
+ Then you can install gdsfactory with:
166
+
167
+ ```bash
168
+ uv venv --python 3.11
169
+ uv sync --extra docs --extra dev
170
+ ```
171
+
147
172
 
148
173
  ## Getting started
149
174
 
@@ -1,4 +1,4 @@
1
- # gplugins 1.1.4
1
+ # gplugins 1.2.0
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/)
@@ -6,7 +6,7 @@
6
6
  [![MIT](https://img.shields.io/github/license/gdsfactory/gplugins)](https://choosealicense.com/licenses/mit/)
7
7
  [![codecov](https://img.shields.io/codecov/c/github/gdsfactory/gplugins)](https://codecov.io/gh/gdsfactory/gdsfactory/tree/main/gplugins)
8
8
 
9
- gdsfactory plugins:
9
+ GDSFactory plugins:
10
10
 
11
11
  - `devsim` TCAD device simulator.
12
12
  - `meow` Eigen Mode Expansion (EME).
@@ -16,13 +16,15 @@ gdsfactory plugins:
16
16
  - `lumerical` For Ansys FDTD and Circuit interconnect.
17
17
  - `klayout` for fill, dataprep and testing.
18
18
  - `ray` for distributed computing and optimization.
19
- - `sax` S-parameter circuit solver.
20
19
  - `schematic`: for bokeh schematic editor and `path_length_analysis`.
21
20
  - `meep` for FDTD.
22
21
  - `mpb` for MPB mode solver.
23
22
  - `elmer` for electrostatic (capacitive) simulations.
24
23
  - `palace` for full-wave driven (S parameter) and electrostatic (capacitive) simulations.
24
+ - `sax` S-parameter circuit solver.
25
25
  - `vlsir` for parsing GDS-extracted circuit netlists into Cadence Spectre, NgSpice and Xyce Schematic File formats.
26
+ - `luminescent` for FDTD simulations.
27
+
26
28
 
27
29
  ## Installation
28
30
 
@@ -53,6 +55,27 @@ The following plugins require special installation as they can't be installed wi
53
55
  - For Elmer, refer to [Elmer FEM – Installation](https://www.elmerfem.org/blog/binaries/) for installation or compilation instructions each platform. Gplugins assumes `ElmerSolver`, `ElmerSolver_mpi`, and `ElmerGrid` are available in your PATH environment variable.
54
56
  - For Palace, refer to [Palace – Installation](https://awslabs.github.io/palace/stable/install/) for compilation instructions using Spack or Singularity. Gplugins assumes `palace` is available in your PATH environment variable.
55
57
 
58
+ ## Installation for contributors
59
+
60
+ We recommend `uv` for installing GDSFactory:
61
+
62
+ ```bash
63
+ # On macOS and Linux.
64
+ curl -LsSf https://astral.sh/uv/install.sh | sh
65
+ ```
66
+
67
+ ```bash
68
+ # On Windows.
69
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
70
+ ```
71
+
72
+ Then you can install gdsfactory with:
73
+
74
+ ```bash
75
+ uv venv --python 3.11
76
+ uv sync --extra docs --extra dev
77
+ ```
78
+
56
79
 
57
80
  ## Getting started
58
81
 
@@ -1,6 +1,6 @@
1
1
  """gplugins - gdsfactory plugins."""
2
2
 
3
- __version__ = "1.1.4"
3
+ __version__ = "1.2.0"
4
4
 
5
5
  import pathlib
6
6
 
@@ -20,4 +20,4 @@ class Paths:
20
20
 
21
21
  PATH = Paths()
22
22
 
23
- __all__ = ["plot", "get_effective_indices", "port_symmetries"]
23
+ __all__ = ["get_effective_indices", "plot", "port_symmetries"]
@@ -1,8 +1,8 @@
1
1
  import copy
2
2
 
3
3
  import gdsfactory as gf
4
- from gdsfactory.technology import LogicalLayer
5
- from gdsfactory.typings import Component, LayerStack
4
+ from gdsfactory import Component
5
+ from gdsfactory.technology import LayerStack, LogicalLayer
6
6
 
7
7
 
8
8
  def get_component_layer_stack(
@@ -2,4 +2,4 @@ from __future__ import annotations
2
2
 
3
3
  from .mode_solver import compute_component_slice_modes, compute_cross_section_modes
4
4
 
5
- __all__ = ("compute_cross_section_modes", "compute_component_slice_modes")
5
+ __all__ = ("compute_component_slice_modes", "compute_cross_section_modes")
@@ -3,7 +3,8 @@ from pathlib import Path
3
3
  import gdsfactory as gf
4
4
  import meshio
5
5
  from gdsfactory import Component
6
- from gdsfactory.typings import ComponentSpec, Layer, LayerStack
6
+ from gdsfactory.technology import LayerStack
7
+ from gdsfactory.typings import ComponentSpec, Layer
7
8
 
8
9
  from gplugins.gmsh.uz_xsection_mesh import uz_xsection_mesh
9
10
  from gplugins.gmsh.xy_xsection_mesh import xy_xsection_mesh
@@ -47,7 +48,9 @@ def get_mesh(
47
48
  xsection_bounds: used to define in-plane line for uz meshing.
48
49
  wafer_padding: padding beyond bbox to add to WAFER layers.
49
50
  wafer_layer: layer to use for WAFER padding.
51
+ default_characteristic_length: default characteristic length for meshing.
50
52
  background_remeshing_file: .pos file to use as a remeshing field. Overrides resolutions if not None.
53
+ kwargs: additional arguments for the target meshing function in gplugins.gmsh.
51
54
 
52
55
  Keyword Args:
53
56
  Arguments for the target meshing function in gplugins.gmsh
@@ -123,8 +123,8 @@ def get_uz_bounds_layers(
123
123
  z_min_sim = z_bounds[0]
124
124
  z_max_sim = z_bounds[1]
125
125
  else:
126
- z_min_sim = -np.Inf
127
- z_max_sim = np.Inf
126
+ z_min_sim = -np.inf
127
+ z_max_sim = np.inf
128
128
 
129
129
  # Get in-plane cross-sections
130
130
  inplane_bounds_dict = get_u_bounds_layers(layer_polygons_dict, xsection_bounds)
@@ -28,10 +28,7 @@ def _is_layer(value: any) -> bool:
28
28
  layer, datatype = value
29
29
  except Exception:
30
30
  return False
31
- if isinstance(layer, int) and isinstance(datatype, int):
32
- return True
33
- else:
34
- return False
31
+ return isinstance(layer, int) and isinstance(datatype, int)
35
32
 
36
33
 
37
34
  def _assert_is_layer(value: any) -> None:
@@ -129,10 +126,10 @@ class RegionCollection:
129
126
  """Write gds.
130
127
 
131
128
  Args:
132
- gdspath: output gds path
133
- top_cell_name: name to use for the top cell of the output library
129
+ gdspath: output gds path.
130
+ top_cell_name: name to use for the top cell of the output library.
134
131
  keep_original: if True, keeps all original cells (and hierarchy, to the extent possible) in the output. If false, only explicitly defined layers are output.
135
- save_options: if provided, specified KLayout SaveLayoutOptions are used when writing the GDS
132
+ save_options: if provided, specified KLayout SaveLayoutOptions are used when writing the GDS.
136
133
  """
137
134
  # use the working top cell name if not provided
138
135
  if top_cell_name is None:
@@ -2,7 +2,7 @@ from unittest.mock import MagicMock
2
2
 
3
3
  import gdsfactory as gf
4
4
  import pytest
5
- from gdsfactory.generic_tech.layer_map import LAYER as l
5
+ from gdsfactory.generic_tech.layer_map import LAYER
6
6
  from kfactory import kdb
7
7
 
8
8
  import gplugins.klayout.dataprep.regions as dp
@@ -23,7 +23,7 @@ def mock_region() -> kdb.Region:
23
23
  def region_collection() -> dp.RegionCollection:
24
24
  c = gf.Component()
25
25
  ring = c << gf.components.coupler_ring()
26
- c << gf.components.bbox(ring, layer=l.FLOORPLAN)
26
+ c << gf.components.bbox(ring, layer=LAYER.FLOORPLAN)
27
27
  gdspath = c.write_gds()
28
28
  return dp.RegionCollection(gdspath)
29
29
 
@@ -93,10 +93,6 @@ def test_RegionCollection_init(region_collection) -> None:
93
93
  assert region_collection[(1, 0)]
94
94
 
95
95
 
96
- def test_region_collection_contains(region_collection) -> None:
97
- assert l.FLOORPLAN in region_collection
98
-
99
-
100
96
  if __name__ == "__main__":
101
97
  import pathlib
102
98
 
@@ -58,7 +58,7 @@ expected_global_densities = [
58
58
  small_rect1_size=small_rect1_sizes[0],
59
59
  small_rect2_size=small_rect2_sizes[0],
60
60
  ),
61
- ] * 3 + [0.5]
61
+ ] * 3 + [0.125]
62
62
 
63
63
 
64
64
  @pytest.mark.parametrize(
@@ -1,3 +1,4 @@
1
+ import itertools
1
2
  import pathlib
2
3
  import pprint
3
4
  import time
@@ -326,7 +327,7 @@ class MEOW:
326
327
  ez_interfaces=True,
327
328
  )
328
329
  cells = []
329
- for z_min, z_max in zip(zs[:-1], zs[1:]):
330
+ for z_min, z_max in itertools.pairwise(zs):
330
331
  cell = mw.Cell(
331
332
  structures=self.structs,
332
333
  mesh=mesh,
@@ -7,7 +7,7 @@ import meep as mp
7
7
  import numpy as np
8
8
  import pandas as pd
9
9
  import pydantic
10
- from gdsfactory.typings import Optional, PathType
10
+ from gdsfactory.typings import PathType
11
11
  from tqdm.auto import tqdm
12
12
 
13
13
  from gplugins.modes.find_modes import find_modes_coupler
@@ -65,7 +65,7 @@ def find_coupling_vs_gap(
65
65
  nmodes: int = 4,
66
66
  wavelength: float = 1.55,
67
67
  parity=mp.NO_PARITY,
68
- filepath: Optional[PathType] = None,
68
+ filepath: PathType | None = None,
69
69
  overwrite: bool = False,
70
70
  **kwargs,
71
71
  ) -> pd.DataFrame:
@@ -129,6 +129,7 @@ def find_coupling_vs_gap(
129
129
 
130
130
 
131
131
  def plot_coupling_vs_gap(df: pd.DataFrame, **kwargs) -> None:
132
+ """Plots coupling vs gap."""
132
133
  plt.plot(df.gap, df.lc, ".-")
133
134
  plt.ylabel("100% coupling length (um)")
134
135
  plt.xlabel("gap (um)")
@@ -7,7 +7,7 @@ import meep as mp
7
7
  import numpy as np
8
8
  import pandas as pd
9
9
  import pydantic
10
- from gdsfactory.typings import Optional, PathType
10
+ from gdsfactory.typings import PathType
11
11
  from tqdm.auto import tqdm
12
12
 
13
13
  from gplugins.modes.find_modes import find_modes_waveguide
@@ -21,7 +21,7 @@ def find_neff_vs_width(
21
21
  nmodes: int = 4,
22
22
  wavelength: float = 1.55,
23
23
  parity=mp.NO_PARITY,
24
- filepath: Optional[PathType] = None,
24
+ filepath: PathType | None = None,
25
25
  overwrite: bool = False,
26
26
  **kwargs,
27
27
  ) -> pd.DataFrame:
@@ -244,7 +244,7 @@ def centerline_single_poly_2_ports(poly, under_sampling, port_list) -> np.ndarra
244
244
 
245
245
 
246
246
  def extract_paths(
247
- component: gf.typings.Component | kf.Instance,
247
+ component: gf.Component | kf.Instance,
248
248
  layer: tuple[int, int] = (1, 0),
249
249
  plot: bool = False,
250
250
  filter_function: Callable | None = None,
@@ -294,12 +294,12 @@ def extract_paths(
294
294
 
295
295
  if consider_ports is not None:
296
296
  # Only ports in the specified list
297
- consider_ports = [component.ports[port_name] for port_name in consider_ports]
297
+ ports_list = [component.ports[port_name] for port_name in consider_ports]
298
298
  else:
299
299
  # All ports
300
- consider_ports = component.ports
300
+ ports_list = component.ports
301
301
 
302
- n_ports = len(consider_ports)
302
+ n_ports = len(ports_list)
303
303
  if n_ports == 0:
304
304
  raise ValueError(
305
305
  "The specified component does not have ports - path length extraction will not work."
@@ -328,15 +328,15 @@ def extract_paths(
328
328
  # This is the simplest case - a straight or a bend
329
329
 
330
330
  if poly[0].is_box(): # only 4 points, no undersampling
331
- centerline = centerline_single_poly_2_ports(poly, 1, consider_ports)
331
+ centerline = centerline_single_poly_2_ports(poly, 1, ports_list)
332
332
  else:
333
333
  centerline = centerline_single_poly_2_ports(
334
- poly, under_sampling, consider_ports
334
+ poly, under_sampling, ports_list
335
335
  )
336
336
  if filter_function is not None:
337
337
  centerline = filter_function(centerline)
338
338
  p = gf.Path(centerline)
339
- paths[f"{consider_ports[0].name};{consider_ports[1].name}"] = p
339
+ paths[f"{ports_list[0].name};{ports_list[1].name}"] = p
340
340
 
341
341
  else:
342
342
  # Single polygon and more than 2 ports - MMI
@@ -373,15 +373,15 @@ def extract_paths(
373
373
  if len(polys) > 1:
374
374
  # Multiple polygons - iterate through each one
375
375
 
376
- all_ports = list()
376
+ all_ports = []
377
377
 
378
378
  for poly in polys:
379
379
  # Need to check how many ports does that specific polygon contain
380
- ports_poly = list()
380
+ ports_poly = []
381
381
 
382
- for port in consider_ports:
382
+ for port in ports_list:
383
383
  if poly.sized(0.005).inside(DPoint(port.center[0], port.center[1])):
384
- ports_poly.append(port)
384
+ ports_poly.append(port) # noqa: PERF401
385
385
 
386
386
  if len(ports_poly) == 2:
387
387
  # Each polygon has two ports - simple case
@@ -568,7 +568,7 @@ def extract_paths(
568
568
 
569
569
  def get_min_radius_and_length_path_dict(path_dict: dict) -> dict:
570
570
  """Get the minimum radius of curvature and the length of all paths in the dictionary."""
571
- curv_and_len_dict = dict()
571
+ curv_and_len_dict = {}
572
572
  for key, val in path_dict.items():
573
573
  curv_and_len_dict[key] = get_min_radius_and_length(val)
574
574
 
@@ -683,7 +683,7 @@ if __name__ == "__main__":
683
683
  plot=True,
684
684
  under_sampling=1,
685
685
  evanescent_coupling=ev_coupling,
686
- # consider_ports=["o2", "o3"],
686
+ consider_ports=["o1", "o2"],
687
687
  # port_positions=[(-10.0, -1.6), (30.0, -1.6)],
688
688
  )
689
689
  r_and_l_dict = get_min_radius_and_length_path_dict(path_dict)
@@ -3,4 +3,4 @@ from __future__ import annotations
3
3
  from gplugins.sax import models, read
4
4
  from gplugins.sax.plot_model import plot_model
5
5
 
6
- __all__ = ["read", "plot_model", "models"]
6
+ __all__ = ["models", "plot_model", "read"]
@@ -38,6 +38,7 @@ class Model:
38
38
  **kwargs,
39
39
  ) -> None:
40
40
  """Utility class which simplifies the execution of simulations to build compact models for circuit simulations.
41
+
41
42
  Aims to be agnostic to the specific simulator being used.
42
43
 
43
44
  It contains shared utilities for the different types of Models:
@@ -27,6 +27,7 @@ def plot_model(
27
27
  port1: input port name.
28
28
  ports2: list of ports.
29
29
  logscale: plots in dB logarithmic scale.
30
+ fig: matplotlib figure.
30
31
  wavelength_start: wavelength min (um).
31
32
  wavelength_stop: wavelength max (um).
32
33
  wavelength_points: number of wavelength steps.
@@ -1,3 +1,4 @@
1
+ # type: ignore
1
2
  import os
2
3
  import pathlib
3
4
  import re
@@ -420,17 +421,15 @@ def get_instances(netlist: str, models: dict) -> list:
420
421
  grouped_instances = group_instance_str(netlist)
421
422
  instances = []
422
423
  non_pdk = []
423
- model_names = []
424
- for model in models:
425
- model_names.append(str(model))
424
+ model_names = [str(model) for model in models]
425
+ # Get params using regular expressions
426
+ pattern = r'(\w+|"[^"]*")\s*=\s*({.*?}|-[0-9.]+|[0-9.]+|f+|y+|x+|"[^"]*")'
426
427
  for inst_line in grouped_instances:
427
428
  instance = {}
428
429
  # Get preamble before parameters (instance name, nets, model name)
429
430
  fields = inst_line.split(" ")
430
431
  instance["name"] = fields[0]
431
432
 
432
- # Get params using regular expressions
433
- pattern = r'(\w+|"[^"]*")\s*=\s*({.*?}|-[0-9.]+|[0-9.]+|f+|y+|x+|"[^"]*")'
434
433
  matches = re.findall(pattern, inst_line)
435
434
 
436
435
  # Get fields before params
@@ -459,7 +458,7 @@ def get_instances(netlist: str, models: dict) -> list:
459
458
  match = re.match(r"([\d.]+)([un])", value)
460
459
  if match:
461
460
  instance["params"][param] = (
462
- float(match.group(1)) * CONVERSION[match.group(2)]
461
+ float(match[1]) * CONVERSION[match.group(2)]
463
462
  )
464
463
  else:
465
464
  try:
@@ -477,12 +476,10 @@ def get_instances(netlist: str, models: dict) -> list:
477
476
  instances.append(instance)
478
477
  except KeyError:
479
478
  non_pdk.append(instance["name"])
480
- pass
481
-
482
- if len(non_pdk) > 0:
479
+ if non_pdk:
483
480
  print(
484
481
  "LOG: Non-PDK elements detected! Removing instances {"
485
- + ", ".join(x for x in non_pdk)
482
+ + ", ".join(non_pdk)
486
483
  + "} from netlist."
487
484
  )
488
485
  return instances
@@ -540,6 +537,7 @@ def get_instances_info(
540
537
  .
541
538
  }
542
539
  }
540
+ ignore_electrical: Flag to ignore electrical routes and bundles.
543
541
  ignored_info: Ignored param names that will not be put into the 'settings' or 'info' fields (list of str)
544
542
 
545
543
  Returns:
@@ -671,19 +669,13 @@ def group_instance_str(netlist: str) -> list:
671
669
  i
672
670
  ].strip().startswith("+"):
673
671
  instances.append(lines[i].strip())
674
- i = i + 1
672
+ i += 1
675
673
 
676
674
  while i < len(lines) and lines[i].strip().startswith("+") and instances:
677
675
  instances[-1] = instances[-1] + lines[i].strip()[1:-1]
678
- i = i + 1
679
-
680
- # Check that each instance has params. If not, remove them
681
- filtered_instances = []
682
- for inst in instances:
683
- if "=" in inst:
684
- filtered_instances.append(inst)
676
+ i += 1
685
677
 
686
- return filtered_instances
678
+ return [inst for inst in instances if "=" in inst]
687
679
 
688
680
 
689
681
  def get_placements(instances: list, mapping: dict, ignore_electrical: bool) -> dict:
@@ -921,10 +913,10 @@ def get_routes(instances, mapping, layers, ignore_electrical):
921
913
  """Extract routing information from instances using provided mapping and layers.
922
914
 
923
915
  Args:
924
- - instances: list of instance dictionaries with port and net information.
925
- - mapping: dictionary mapping model names to layout cells and their properties.
926
- - layers: dictionary defining parameters for different routing layers.
927
- - ignore_electrical: boolean indicating whether to ignore electrical routes.
916
+ instances: list of instance dictionaries with port and net information.
917
+ mapping: dictionary mapping model names to layout cells and their properties.
918
+ layers: dictionary defining parameters for different routing layers.
919
+ ignore_electrical: boolean indicating whether to ignore electrical routes.
928
920
 
929
921
  Returns:
930
922
  - A dictionary of routes organized by bundle types.
@@ -1,4 +1,5 @@
1
1
  """This module contains the Tidy3DComponent class which is used to model 3D components in the Tidy3D simulation environment.
2
+
2
3
  It extends the LayeredComponentBase class and adds additional properties and methods specific to the Tidy3D environment.
3
4
 
4
5
  Classes:
@@ -207,7 +208,7 @@ class Tidy3DComponent(LayeredComponentBase):
207
208
  """
208
209
  sim_center = (*self.center[:2], center_z)
209
210
  sim_size = (*self.size[:2], sim_size_z)
210
- sim = td.Simulation(
211
+ return td.Simulation(
211
212
  size=sim_size,
212
213
  center=sim_center,
213
214
  structures=self.structures,
@@ -219,7 +220,6 @@ class Tidy3DComponent(LayeredComponentBase):
219
220
  symmetry=symmetry,
220
221
  **kwargs,
221
222
  )
222
- return sim
223
223
 
224
224
  def get_component_modeler(
225
225
  self,
@@ -308,7 +308,7 @@ class Tidy3DComponent(LayeredComponentBase):
308
308
 
309
309
  ports = self.get_ports(mode_spec, port_size_mult, grid_eps=grid_eps)
310
310
 
311
- modeler = ComponentModeler(
311
+ return ComponentModeler(
312
312
  simulation=sim,
313
313
  ports=ports,
314
314
  freqs=tuple(freqs),
@@ -319,8 +319,6 @@ class Tidy3DComponent(LayeredComponentBase):
319
319
  verbose=verbose,
320
320
  )
321
321
 
322
- return modeler
323
-
324
322
  @td.components.viz.add_ax_if_none
325
323
  def plot_slice(
326
324
  self,
@@ -495,6 +493,7 @@ def write_sparameters(
495
493
  plot_simulation_x: which x coordinate to plot. Defaults to None.
496
494
  plot_mode_index: which mode index to plot. Defaults to 0.
497
495
  plot_mode_port_name: which port name to plot. Defaults to None.
496
+ plot_epsilon: whether to plot epsilon. Defaults to False.
498
497
  filepath: Optional file path for the S-parameters. If None, uses hash of simulation.
499
498
  overwrite: Whether to overwrite existing S-parameters. Defaults to False.
500
499
  kwargs: Additional keyword arguments for the tidy3d Simulation constructor.