gplugins 1.3.1__tar.gz → 1.3.3__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.3.1 → gplugins-1.3.3}/PKG-INFO +9 -9
- {gplugins-1.3.1 → gplugins-1.3.3}/README.md +1 -1
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/__init__.py +1 -1
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/base_models/component.py +0 -11
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/get_component_with_net_layers.py +6 -8
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/get_effective_indices.py +14 -11
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/parse_layer_stack.py +7 -6
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/plot.py +18 -15
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/fdtdz/get_ports_fdtdz.py +4 -4
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/fdtdz/get_sparameters_fdtdz.py +4 -4
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/femwell/mode_solver.py +2 -2
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/netlist.py +5 -5
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/get_port_eigenmode.py +8 -8
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/get_simulation.py +4 -4
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/get_simulation_grating_farfield.py +10 -10
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/get_simulation_grating_fiber.py +4 -4
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/meep_adjoint_optimization.py +6 -6
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/define_polysurfaces.py +12 -7
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/get_mesh.py +1 -3
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/uz_xsection_mesh.py +7 -7
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/xyz_mesh.py +21 -16
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/drc/check_exclusion.py +2 -2
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/drc/check_inclusion.py +4 -4
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/drc/samples/drc_errors.py +6 -6
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/get_density.py +5 -5
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/get_netlist.py +3 -2
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/netlist_graph.py +3 -2
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/netlist_spice_reader.py +5 -3
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/plot_nets.py +3 -1
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/tests/test_density.py +2 -2
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/tests/test_drc_exclusion.py +2 -2
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/tests/test_drc_inclusion.py +4 -4
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/tests/test_plot_nets.py +7 -7
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/write_sparameters_lumerical.py +22 -13
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/meow/meow_eme.py +4 -4
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/path_length_analysis/path_length_analysis_from_gds.py +3 -3
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/path_length_analysis/test_pathlength_extraction.py +1 -1
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sentaurus/sde.py +6 -6
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sentaurus/sprocess.py +12 -12
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/component.py +37 -44
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/get_simulation_grating_coupler.py +1 -1
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/test_plot_simulation_grating_coupler.py +0 -15
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/vlsir/export_netlist.py +16 -10
- {gplugins-1.3.1 → gplugins-1.3.3}/pyproject.toml +17 -12
- {gplugins-1.3.1 → gplugins-1.3.3}/LICENSE +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/base_models/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/base_models/simulation.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/config.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/types.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/add_simulation_markers.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/async_helpers.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/cache.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/convert_sparameters.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/disable_print.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/get_capacitance.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/get_component_with_local_layers.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/get_scattering.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/get_sparameters_path.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/optical_constants.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/plot_csv.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/port_symmetries.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/common/utils/tests/test_get_component_with_new_port_layers.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/devsim/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/devsim/doping.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/devsim/get_simulation.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/devsim/get_simulation_xsection.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/devsim/get_solver.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/devsim/test_devsim.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/elmer/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/elmer/electrostatic.sif.j2 +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/elmer/get_capacitance.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/elmer/tests/test_elmer.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/fdtdz/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/fdtdz/get_epsilon_fdtdz.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/femwell/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/femwell/solve_thermal.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/femwell/test_mode_solver.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/Makefile +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/b64.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/gfviz.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/serve.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/static/b64.js +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/static/schemedit.js +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/static/schemedit.wasm +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/templates/example.json +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gfviz/templates/index.html +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/get_material.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/get_meep_geometry.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_eigenmode.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_materials.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_crossing.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_sparameterNxN/test_sparameterNxN_straight.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_crossing.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_straight.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameterNxN_symmetries_straight.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameter_straight_mpi_pool.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_crossing_symmetric.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_batch.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_mpi_pool.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep/test_sparameters_straight_symmetric.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/test_write_sparameters_meep.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/write_sparameters_grating.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/write_sparameters_meep.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/write_sparameters_meep_batch.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmeep/write_sparameters_meep_mpi.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/parse_component.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/parse_gds.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/tests/test_custom_names.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/tests/test_meshing_2D.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/tests/test_meshing_3D.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/gmsh/xy_xsection_mesh.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/dataprep/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/dataprep/regions.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/drc/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/drc/check_duplicated_cells.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/drc/check_space.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/drc/check_width.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/drc/count_drc.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/drc/write_drc.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/tests/test_dataprep_regions.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/tests/test_drc_space.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/tests/test_drc_width.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/tests/test_global_density.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/klayout/tests/test_netlist_spice_reader.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/README.md +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/interconnect.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/mapping_ubcpdk.yml +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/read.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/settings.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/tests/test_lumerical_read_sparameters.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/tests/test_netlist.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/tests/test_netlist_get_routes.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/lumerical/write_sparameters_lumerical_components.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/materials/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/materials/inorganic.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/materials/optical/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/materials/optical/optical_mat.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/materials/optical/refractive_index_info.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/materials/semiconductor/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/materials/semiconductor/semiconductor_mat.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/meow/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/meow/test_meow_simulation.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/coupler.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/find_coupling_vs_gap.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/find_mode_dispersion.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/find_modes.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/find_modes_cross_section.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/find_neff_ng_dw_dh.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/find_neff_vs_width.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/get_mode_solver_coupler.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/get_mode_solver_cross_section.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/get_mode_solver_rib.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/modes/neff_vs_width_nitride.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/modes/neff_vs_width_rib.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/modes/neff_vs_width_strip.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/neff_convergence_test.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/neff_vs_width.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/overlap.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/tests/test_dw_dh/test_dw_dh.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/tests/test_dw_dh/test_dw_dh.obtained.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/tests/test_dw_dh/test_dw_dh_dispersion.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/tests/test_dw_dh.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/tests/test_find_modes.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/tests/test_find_modes_dispersion.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/tests/test_neff_vs_width/test_neff_vs_width.obtained.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/tests/test_neff_vs_width.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/types.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/modes/waveguide.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/palace/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/palace/driven.json +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/palace/electrostatic.json +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/palace/get_capacitance.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/palace/get_scattering.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/palace/tests/test_palace.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/path_length_analysis/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/path_length_analysis/path_length_analysis.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/photonic_circuit_models/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/photonic_circuit_models/coupler.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/photonic_circuit_models/fsr.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/photonic_circuit_models/heater.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/photonic_circuit_models/mzi.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/photonic_circuit_models/ring.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/process/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/process/diffusion.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/process/implant_tables.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/process/pysrim.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/process/silicon.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/process/skew/antimony_si_skew.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/process/skew/arsenic_si_skew.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/process/skew/boron_si_skew.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/process/skew/phosphorus_si_skew.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/build_model.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/integrations/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/integrations/femwell_waveguide_model.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/integrations/meep_FDTD_model.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/integrations/meow_eme_model.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/interpolators.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/mlp.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/models.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/parameter.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/plot_model.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/read.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/tests/test_mzi.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.obtained.yml +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/tests/test_mzi_lattice/test_mzi_lattice.yml +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/tests/test_mzi_lattice.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sax/tests/test_parameters.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sentaurus/mask_sde.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sentaurus/mask_sprocess.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sentaurus/sdevice.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/sentaurus/svisual.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/spice/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/spice/spice_to_yaml.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/spice/tests/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/spice/tests/test_interconnect.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/get_results.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/materials.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/modes.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/test_component_modeler.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/test_materials.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/test_modes/test_sweep_width.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/test_modes/test_sweep_width.obtained.csv +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/test_modes_coupler.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/test_modes_waveguide.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/test_write_sparameters.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/tests_sparameters/sim_ref.yaml +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/tests/tests_sparameters/test_write_sparameters_grating_coupler.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/types.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/util.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/tidy3d/write_sparameters_grating_coupler.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/typings.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/vlsir/__init__.py +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/vlsir/tests/resources/pads_correct.cir +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/vlsir/tests/resources/pads_correct.scs +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/vlsir/tests/resources/pads_correct.sp +0 -0
- {gplugins-1.3.1 → gplugins-1.3.3}/gplugins/vlsir/tests/test_vlsir.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gplugins
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.3
|
|
4
4
|
Summary: gdsfactory plugins
|
|
5
5
|
Keywords: python
|
|
6
6
|
Author-email: gdsfactory <contact@gdsfactory.com>
|
|
@@ -11,24 +11,25 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
12
12
|
Classifier: Operating System :: OS Independent
|
|
13
13
|
License-File: LICENSE
|
|
14
|
-
Requires-Dist: gdsfactory>=9.
|
|
14
|
+
Requires-Dist: gdsfactory>=9.3.5
|
|
15
15
|
Requires-Dist: pint
|
|
16
16
|
Requires-Dist: gdstk
|
|
17
17
|
Requires-Dist: tqdm
|
|
18
18
|
Requires-Dist: numpy
|
|
19
|
+
Requires-Dist: xarray==2025.1.2
|
|
19
20
|
Requires-Dist: pre-commit ; extra == "dev"
|
|
20
21
|
Requires-Dist: pytest ; extra == "dev"
|
|
21
22
|
Requires-Dist: pytest-cov ; extra == "dev"
|
|
22
23
|
Requires-Dist: pytest_regressions ; extra == "dev"
|
|
23
24
|
Requires-Dist: pyswarms ; extra == "dev"
|
|
24
|
-
Requires-Dist: autograd ; extra == "dev"
|
|
25
25
|
Requires-Dist: devsim ; extra == "devsim"
|
|
26
26
|
Requires-Dist: pyvista<=0.43.8 ; extra == "devsim"
|
|
27
|
-
Requires-Dist: tidy3d>=2.
|
|
27
|
+
Requires-Dist: tidy3d>=2.8.2,<2.9 ; extra == "devsim"
|
|
28
28
|
Requires-Dist: jupytext ; extra == "docs"
|
|
29
29
|
Requires-Dist: matplotlib ; extra == "docs"
|
|
30
30
|
Requires-Dist: jupyter-book~=1.0 ; extra == "docs"
|
|
31
31
|
Requires-Dist: pyvista[all]<=0.43.8 ; extra == "docs"
|
|
32
|
+
Requires-Dist: bokeh ; extra == "docs"
|
|
32
33
|
Requires-Dist: femwell~=0.1.11 ; extra == "femwell"
|
|
33
34
|
Requires-Dist: meshwell~=1.0.7 ; extra == "femwell"
|
|
34
35
|
Requires-Dist: jinja2 ; extra == "gfviz"
|
|
@@ -56,9 +57,8 @@ Requires-Dist: towncrier ; extra == "maintainer"
|
|
|
56
57
|
Requires-Dist: jax>=0.4.26 ; extra == "meow"
|
|
57
58
|
Requires-Dist: jaxlib>=0.4.26 ; extra == "meow"
|
|
58
59
|
Requires-Dist: flax>=0.8.2 ; extra == "meow"
|
|
59
|
-
Requires-Dist: meow-sim>=0.
|
|
60
|
-
Requires-Dist: tidy3d>=2.
|
|
61
|
-
Requires-Dist: scipy<=1.14.1 ; extra == "meow"
|
|
60
|
+
Requires-Dist: meow-sim>=0.13,<0.14 ; extra == "meow"
|
|
61
|
+
Requires-Dist: tidy3d>=2.8.2,<2.9 ; extra == "meow"
|
|
62
62
|
Requires-Dist: jax>=0.4.26 ; extra == "sax"
|
|
63
63
|
Requires-Dist: jaxlib>=0.4.26 ; extra == "sax"
|
|
64
64
|
Requires-Dist: flax>=0.8.2 ; extra == "sax"
|
|
@@ -69,7 +69,7 @@ Requires-Dist: ray ; 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.8.2,<2.9 ; extra == "tidy3d"
|
|
73
73
|
Requires-Dist: meshio ; extra == "tidy3d"
|
|
74
74
|
Requires-Dist: numpy ; extra == "tidy3d"
|
|
75
75
|
Requires-Dist: meshwell~=1.0.7 ; extra == "tidy3d"
|
|
@@ -90,7 +90,7 @@ Provides-Extra: schematic
|
|
|
90
90
|
Provides-Extra: tidy3d
|
|
91
91
|
Provides-Extra: vlsir
|
|
92
92
|
|
|
93
|
-
# gplugins 1.3.
|
|
93
|
+
# gplugins 1.3.3
|
|
94
94
|
|
|
95
95
|
[](https://gdsfactory.github.io/gplugins/)
|
|
96
96
|
[](https://pypi.org/project/gplugins/)
|
|
@@ -248,14 +248,3 @@ class LayeredComponentBase(BaseModel):
|
|
|
248
248
|
def get_layer_center(self, layername: str) -> tuple[float, float, float]:
|
|
249
249
|
bbox = self.get_layer_bbox(layername)
|
|
250
250
|
return tuple(np.mean(bbox, axis=0))
|
|
251
|
-
|
|
252
|
-
def get_vertices(self, layer_name: str, buffer: float = 0.0):
|
|
253
|
-
poly = self.polygons[layer_name].buffer(buffer, join_style="mitre")
|
|
254
|
-
match poly:
|
|
255
|
-
case MultiPolygon():
|
|
256
|
-
verts = tuple(tuple(p.exterior.coords) for p in poly.geoms)
|
|
257
|
-
case Polygon():
|
|
258
|
-
verts = (tuple(poly.exterior.coords),)
|
|
259
|
-
case _:
|
|
260
|
-
raise TypeError(f"Invalid polygon type: {type(poly)}")
|
|
261
|
-
return verts
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import copy
|
|
2
2
|
|
|
3
3
|
import gdsfactory as gf
|
|
4
|
+
import klayout.db as kdb
|
|
4
5
|
from gdsfactory import Component
|
|
5
6
|
from gdsfactory.technology import LayerStack, LogicalLayer
|
|
6
7
|
|
|
@@ -35,8 +36,8 @@ def get_component_layer_stack(
|
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
def get_component_with_net_layers(
|
|
38
|
-
component,
|
|
39
|
-
layer_stack,
|
|
39
|
+
component: Component,
|
|
40
|
+
layer_stack: LayerStack,
|
|
40
41
|
port_names: list[str],
|
|
41
42
|
delimiter: str = "#",
|
|
42
43
|
new_layers_init: tuple[int, int] = (10010, 0),
|
|
@@ -74,7 +75,9 @@ def get_component_with_net_layers(
|
|
|
74
75
|
net_component = net_component.remove_layers(layers=(port.layer,))
|
|
75
76
|
for polygon in polygons:
|
|
76
77
|
# If polygon belongs to port, create a unique new layer, and add the polygon to it
|
|
77
|
-
if polygon.sized(3 * gf.kcl.dbu).inside(
|
|
78
|
+
if polygon.sized(int(3 * gf.kcl.dbu)).inside(
|
|
79
|
+
kdb.Point(*port.to_itype().center)
|
|
80
|
+
):
|
|
78
81
|
# if gdstk.inside(
|
|
79
82
|
# [port.center],
|
|
80
83
|
# gdstk.offset(gdstk.Polygon(polygon), gf.get_active_pdk().grid_size),
|
|
@@ -111,8 +114,3 @@ def get_component_with_net_layers(
|
|
|
111
114
|
|
|
112
115
|
net_component.name = f"{component.name}_net_layers"
|
|
113
116
|
return net_component
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if __name__ == "__main__":
|
|
117
|
-
c = get_component_with_net_layers()
|
|
118
|
-
c.show()
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
-
from typing import Literal
|
|
5
|
+
from typing import Any, Literal, cast
|
|
6
6
|
|
|
7
7
|
import numpy as np
|
|
8
|
+
import numpy.typing as npt
|
|
8
9
|
from scipy.optimize import fsolve
|
|
9
10
|
|
|
10
11
|
|
|
@@ -19,9 +20,9 @@ def get_effective_indices(
|
|
|
19
20
|
"""Returns the effective refractive indices for a 1D mode.
|
|
20
21
|
|
|
21
22
|
Args:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
core_material: Refractive index of the core material.
|
|
24
|
+
nsubstrate: Refractive index of the substrate.
|
|
25
|
+
clad_materialding: Refractive index of the cladding.
|
|
25
26
|
thickness: Thickness of the film in um.
|
|
26
27
|
wavelength: Wavelength in um.
|
|
27
28
|
polarization: Either "te" or "tm".
|
|
@@ -66,18 +67,20 @@ def get_effective_indices(
|
|
|
66
67
|
|
|
67
68
|
k_0 = 2 * np.pi / wavelength
|
|
68
69
|
|
|
69
|
-
def k_f(e_eff):
|
|
70
|
+
def k_f(e_eff: npt.NDArray[np.floating[Any]]) -> npt.NDArray[np.floating[Any]]:
|
|
70
71
|
return k_0 * np.sqrt(epsilon_core - e_eff) / (epsilon_core if tm else 1)
|
|
71
72
|
|
|
72
|
-
def k_s(e_eff):
|
|
73
|
+
def k_s(e_eff: npt.NDArray[np.floating[Any]]) -> npt.NDArray[np.floating[Any]]:
|
|
73
74
|
return (
|
|
74
75
|
k_0 * np.sqrt(e_eff - epsilon_substrate) / (epsilon_substrate if tm else 1)
|
|
75
76
|
)
|
|
76
77
|
|
|
77
|
-
def k_c(e_eff):
|
|
78
|
+
def k_c(e_eff: npt.NDArray[np.floating[Any]]) -> npt.NDArray[np.floating[Any]]:
|
|
78
79
|
return k_0 * np.sqrt(e_eff - epsilon_cladding) / (epsilon_cladding if tm else 1)
|
|
79
80
|
|
|
80
|
-
def objective(
|
|
81
|
+
def objective(
|
|
82
|
+
e_eff: npt.NDArray[np.floating[Any]],
|
|
83
|
+
) -> npt.NDArray[np.floating[Any]]:
|
|
81
84
|
return 1 / np.tan(k_f(e_eff) * thickness) - (
|
|
82
85
|
k_f(e_eff) ** 2 - k_s(e_eff) * k_c(e_eff)
|
|
83
86
|
) / (k_f(e_eff) * (k_s(e_eff) + k_c(e_eff)))
|
|
@@ -92,14 +95,14 @@ def get_effective_indices(
|
|
|
92
95
|
return []
|
|
93
96
|
|
|
94
97
|
# and then use fsolve to get exact indices
|
|
95
|
-
indices_temp = fsolve(objective, indices_temp)
|
|
98
|
+
indices_temp = cast(npt.NDArray[np.floating[Any]], fsolve(objective, indices_temp))
|
|
96
99
|
|
|
97
|
-
indices = []
|
|
100
|
+
indices: list[float] = []
|
|
98
101
|
for index in indices_temp:
|
|
99
102
|
if not any(np.isclose(index, i, atol=1e-5) for i in indices):
|
|
100
103
|
indices.append(index)
|
|
101
104
|
|
|
102
|
-
return np.sqrt(indices).tolist()
|
|
105
|
+
return cast(list[float], np.sqrt(indices).tolist())
|
|
103
106
|
|
|
104
107
|
|
|
105
108
|
def test_effective_index() -> None:
|
|
@@ -26,7 +26,7 @@ def list_unique_layer_stack_z(
|
|
|
26
26
|
def map_unique_layer_stack_z(
|
|
27
27
|
layer_stack: LayerStack,
|
|
28
28
|
include_zmax: bool = True,
|
|
29
|
-
):
|
|
29
|
+
) -> dict[str, set[float]]:
|
|
30
30
|
"""Map unique LayerStack z coordinates to various layers.
|
|
31
31
|
|
|
32
32
|
Args:
|
|
@@ -57,7 +57,7 @@ def map_unique_layer_stack_z(
|
|
|
57
57
|
def get_layer_overlaps_z(
|
|
58
58
|
layer_stack: LayerStack,
|
|
59
59
|
include_zmax: bool = True,
|
|
60
|
-
):
|
|
60
|
+
) -> dict[float, set[str]]:
|
|
61
61
|
"""Maps layers to unique LayerStack z coordinates.
|
|
62
62
|
|
|
63
63
|
Args:
|
|
@@ -67,7 +67,7 @@ def get_layer_overlaps_z(
|
|
|
67
67
|
"""
|
|
68
68
|
z_grid = list_unique_layer_stack_z(layer_stack)
|
|
69
69
|
unique_z_dict = map_unique_layer_stack_z(layer_stack, include_zmax)
|
|
70
|
-
intersection_z_dict = {}
|
|
70
|
+
intersection_z_dict: dict[float, set[str]] = {}
|
|
71
71
|
for z in z_grid:
|
|
72
72
|
current_layers = {
|
|
73
73
|
layername for layername, layer_zs in unique_z_dict.items() if z in layer_zs
|
|
@@ -77,11 +77,12 @@ def get_layer_overlaps_z(
|
|
|
77
77
|
return intersection_z_dict
|
|
78
78
|
|
|
79
79
|
|
|
80
|
-
def get_layers_at_z(layer_stack: LayerStack, z: float):
|
|
80
|
+
def get_layers_at_z(layer_stack: LayerStack, z: float) -> list[str]:
|
|
81
81
|
"""Returns layers present at a given z-position.
|
|
82
82
|
|
|
83
83
|
Args:
|
|
84
84
|
layer_stack: LayerStack
|
|
85
|
+
z: float
|
|
85
86
|
Returns:
|
|
86
87
|
List of layers
|
|
87
88
|
"""
|
|
@@ -93,11 +94,11 @@ def get_layers_at_z(layer_stack: LayerStack, z: float):
|
|
|
93
94
|
raise ValueError("Requested z-value is above the minimum layer_stack z")
|
|
94
95
|
for z_unique in intersection_z_dict.keys():
|
|
95
96
|
if z <= z_unique:
|
|
96
|
-
return intersection_z_dict[z_unique]
|
|
97
|
+
return list(intersection_z_dict[z_unique])
|
|
97
98
|
raise AssertionError("Could not find z-value in layer_stack z-range.")
|
|
98
99
|
|
|
99
100
|
|
|
100
|
-
def order_layer_stack(layer_stack: LayerStack):
|
|
101
|
+
def order_layer_stack(layer_stack: LayerStack) -> list[str]:
|
|
101
102
|
"""Orders layer_stack according to mesh_order.
|
|
102
103
|
|
|
103
104
|
Args:
|
|
@@ -4,13 +4,17 @@ import re
|
|
|
4
4
|
from collections.abc import Sequence
|
|
5
5
|
from functools import partial
|
|
6
6
|
from itertools import combinations
|
|
7
|
+
from typing import Any
|
|
7
8
|
|
|
8
|
-
import gdsfactory as gf
|
|
9
9
|
import matplotlib.pyplot as plt
|
|
10
10
|
import numpy as np
|
|
11
|
+
import numpy.typing as npt
|
|
12
|
+
from matplotlib.axes import Axes
|
|
11
13
|
|
|
12
14
|
|
|
13
|
-
def _check_ports(
|
|
15
|
+
def _check_ports(
|
|
16
|
+
sp: dict[str, npt.NDArray[np.floating[Any]]], ports: Sequence[str]
|
|
17
|
+
) -> None:
|
|
14
18
|
"""Ensure ports exist in Sparameters."""
|
|
15
19
|
for port in ports:
|
|
16
20
|
if port not in sp:
|
|
@@ -18,7 +22,7 @@ def _check_ports(sp: dict[str, np.ndarray], ports: Sequence[str]) -> None:
|
|
|
18
22
|
|
|
19
23
|
|
|
20
24
|
def plot_sparameters(
|
|
21
|
-
sp: dict[str, np.
|
|
25
|
+
sp: dict[str, npt.NDArray[np.floating[Any]]],
|
|
22
26
|
logscale: bool = True,
|
|
23
27
|
plot_phase: bool = False,
|
|
24
28
|
keys: tuple[str, ...] | None = None,
|
|
@@ -39,7 +43,7 @@ def plot_sparameters(
|
|
|
39
43
|
|
|
40
44
|
"""
|
|
41
45
|
w = sp["wavelengths"] * units
|
|
42
|
-
keys = keys or
|
|
46
|
+
keys = keys or tuple(key for key in sp if not key.lower().startswith("wav"))
|
|
43
47
|
|
|
44
48
|
for key in keys:
|
|
45
49
|
if with_simpler_input_keys:
|
|
@@ -74,9 +78,12 @@ def plot_sparameters(
|
|
|
74
78
|
|
|
75
79
|
|
|
76
80
|
def plot_imbalance(
|
|
77
|
-
sp: dict[str, np.
|
|
81
|
+
sp: dict[str, npt.NDArray[np.floating[Any]]],
|
|
82
|
+
ports: Sequence[str],
|
|
83
|
+
ax: Axes | None = None,
|
|
78
84
|
) -> None:
|
|
79
85
|
"""Plots imbalance in dB for coupler.
|
|
86
|
+
|
|
80
87
|
The imbalance is always defined between two ports, so this function plots the
|
|
81
88
|
imbalance between all unique port combinations.
|
|
82
89
|
|
|
@@ -107,7 +114,9 @@ def plot_imbalance(
|
|
|
107
114
|
|
|
108
115
|
|
|
109
116
|
def plot_loss(
|
|
110
|
-
sp: dict[str, np.
|
|
117
|
+
sp: dict[str, npt.NDArray[np.floating[Any]]],
|
|
118
|
+
ports: Sequence[str],
|
|
119
|
+
ax: Axes | None = None,
|
|
111
120
|
) -> None:
|
|
112
121
|
"""Plots loss dB for coupler.
|
|
113
122
|
|
|
@@ -137,7 +146,9 @@ def plot_loss(
|
|
|
137
146
|
|
|
138
147
|
|
|
139
148
|
def plot_reflection(
|
|
140
|
-
sp: dict[str, np.
|
|
149
|
+
sp: dict[str, npt.NDArray[np.floating[Any]]],
|
|
150
|
+
ports: Sequence[str],
|
|
151
|
+
ax: Axes | None = None,
|
|
141
152
|
) -> None:
|
|
142
153
|
"""Plots reflection in dB for coupler.
|
|
143
154
|
|
|
@@ -172,11 +183,3 @@ plot_imbalance1x2 = partial(plot_imbalance, ports=["o1@0,o2@0", "o1@0,o3@0"])
|
|
|
172
183
|
plot_imbalance2x2 = partial(plot_imbalance, ports=["o1@0,o3@0", "o1@0,o4@0"])
|
|
173
184
|
plot_reflection1x2 = partial(plot_reflection, ports=["o1@0,o1@0"])
|
|
174
185
|
plot_reflection2x2 = partial(plot_reflection, ports=["o1@0,o1@0", "o2@0,o1@0"])
|
|
175
|
-
|
|
176
|
-
if __name__ == "__main__":
|
|
177
|
-
import gplugins as sim
|
|
178
|
-
|
|
179
|
-
sp = sim.get_sparameters_data_tidy3d(component=gf.components.mmi1x2)
|
|
180
|
-
# plot_sparameters(sp, logscale=False, keys=["o1@0,o2@0"])
|
|
181
|
-
# plot_sparameters(sp, logscale=False, keys=["S21"])
|
|
182
|
-
# plt.show()
|
|
@@ -224,8 +224,8 @@ if __name__ == "__main__":
|
|
|
224
224
|
omega=omega,
|
|
225
225
|
port=c.ports["o1"],
|
|
226
226
|
epsilon=epsilon,
|
|
227
|
-
xmin=c.
|
|
228
|
-
ymin=c.
|
|
227
|
+
xmin=c.xmin,
|
|
228
|
+
ymin=c.ymin,
|
|
229
229
|
nm_per_pixel=nm_per_pixel,
|
|
230
230
|
port_extent_xy=1,
|
|
231
231
|
)
|
|
@@ -234,8 +234,8 @@ if __name__ == "__main__":
|
|
|
234
234
|
port=c.ports["o1"],
|
|
235
235
|
epsilon_port=epsilon_port,
|
|
236
236
|
excitation=excitation,
|
|
237
|
-
xmin=c.
|
|
238
|
-
ymin=c.
|
|
237
|
+
xmin=c.xmin,
|
|
238
|
+
ymin=c.ymin,
|
|
239
239
|
zmin=zmin,
|
|
240
240
|
nm_per_pixel=1000,
|
|
241
241
|
figsize=(11, 4),
|
|
@@ -93,8 +93,8 @@ def get_sparameters_fdtdz(
|
|
|
93
93
|
"""
|
|
94
94
|
# Checks from gmeep
|
|
95
95
|
component_ref = component.ref()
|
|
96
|
-
component_ref.
|
|
97
|
-
component_ref.
|
|
96
|
+
component_ref.x = 0
|
|
97
|
+
component_ref.y = 0
|
|
98
98
|
|
|
99
99
|
optical_port_names = list(component_ref.get_ports_dict(port_type="optical").keys())
|
|
100
100
|
|
|
@@ -129,8 +129,8 @@ def get_sparameters_fdtdz(
|
|
|
129
129
|
omega=omega,
|
|
130
130
|
port=component.ports[portname],
|
|
131
131
|
epsilon=epsilon,
|
|
132
|
-
xmin=component_extended.
|
|
133
|
-
ymin=component_extended.
|
|
132
|
+
xmin=component_extended.xmin,
|
|
133
|
+
ymin=component_extended.ymin,
|
|
134
134
|
nm_per_pixel=nm_per_pixel,
|
|
135
135
|
port_extent_xy=port_margin,
|
|
136
136
|
)
|
|
@@ -68,8 +68,8 @@ def compute_cross_section_modes(
|
|
|
68
68
|
"""
|
|
69
69
|
# Get meshable component from cross-section
|
|
70
70
|
c = gf.components.straight(length=10, cross_section=cross_section)
|
|
71
|
-
dx = c.
|
|
72
|
-
dy = c.
|
|
71
|
+
dx = c.xsize
|
|
72
|
+
dy = c.ysize
|
|
73
73
|
|
|
74
74
|
xsection_bounds = [
|
|
75
75
|
[dx / 2, dy - wafer_padding],
|
|
@@ -167,10 +167,10 @@ def get_ports(child, parent=None):
|
|
|
167
167
|
else:
|
|
168
168
|
ports = ports1
|
|
169
169
|
|
|
170
|
-
x0 = c.
|
|
171
|
-
x1 = c.
|
|
172
|
-
y0 = c.
|
|
173
|
-
y1 = c.
|
|
170
|
+
x0 = c.xmin
|
|
171
|
+
x1 = c.xmax
|
|
172
|
+
y0 = c.ymin
|
|
173
|
+
y1 = c.ymax
|
|
174
174
|
x0, x1 = min(x0, x1), max(x0, x1)
|
|
175
175
|
y0, y1 = min(y0, y1), max(y0, y1)
|
|
176
176
|
|
|
@@ -271,7 +271,7 @@ def _line_dists(points, start, end):
|
|
|
271
271
|
|
|
272
272
|
|
|
273
273
|
def sort_ports(ports) -> list[gf.Port]:
|
|
274
|
-
return natsorted(ports, key=lambda port: port.
|
|
274
|
+
return natsorted(ports, key=lambda port: port.x)
|
|
275
275
|
|
|
276
276
|
|
|
277
277
|
def wrap_component_in_netlist(name):
|
|
@@ -19,10 +19,10 @@ def get_domain_measurements(sim, output_plane, frequency, resolution=0):
|
|
|
19
19
|
# Get domain measurements
|
|
20
20
|
sim_center, sim_size = get_2D_dimensions(sim, output_plane)
|
|
21
21
|
|
|
22
|
-
xmin = sim_center.
|
|
23
|
-
xmax = sim_center.
|
|
24
|
-
ymin = sim_center.
|
|
25
|
-
ymax = sim_center.
|
|
22
|
+
xmin = sim_center.x- sim_size.x/ 2
|
|
23
|
+
xmax = sim_center.x+ sim_size.x/ 2
|
|
24
|
+
ymin = sim_center.y- sim_size.y/ 2
|
|
25
|
+
ymax = sim_center.y+ sim_size.y/ 2
|
|
26
26
|
zmin = sim_center.z - sim_size.z / 2
|
|
27
27
|
zmax = sim_center.z + sim_size.z / 2
|
|
28
28
|
|
|
@@ -31,12 +31,12 @@ def get_domain_measurements(sim, output_plane, frequency, resolution=0):
|
|
|
31
31
|
Ny = int((ymax - ymin) * grid_resolution + 1)
|
|
32
32
|
Nz = int((zmax - zmin) * grid_resolution + 1)
|
|
33
33
|
|
|
34
|
-
if sim_size.
|
|
34
|
+
if sim_size.x== 0:
|
|
35
35
|
# Plot y on x axis, z on y axis (YZ plane)
|
|
36
36
|
xtics = np.array([sim_center.x])
|
|
37
37
|
ytics = np.linspace(ymin, ymax, Ny)
|
|
38
38
|
ztics = np.linspace(zmin, zmax, Nz)
|
|
39
|
-
elif sim_size.
|
|
39
|
+
elif sim_size.y== 0:
|
|
40
40
|
# Plot x on x axis, z on y axis (XZ plane)
|
|
41
41
|
xtics = np.linspace(xmin, xmax, Nx)
|
|
42
42
|
ytics = np.array([sim_center.y])
|
|
@@ -117,10 +117,10 @@ def get_port_2Dx_eigenmode(
|
|
|
117
117
|
# The output of this function is slightly different then MPB (there is no mode_solver object)
|
|
118
118
|
# Format like the Mode objects in gdsfactory/simulation/modes to reuse modes' functions
|
|
119
119
|
if not choose_yz:
|
|
120
|
-
ny = int(size.
|
|
120
|
+
ny = int(size.y * sim.resolution)
|
|
121
121
|
nz = int(size.z * sim.resolution)
|
|
122
122
|
y = np.linspace(
|
|
123
|
-
center.
|
|
123
|
+
center.y - size.y / 2, center.y + size.y / 2, ny
|
|
124
124
|
) # eigenmode solver and sim res are technically different
|
|
125
125
|
z = np.linspace(center.z - size.z / 2, center.z + size.z / 2, nz)
|
|
126
126
|
yy, zz = np.meshgrid(y, z, indexing="ij")
|
|
@@ -144,8 +144,8 @@ def get_simulation(
|
|
|
144
144
|
|
|
145
145
|
dummy_component = gf.Component()
|
|
146
146
|
component_ref = dummy_component << component
|
|
147
|
-
component_ref.
|
|
148
|
-
component_ref.
|
|
147
|
+
component_ref.x = 0
|
|
148
|
+
component_ref.y = 0
|
|
149
149
|
|
|
150
150
|
wavelength = (wavelength_start + wavelength_stop) / 2
|
|
151
151
|
|
|
@@ -195,8 +195,8 @@ def get_simulation(
|
|
|
195
195
|
cell_thickness = tpml + zmargin_bot + t_core + zmargin_top + tpml if is_3d else 0
|
|
196
196
|
|
|
197
197
|
cell_size = mp.Vector3(
|
|
198
|
-
component.
|
|
199
|
-
component.
|
|
198
|
+
component.xsize + 2 * tpml,
|
|
199
|
+
component.ysize + 2 * tpml,
|
|
200
200
|
cell_thickness,
|
|
201
201
|
)
|
|
202
202
|
|
|
@@ -172,7 +172,7 @@ def get_simulation_grating_farfield(
|
|
|
172
172
|
0.5 * sz - pml_thickness + y_offset - 1,
|
|
173
173
|
)
|
|
174
174
|
fiber_port_size = mp.Vector3(3 * fiber_core_diameter, 0, 0)
|
|
175
|
-
# fiber_port_direction = mp.Vector3(y=-1).
|
|
175
|
+
# fiber_port_direction = mp.Vector3(y=-1).rotate(mp.Vector3(z=1), -1 * fiber_angle)
|
|
176
176
|
|
|
177
177
|
waveguide_port_center = mp.Vector3(-sxy / 4)
|
|
178
178
|
waveguide_port_size = mp.Vector3(0, 2 * clad_thickness - 0.2)
|
|
@@ -193,8 +193,8 @@ def get_simulation_grating_farfield(
|
|
|
193
193
|
x=grating_start + fiber_xposition - fiber_offset_from_angle
|
|
194
194
|
),
|
|
195
195
|
size=mp.Vector3(fiber_clad, hfiber_geom),
|
|
196
|
-
e1=mp.Vector3(x=1).
|
|
197
|
-
e2=mp.Vector3(y=1).
|
|
196
|
+
e1=mp.Vector3(x=1).rotate(mp.Vector3(z=1), -1 * fiber_angle),
|
|
197
|
+
e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), -1 * fiber_angle),
|
|
198
198
|
)
|
|
199
199
|
]
|
|
200
200
|
|
|
@@ -205,8 +205,8 @@ def get_simulation_grating_farfield(
|
|
|
205
205
|
x=grating_start + fiber_xposition - fiber_offset_from_angle
|
|
206
206
|
),
|
|
207
207
|
size=mp.Vector3(fiber_core_diameter, hfiber_geom),
|
|
208
|
-
e1=mp.Vector3(x=1).
|
|
209
|
-
e2=mp.Vector3(y=1).
|
|
208
|
+
e1=mp.Vector3(x=1).rotate(mp.Vector3(z=1), -1 * fiber_angle),
|
|
209
|
+
e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), -1 * fiber_angle),
|
|
210
210
|
)
|
|
211
211
|
)
|
|
212
212
|
|
|
@@ -415,8 +415,8 @@ def get_port_1D_eigenmode(
|
|
|
415
415
|
frequency=fsrc,
|
|
416
416
|
)
|
|
417
417
|
ys_waveguide = np.linspace(
|
|
418
|
-
center_waveguide.
|
|
419
|
-
center_waveguide.
|
|
418
|
+
center_waveguide.y - size_waveguide.y / 2,
|
|
419
|
+
center_waveguide.y + size_waveguide.y / 2,
|
|
420
420
|
int(sim.resolution * size_waveguide.y),
|
|
421
421
|
)
|
|
422
422
|
x_waveguide = center_waveguide.x
|
|
@@ -426,14 +426,14 @@ def get_port_1D_eigenmode(
|
|
|
426
426
|
direction=mp.NO_DIRECTION,
|
|
427
427
|
where=mp.Volume(center=center_fiber, size=size_fiber),
|
|
428
428
|
band_num=band_num,
|
|
429
|
-
kpoint=mp.Vector3(0, fsrc * 1.45, 0).
|
|
429
|
+
kpoint=mp.Vector3(0, fsrc * 1.45, 0).rotate(
|
|
430
430
|
mp.Vector3(z=1), -1 * np.radians(fiber_angle_deg)
|
|
431
431
|
), # Hardcoded index for now, pull from simulation eventually
|
|
432
432
|
frequency=fsrc,
|
|
433
433
|
)
|
|
434
434
|
xs_fiber = np.linspace(
|
|
435
|
-
center_fiber.
|
|
436
|
-
center_fiber.
|
|
435
|
+
center_fiber.x - size_fiber.x / 2,
|
|
436
|
+
center_fiber.x + size_fiber.x / 2,
|
|
437
437
|
int(sim.resolution * size_fiber.x),
|
|
438
438
|
)
|
|
439
439
|
y_fiber = center_fiber.y
|
|
@@ -501,8 +501,8 @@ def get_port_1D_eigenmode(
|
|
|
501
501
|
frequency=fsrc,
|
|
502
502
|
)
|
|
503
503
|
ys_waveguide = np.linspace(
|
|
504
|
-
center_waveguide.
|
|
505
|
-
center_waveguide.
|
|
504
|
+
center_waveguide.y - size_waveguide.y / 2,
|
|
505
|
+
center_waveguide.y + size_waveguide.y / 2,
|
|
506
506
|
int(sim.resolution * size_waveguide.y),
|
|
507
507
|
)
|
|
508
508
|
x_waveguide = center_waveguide.x
|
|
@@ -518,8 +518,8 @@ def get_port_1D_eigenmode(
|
|
|
518
518
|
frequency=fsrc,
|
|
519
519
|
)
|
|
520
520
|
xs_fiber = np.linspace(
|
|
521
|
-
center_fiber.
|
|
522
|
-
center_fiber.
|
|
521
|
+
center_fiber.x - size_fiber.x / 2,
|
|
522
|
+
center_fiber.x + size_fiber.x / 2,
|
|
523
523
|
int(sim.resolution * size_fiber.x),
|
|
524
524
|
)
|
|
525
525
|
y_fiber = center_fiber.y
|
|
@@ -151,8 +151,8 @@ def get_meep_adjoint_optimizer(
|
|
|
151
151
|
Vector3(*cell_size)
|
|
152
152
|
if cell_size
|
|
153
153
|
else Vector3(
|
|
154
|
-
c.
|
|
155
|
-
c.
|
|
154
|
+
c.xsize + 2 * sim.boundary_layers[0].thickness,
|
|
155
|
+
c.ysize + 2 * sim.boundary_layers[0].thickness,
|
|
156
156
|
cell_thickness,
|
|
157
157
|
)
|
|
158
158
|
)
|
|
@@ -262,10 +262,10 @@ def get_component_from_sim(
|
|
|
262
262
|
"""
|
|
263
263
|
grid_resolution = upscale_factor * sim.resolution
|
|
264
264
|
sim_center, sim_size = get_2D_dimensions(sim, output_plane=None)
|
|
265
|
-
xmin = sim_center.
|
|
266
|
-
xmax = sim_center.
|
|
267
|
-
ymin = sim_center.
|
|
268
|
-
ymax = sim_center.
|
|
265
|
+
xmin = sim_center.x - sim_size.x / 2
|
|
266
|
+
xmax = sim_center.x + sim_size.x / 2
|
|
267
|
+
ymin = sim_center.y - sim_size.y / 2
|
|
268
|
+
ymax = sim_center.y + sim_size.y / 2
|
|
269
269
|
Nx = int((xmax - xmin) * grid_resolution + 1)
|
|
270
270
|
Ny = int((ymax - ymin) * grid_resolution + 1)
|
|
271
271
|
xtics = np.linspace(xmin, xmax, Nx)
|
|
@@ -6,16 +6,16 @@ from shapely.affinity import scale
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
def define_polysurfaces(
|
|
9
|
-
polygons_dict: dict,
|
|
9
|
+
polygons_dict: dict[str, Any],
|
|
10
10
|
layer_stack: LayerStack,
|
|
11
|
-
layer_physical_map: dict,
|
|
12
|
-
layer_meshbool_map: dict,
|
|
11
|
+
layer_physical_map: dict[str, Any],
|
|
12
|
+
layer_meshbool_map: dict[str, Any],
|
|
13
13
|
model: Any,
|
|
14
|
-
resolutions: dict,
|
|
14
|
+
resolutions: dict[str, Any] | None = None,
|
|
15
15
|
scale_factor: float = 1,
|
|
16
|
-
):
|
|
16
|
+
) -> list[PolySurface]:
|
|
17
17
|
"""Define meshwell polysurfaces dimtags from gdsfactory information."""
|
|
18
|
-
polysurfaces_list = []
|
|
18
|
+
polysurfaces_list: list[PolySurface] = []
|
|
19
19
|
|
|
20
20
|
if resolutions is None:
|
|
21
21
|
resolutions = {}
|
|
@@ -24,6 +24,11 @@ def define_polysurfaces(
|
|
|
24
24
|
if polygons_dict[layername].is_empty:
|
|
25
25
|
continue
|
|
26
26
|
|
|
27
|
+
layer_stack_ = layer_stack.layers.get(layername)
|
|
28
|
+
|
|
29
|
+
if layer_stack_ is None:
|
|
30
|
+
continue
|
|
31
|
+
|
|
27
32
|
polysurfaces_list.append(
|
|
28
33
|
PolySurface(
|
|
29
34
|
polygons=scale(
|
|
@@ -33,7 +38,7 @@ def define_polysurfaces(
|
|
|
33
38
|
),
|
|
34
39
|
model=model,
|
|
35
40
|
resolution=resolutions.get(layername, None),
|
|
36
|
-
mesh_order=
|
|
41
|
+
mesh_order=layer_stack_.mesh_order,
|
|
37
42
|
physical_name=layer_physical_map[layername]
|
|
38
43
|
if layername in layer_physical_map
|
|
39
44
|
else layername,
|
|
@@ -98,9 +98,7 @@ def get_mesh(
|
|
|
98
98
|
|
|
99
99
|
# Default meshing flags (all True)
|
|
100
100
|
if layer_meshbool_map is None:
|
|
101
|
-
layer_meshbool_map =
|
|
102
|
-
layer_name: True for layer_name in layer_stack.layers.keys()
|
|
103
|
-
}
|
|
101
|
+
layer_meshbool_map = dict.fromkeys(layer_stack.layers.keys(), True)
|
|
104
102
|
else:
|
|
105
103
|
for layer_name in layer_stack.layers.keys():
|
|
106
104
|
if layer_name not in layer_physical_map.keys():
|