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.
- {gplugins-1.1.4 → gplugins-1.2.0}/PKG-INFO +41 -16
- {gplugins-1.1.4 → gplugins-1.2.0}/README.md +26 -3
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/__init__.py +2 -2
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_component_with_net_layers.py +2 -2
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/femwell/__init__.py +1 -1
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/get_mesh.py +4 -1
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/uz_xsection_mesh.py +2 -2
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/dataprep/regions.py +4 -7
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_dataprep_regions.py +2 -6
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_global_density.py +1 -1
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/meow/meow_eme.py +2 -1
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_coupling_vs_gap.py +3 -2
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_neff_vs_width.py +2 -2
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/path_length_analysis/path_length_analysis_from_gds.py +13 -13
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/__init__.py +1 -1
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/build_model.py +1 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/plot_model.py +1 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/spice/spice_to_yaml.py +15 -23
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/component.py +4 -5
- gplugins-1.2.0/gplugins/vlsir/tests/resources/pads_correct.cir +61 -0
- gplugins-1.2.0/gplugins/vlsir/tests/resources/pads_correct.scs +72 -0
- gplugins-1.2.0/gplugins/vlsir/tests/resources/pads_correct.sp +69 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/vlsir/tests/test_vlsir.py +12 -8
- {gplugins-1.1.4 → gplugins-1.2.0}/pyproject.toml +25 -18
- gplugins-1.1.4/gplugins/vlsir/tests/resources/pads_correct.cir +0 -95
- gplugins-1.1.4/gplugins/vlsir/tests/resources/pads_correct.scs +0 -112
- gplugins-1.1.4/gplugins/vlsir/tests/resources/pads_correct.sp +0 -105
- {gplugins-1.1.4 → gplugins-1.2.0}/LICENSE +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/base_models/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/base_models/component.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/base_models/simulation.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/config.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/types.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/add_simulation_markers.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/async_helpers.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/cache.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/convert_sparameters.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/disable_print.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_capacitance.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_component_with_local_layers.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_effective_indices.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_scattering.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/get_sparameters_path.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/optical_constants.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/parse_layer_stack.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/plot.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/plot_csv.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/port_symmetries.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/common/utils/tests/test_get_component_with_new_port_layers.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/dagster/Makefile +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/dagster/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/dagster/workflow.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/__init__.py +5 -5
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/doping.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/get_simulation.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/get_simulation_xsection.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/get_solver.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/devsim/test_devsim.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/elmer/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/elmer/electrostatic.sif.j2 +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/elmer/get_capacitance.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/elmer/tests/test_elmer.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/fdtdz/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/fdtdz/get_epsilon_fdtdz.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/fdtdz/get_ports_fdtdz.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/fdtdz/get_sparameters_fdtdz.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/femwell/mode_solver.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/femwell/solve_thermal.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/femwell/test_mode_solver.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/Makefile +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/b64.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/gfviz.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/netlist.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/serve.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/static/b64.js +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/static/schemedit.js +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/static/schemedit.wasm +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/templates/example.json +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gfviz/templates/index.html +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/__init__.py +8 -8
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_material.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_meep_geometry.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_port_eigenmode.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_simulation.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_simulation_grating_farfield.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/get_simulation_grating_fiber.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/meep_adjoint_optimization.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_eigenmode.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_materials.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_crossing.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_straight.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_crossing.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_straight.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_symmetries_straight.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi_pool.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_crossing_symmetric.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_batch.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi_pool.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_symmetric.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/test_write_sparameters_meep.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/write_sparameters_grating.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/write_sparameters_meep.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/write_sparameters_meep_batch.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmeep/write_sparameters_meep_mpi.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/__init__.py +2 -2
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/define_polysurfaces.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/parse_component.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/parse_gds.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/tests/test_custom_names.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/tests/test_meshing_2D.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/tests/test_meshing_3D.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/xy_xsection_mesh.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/gmsh/xyz_mesh.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/dataprep/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_duplicated_cells.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_exclusion.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_inclusion.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_space.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/check_width.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/count_drc.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/samples/drc_errors.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/drc/write_drc.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/get_density.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/get_netlist.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/netlist_graph.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/netlist_spice_reader.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/plot_nets.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_density.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_drc_exclusion.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_drc_inclusion.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_drc_space.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_drc_width.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_netlist_spice_reader.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/klayout/tests/test_plot_nets.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/README.md +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/__init__.py +1 -1
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/interconnect.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/mapping_ubcpdk.yml +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/read.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/settings.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/tests/test_lumerical_read_sparameters.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/tests/test_netlist.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/tests/test_netlist_get_routes.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/write_sparameters_lumerical.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/lumerical/write_sparameters_lumerical_components.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/inorganic.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/optical/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/optical/optical_mat.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/optical/refractive_index_info.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/semiconductor/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/materials/semiconductor/semiconductor_mat.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/meow/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/meow/test_meow_simulation.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/__init__.py +6 -6
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/coupler.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_mode_dispersion.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_modes.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_modes_cross_section.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/find_neff_ng_dw_dh.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/get_mode_solver_coupler.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/get_mode_solver_cross_section.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/get_mode_solver_rib.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/modes/neff_vs_width_nitride.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/modes/neff_vs_width_rib.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/modes/neff_vs_width_strip.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/neff_convergence_test.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/neff_vs_width.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/overlap.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_dw_dh/test_dw_dh.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_dw_dh/test_dw_dh.obtained.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_dw_dh/test_dw_dh_dispersion.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_dw_dh.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_find_modes.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_find_modes_dispersion.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.obtained.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/tests/test_neff_vs_width.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/types.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/modes/waveguide.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/driven.json +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/electrostatic.json +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/get_capacitance.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/get_scattering.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/palace/tests/test_palace.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/path_length_analysis/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/path_length_analysis/path_length_analysis.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/path_length_analysis/test_pathlength_extraction.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/coupler.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/fsr.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/heater.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/mzi.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/photonic_circuit_models/ring.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/diffusion.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/implant_tables.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/pysrim.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/silicon.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/skew/antimony_si_skew.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/skew/arsenic_si_skew.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/skew/boron_si_skew.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/process/skew/phosphorus_si_skew.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/integrations/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/integrations/femwell_waveguide_model.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/integrations/meep_FDTD_model.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/integrations/meow_eme_model.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/interpolators.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/mlp.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/models.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/parameter.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/read.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_mzi.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.obtained.yml +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.yml +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_mzi_lattice.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sax/tests/test_parameters.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/mask_sde.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/mask_sprocess.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/sde.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/sdevice.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/sprocess.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/sentaurus/svisual.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/spice/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/spice/tests/__init__.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/spice/tests/test_interconnect.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/__init__.py +3 -3
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/get_results.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/get_simulation_grating_coupler.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/materials.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/modes.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_component_modeler.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_materials.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_modes/test_sweep_width.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_modes/test_sweep_width.obtained.csv +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_modes_coupler.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_modes_waveguide.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_plot_simulation_grating_coupler.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/test_write_sparameters.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/tests_sparameters/sim_ref.yaml +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters_grating_coupler.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/types.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/util.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/tidy3d/write_sparameters_grating_coupler.py +0 -0
- {gplugins-1.1.4 → gplugins-1.2.0}/gplugins/vlsir/__init__.py +0 -0
- {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.
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
72
|
+
Requires-Dist: tidy3d>=2.7.8,<2.8 ; extra == "tidy3d"
|
|
73
73
|
Requires-Dist: meshio ; extra == "tidy3d"
|
|
74
|
-
Requires-Dist: numpy
|
|
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.
|
|
94
|
+
# gplugins 1.2.0
|
|
93
95
|
|
|
94
96
|
[](https://gdsfactory.github.io/gplugins/)
|
|
95
97
|
[](https://pypi.org/project/gplugins/)
|
|
@@ -97,7 +99,7 @@ Provides-Extra: vlsir
|
|
|
97
99
|
[](https://choosealicense.com/licenses/mit/)
|
|
98
100
|
[](https://codecov.io/gh/gdsfactory/gdsfactory/tree/main/gplugins)
|
|
99
101
|
|
|
100
|
-
|
|
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
|
+
# gplugins 1.2.0
|
|
2
2
|
|
|
3
3
|
[](https://gdsfactory.github.io/gplugins/)
|
|
4
4
|
[](https://pypi.org/project/gplugins/)
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
[](https://choosealicense.com/licenses/mit/)
|
|
7
7
|
[](https://codecov.io/gh/gdsfactory/gdsfactory/tree/main/gplugins)
|
|
8
8
|
|
|
9
|
-
|
|
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.
|
|
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__ = ["
|
|
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
|
|
5
|
-
from gdsfactory.
|
|
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__ = ("
|
|
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.
|
|
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.
|
|
127
|
-
z_max_sim = np.
|
|
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
|
-
|
|
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
|
|
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=
|
|
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
|
|
|
@@ -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
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
24
|
+
filepath: PathType | None = None,
|
|
25
25
|
overwrite: bool = False,
|
|
26
26
|
**kwargs,
|
|
27
27
|
) -> pd.DataFrame:
|
{gplugins-1.1.4 → gplugins-1.2.0}/gplugins/path_length_analysis/path_length_analysis_from_gds.py
RENAMED
|
@@ -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.
|
|
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
|
-
|
|
297
|
+
ports_list = [component.ports[port_name] for port_name in consider_ports]
|
|
298
298
|
else:
|
|
299
299
|
# All ports
|
|
300
|
-
|
|
300
|
+
ports_list = component.ports
|
|
301
301
|
|
|
302
|
-
n_ports = len(
|
|
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,
|
|
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,
|
|
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"{
|
|
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 =
|
|
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 =
|
|
380
|
+
ports_poly = []
|
|
381
381
|
|
|
382
|
-
for port in
|
|
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 =
|
|
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
|
-
|
|
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)
|
|
@@ -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
|
-
|
|
425
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|