From f8b09c2884830e2a181d85eb7bbdc756a2043952 Mon Sep 17 00:00:00 2001 From: Joaquin Matres <4514346+joamatab@users.noreply.github.com> Date: Wed, 6 Mar 2024 22:46:32 -0800 Subject: [PATCH 1/7] simpler pdk init --- ubcpdk/__init__.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/ubcpdk/__init__.py b/ubcpdk/__init__.py index 6bb26cd5..ddd184f7 100644 --- a/ubcpdk/__init__.py +++ b/ubcpdk/__init__.py @@ -1,14 +1,11 @@ """UBC Siepic Ebeam PDK from edx course.""" -import pathlib from gdsfactory.config import PATH as GPATH -from gdsfactory.config import logger -from gdsfactory.generic_tech import get_generic_pdk from gdsfactory.get_factories import get_cells from gdsfactory.pdk import Pdk from ubcpdk import components, data, tech -from ubcpdk.config import CONFIG, PATH, module +from ubcpdk.config import CONFIG, PATH from ubcpdk.tech import LAYER, LAYER_STACK, LAYER_VIEWS, cross_sections __version__ = "2.4.1" @@ -20,31 +17,29 @@ "components", "tech", "LAYER", - "__version__", "cells", "cross_sections", "PDK", + "__version__", ] -logger.info(f"Found UBCpdk {__version__!r} installed at {module!r}") cells = get_cells(components) PDK = Pdk( name="ubcpdk", cells=cells, cross_sections=cross_sections, layers=dict(LAYER), - base_pdk=get_generic_pdk(), layer_stack=LAYER_STACK, layer_views=LAYER_VIEWS, ) GPATH.sparameters = PATH.sparameters GPATH.interconnect = PATH.interconnect_cml_path -PDK.register_cells_yaml(dirpath=pathlib.Path(__file__).parent.absolute()) PDK.activate() if __name__ == "__main__": f = PDK.cells - print(f.keys()) + for k, _v in f.items(): + print(k) From 38bcbe6e79e645ea6e7e318e77936d6097856326 Mon Sep 17 00:00:00 2001 From: Joaquin Matres <4514346+joamatab@users.noreply.github.com> Date: Wed, 6 Mar 2024 23:26:31 -0800 Subject: [PATCH 2/7] add straight_heater_metal --- ...ater_metal_undercut_with_undercutFalse.gds | Bin 0 -> 2686 bytes ...st_pdk_settings_straight_heater_metal_.yml | 21 ++++++++++++++++++ ubcpdk/components.py | 1 + 3 files changed, 22 insertions(+) create mode 100644 tests/ref/straight_heater_metal_undercut_straight_heater_metal_undercut_with_undercutFalse.gds create mode 100644 tests/test_components/test_pdk_settings_straight_heater_metal_.yml diff --git a/tests/ref/straight_heater_metal_undercut_straight_heater_metal_undercut_with_undercutFalse.gds b/tests/ref/straight_heater_metal_undercut_straight_heater_metal_undercut_with_undercutFalse.gds new file mode 100644 index 0000000000000000000000000000000000000000..0ff63a4886c6841d1783e8b98b3180c2794c5be8 GIT binary patch literal 2686 zcmbW3J#5oZ5XaAs^Abvc5~@^15eijDB_HVtzFU?LVTUwXW7?c=Nc(v|lYx1Qf#f^1yuTR_ONO{1|= zxAi(UY;5YQ*fyGar&YyfrDN;&8+N_-?W)nVFo1Fl0G*IQ0(4R)s?d2E0FtL-0Maj* z7$+9uHPscii6J4SNF%I_J^F9AdApYhed ziCZgnU2T)SO!oGi)ED3a-)&M&M7~vBOFsW)nYxy}XRAL%)@n7c7O++%{V^N zsyJ)c|2XSPpX!5i0MwsblBnAZ+_LwFRb5ky#Zt8vrMjHus>|7H+<# zkWQZF-EUZy-ZVC_scE{d>Q>_+)>K{B$VU55ncLNUUinC`h;B%uaQC~N5UM1=nMeFd zY*Xtve`q(5DYN&0TK2zDDmjhVx%XDyw+2^1%IhVX#eF;_T#@^pDH%mUjw=vO9$FtV zX?nBSJDY=Q;wQb%1Bg>mYvb0<(&EtaB?TEK;gk&h@r<{-s#*`MX z3&~(i>Ba{k8H)LNUr2^x{&xB+!ro7I;fjb|H`BNP==D#f=8H^b-w}oU- zXY9$MkPO9i+CnlIQ^|Z2lEIkD({Ujg>}2KTrjQJt4rS+sM@GyZ|NZAFb5B42edD`H w=>0d@<}-bg?uOw08+H>>e>&5t{}E?;-~8&E-0li|6ErZRdXsd>{8AM74^ag8KL7v# literal 0 HcmV?d00001 diff --git a/tests/test_components/test_pdk_settings_straight_heater_metal_.yml b/tests/test_components/test_pdk_settings_straight_heater_metal_.yml new file mode 100644 index 00000000..61ecb18b --- /dev/null +++ b/tests/test_components/test_pdk_settings_straight_heater_metal_.yml @@ -0,0 +1,21 @@ +function: straight_heater_metal_undercut +info: + resistance: 0 +module: gdsfactory.components.straight_heater_metal +name: straight_heater_metal_undercut_with_undercutFalse +settings: + cross_section: xs_sc + cross_section_heater: xs_heater_metal + cross_section_heater_undercut: xs_sc_heater_metal_undercut + cross_section_waveguide_heater: xs_sc_heater_metal + heater_taper_length: 5.0 + length: 320.0 + length_straight: 0.1 + length_straight_input: 15.0 + length_undercut: 30.0 + length_undercut_spacing: 6.0 + ohms_per_square: null + port_orientation1: null + port_orientation2: null + via_stack: via_stack_heater_mtop + with_undercut: false diff --git a/ubcpdk/components.py b/ubcpdk/components.py index d2c8520c..725efeb4 100644 --- a/ubcpdk/components.py +++ b/ubcpdk/components.py @@ -45,6 +45,7 @@ def bend_euler_sc(**kwargs) -> Component: cross_section="xs_sc", post_process=(tech.add_bbox_siepic_top_bot,), ) +straight_heater_metal = gf.c.straight_heater_metal bend_s = partial( gf.components.bend_s, cross_section="xs_sc", From 9759b34418c7146985f56151c5fb84ac6590e444 Mon Sep 17 00:00:00 2001 From: Joaquin Matres <4514346+joamatab@users.noreply.github.com> Date: Wed, 6 Mar 2024 23:27:11 -0800 Subject: [PATCH 3/7] fix docs --- docs/components.rst | 1 + docs/components_plot.rst | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/docs/components.rst b/docs/components.rst index 3b463e95..d0f46301 100644 --- a/docs/components.rst +++ b/docs/components.rst @@ -68,6 +68,7 @@ Cells summary ring_with_crossing spiral straight + straight_heater_metal straight_one_pin taper terminator_short diff --git a/docs/components_plot.rst b/docs/components_plot.rst index 1c313ee6..2a5d9717 100644 --- a/docs/components_plot.rst +++ b/docs/components_plot.rst @@ -182,7 +182,7 @@ bend_s import ubcpdk - c = ubcpdk.components.bend_s(size=(11.0, 1.8), npoints=99, cross_section='xs_sc', with_bbox=True, add_pins=True) + c = ubcpdk.components.bend_s(size=(11.0, 1.8), npoints=99, cross_section='xs_sc') c.plot() @@ -707,7 +707,7 @@ mmi1x2 import ubcpdk - c = ubcpdk.components.mmi1x2(width_taper=1.0, length_taper=10.0, length_mmi=5.5, width_mmi=2.5, gap_mmi=0.25, with_bbox=True) + c = ubcpdk.components.mmi1x2(width_taper=1.0, length_taper=10.0, length_mmi=5.5, width_mmi=2.5, gap_mmi=0.25) c.plot() @@ -902,7 +902,22 @@ straight import ubcpdk - c = ubcpdk.components.straight(length=10.0, npoints=2, add_pins=True, cross_section='xs_sc') + c = ubcpdk.components.straight(length=10.0, npoints=2, cross_section='xs_sc', post_process=(functools.partial(, layers=((68, 0),), default=0, top=0.5, bottom=0.5),)) + c.plot() + + + +straight_heater_metal +---------------------------------------------------- + +.. autofunction:: ubcpdk.components.straight_heater_metal + +.. plot:: + :include-source: + + import ubcpdk + + c = ubcpdk.components.straight_heater_metal(length=320.0, length_undercut_spacing=6.0, length_undercut=30.0, length_straight=0.1, length_straight_input=15.0, cross_section='xs_sc', cross_section_heater='xs_heater_metal', cross_section_waveguide_heater='xs_sc_heater_metal', cross_section_heater_undercut='xs_sc_heater_metal_undercut', with_undercut=False, via_stack='via_stack_heater_mtop', heater_taper_length=5.0) c.plot() @@ -932,7 +947,7 @@ taper import ubcpdk - c = ubcpdk.components.taper(length=10.0, width1=0.5, with_bbox=True, with_two_ports=True, cross_section='xs_sc', port_order_name=('o1', 'o2'), port_order_types=('optical', 'optical'), add_pins=True) + c = ubcpdk.components.taper(length=10.0, width1=0.5, with_two_ports=True, cross_section='xs_sc', port_order_name=('o1', 'o2'), port_order_types=('optical', 'optical')) c.plot() From 3a09249150ed6be4e924241a7e46db6e21050152 Mon Sep 17 00:00:00 2001 From: Joaquin Matres <4514346+joamatab@users.noreply.github.com> Date: Sun, 24 Mar 2024 09:20:52 -0700 Subject: [PATCH 4/7] update to latest gdsfactory --- pyproject.toml | 2 +- ...er_add_electrical_pads_top_dc_984bbf2d.gds | Bin 0 -> 15792 bytes ...eater_add_electrical_pads_top_984bbf2d.gds | Bin 0 -> 13042 bytes ..._array_add_fiber_array_add_fiber_array.gds | Bin 117922 -> 118694 bytes ...ay_add_fiber_array_componentdbr_cavity.gds | Bin 126174 -> 126784 bytes tests/ref/add_fiber_array_pads_rf.gds | Bin 129504 -> 130422 bytes tests/ref/coupler.gds | Bin 0 -> 6706 bytes tests/ref/coupler_coupler1.gds | Bin 0 -> 7164 bytes tests/ref/coupler_coupler_e0bb2bc4.gds | Bin 0 -> 7170 bytes tests/ref/coupler_ring.gds | Bin 0 -> 2026 bytes tests/ref/coupler_ring_coupler_ring1.gds | Bin 0 -> 2484 bytes .../coupler_ring_coupler_ring_e0bb2bc4.gds | Bin 0 -> 2492 bytes tests/ref/dbr_cavity.gds | Bin 8314 -> 8236 bytes tests/ref/ebeam_y_adiabatic_tapers.gds | Bin 15546 -> 15434 bytes tests/ref/gc_te1310.gds | Bin 144856 -> 144876 bytes tests/ref/gc_te1310_8deg.gds | Bin 1026072 -> 1026048 bytes tests/ref/gc_te1310_broadband.gds | Bin 267732 -> 267732 bytes tests/ref/gc_te1550.gds | Bin 112544 -> 112546 bytes tests/ref/gc_te1550_90nmSlab.gds | Bin 30336 -> 30304 bytes tests/ref/gc_te1550_broadband.gds | Bin 215722 -> 215740 bytes tests/ref/gc_tm1550.gds | Bin 82164 -> 82166 bytes tests/ref/mmi1x2_mmi1x21.gds | Bin 0 -> 728 bytes tests/ref/mmi1x2_mmi1x2_e0bb2bc4.gds | Bin 0 -> 736 bytes tests/ref/mzi_mzi_a1fe9d55.gds | Bin 0 -> 24312 bytes tests/ref/mzi_mzi_f5c6fc9f.gds | Bin 0 -> 23124 bytes tests/ref/pad_array_pad_array_25dc0e38.gds | Bin 0 -> 360 bytes tests/ref/pad_pad_0210fbc6.gds | Bin 0 -> 246 bytes ...ble_heater_ring_double_heater_dde86d0f.gds | Bin 0 -> 6860 bytes ...ble_heater_ring_double_heater_f261383d.gds | Bin 0 -> 6658 bytes .../ref/ring_double_ring_double_64b48b6b.gds | Bin 0 -> 3952 bytes .../ref/ring_double_ring_double_a459ac5d.gds | Bin 0 -> 3770 bytes ...ng_single_dut_ring_single_dut_26538df6.gds | Bin 0 -> 7462 bytes ...ng_single_dut_ring_single_dut_5f7261fe.gds | Bin 0 -> 7066 bytes ...gle_heater_ring_single_heater_59bd74a4.gds | Bin 0 -> 10856 bytes ...gle_heater_ring_single_heater_cc91df46.gds | Bin 0 -> 11258 bytes .../ref/ring_single_ring_single_382b19ee.gds | Bin 0 -> 8278 bytes .../ref/ring_single_ring_single_7ee9a328.gds | Bin 0 -> 8258 bytes tests/ref/straight.gds | Bin 0 -> 438 bytes ...ater_metal_undercut_with_undercutFalse.gds | Bin 2686 -> 3312 bytes tests/test_components.py | 1 + .../test_pdk_settings_add_fiber_array_.yml | 36 +- .../test_pdk_settings_add_pads_dc_.yml | 12 +- .../test_pdk_settings_add_pads_rf_.yml | 12 +- .../test_pdk_settings_bend_s_.yml | 2 - .../test_pdk_settings_coupler_.yml | 39 +- .../test_pdk_settings_coupler_ring_.yml | 39 +- .../test_pdk_settings_dbr_cavity_.yml | 37 - .../test_pdk_settings_dbr_cavity_te_.yml | 52 - .../test_pdk_settings_ebeam_dc_te1550_.yml | 8 +- .../test_pdk_settings_mmi1x2_.yml | 39 +- .../test_pdk_settings_mzi_.yml | 18 +- .../test_pdk_settings_mzi_heater_.yml | 18 +- .../test_pdk_settings_pad_.yml | 11 +- .../test_pdk_settings_pad_array_.yml | 12 +- .../test_pdk_settings_ring_double_.yml | 63 +- .../test_pdk_settings_ring_double_heater_.yml | 63 +- .../test_pdk_settings_ring_single_.yml | 63 +- .../test_pdk_settings_ring_single_heater_.yml | 63 +- .../test_pdk_settings_ring_with_crossing_.yml | 52 +- .../test_pdk_settings_straight_.yml | 25 +- ...st_pdk_settings_straight_heater_metal_.yml | 2 + .../test_pdk_settings_straight_one_pin_.yml | 2 - .../test_pdk_settings_taper_.yml | 2 - ...st_pdk_settings_via_stack_heater_mtop_.yml | 2 - tests/test_netlists.py | 56 + .../test_netlists_add_fiber_array_.yml | 56 + ...test_netlists_add_fiber_array_pads_rf_.yml | 152 + .../test_netlists/test_netlists_add_pads_.yml | 489 +++ .../test_netlists_add_pads_rf_.yml | 489 +++ tests/test_netlists/test_netlists_bend_.yml | 5 + .../test_netlists_bend_euler180_sc_.yml | 5 + .../test_netlists_bend_euler_sc_.yml | 5 + tests/test_netlists/test_netlists_bend_s_.yml | 35 + .../test_netlists/test_netlists_coupler_.yml | 5 + .../test_netlists_coupler_ring_.yml | 246 ++ .../test_netlists_dbr_cavity_.yml | 60 + .../test_netlists_dbr_cavity_te_.yml | 56 + .../test_netlists_ebeam_BondPad_.yml | 14 + .../test_netlists_ebeam_adiabatic_te1550_.yml | 14 + .../test_netlists_ebeam_adiabatic_tm1550_.yml | 14 + .../test_netlists_ebeam_bdc_te1550_.yml | 5 + .../test_netlists_ebeam_bdc_tm1550_.yml | 5 + .../test_netlists_ebeam_crossing4_.yml | 5 + .../test_netlists_ebeam_crossing4_2ports_.yml | 66 + ...t_netlists_ebeam_dc_halfring_straight_.yml | 21 + .../test_netlists_ebeam_dc_te1550_.yml | 5 + ...s_ebeam_splitter_adiabatic_swg_te1550_.yml | 14 + ...ists_ebeam_splitter_swg_assist_te1310_.yml | 5 + ...ists_ebeam_splitter_swg_assist_te1550_.yml | 5 + .../test_netlists_ebeam_swg_edgecoupler_.yml | 14 + ...test_netlists_ebeam_terminator_te1310_.yml | 5 + ...test_netlists_ebeam_terminator_te1550_.yml | 5 + ...test_netlists_ebeam_terminator_tm1550_.yml | 5 + .../test_netlists_ebeam_y_1550_.yml | 5 + .../test_netlists_ebeam_y_adiabatic_.yml | 5 + .../test_netlists_ebeam_y_adiabatic_1310_.yml | 5 + ...est_netlists_ebeam_y_adiabatic_tapers_.yml | 95 + .../test_netlists_gc_te1310_.yml | 28 + .../test_netlists_gc_te1310_8deg_.yml | 28 + .../test_netlists_gc_te1310_broadband_.yml | 28 + .../test_netlists_gc_te1550_.yml | 28 + .../test_netlists_gc_te1550_90nmSlab_.yml | 28 + .../test_netlists_gc_te1550_broadband_.yml | 28 + .../test_netlists_gc_tm1550_.yml | 28 + .../test_netlists_metal_via_.yml | 5 + tests/test_netlists/test_netlists_mmi1x2_.yml | 5 + tests/test_netlists/test_netlists_mzi_.yml | 599 ++++ .../test_netlists_mzi_heater_.yml | 616 ++++ tests/test_netlists/test_netlists_pad_.yml | 5 + ...s_photonic_wirebond_surfacetaper_1310_.yml | 5 + ...s_photonic_wirebond_surfacetaper_1550_.yml | 5 + .../test_netlists_ring_double_.yml | 163 + .../test_netlists_ring_double_heater_.yml | 233 ++ .../test_netlists_ring_single_.yml | 206 ++ .../test_netlists_ring_single_heater_.yml | 248 ++ .../test_netlists_ring_with_crossing_.yml | 113 + tests/test_netlists/test_netlists_spiral_.yml | 3128 +++++++++++++++++ .../test_netlists/test_netlists_straight_.yml | 5 + .../test_netlists_straight_heater_metal_.yml | 244 ++ .../test_netlists_straight_one_pin_.yml | 5 + tests/test_netlists/test_netlists_taper_.yml | 5 + .../test_netlists_terminator_short_.yml | 43 + .../test_netlists_thermal_phase_shifter0_.yml | 5 + .../test_netlists_thermal_phase_shifter1_.yml | 5 + .../test_netlists_thermal_phase_shifter2_.yml | 5 + .../test_netlists_thermal_phase_shifter3_.yml | 5 + ubcpdk/components.py | 80 +- ubcpdk/import_gds.py | 2 +- ubcpdk/tech.py | 11 +- 129 files changed, 7890 insertions(+), 698 deletions(-) create mode 100644 tests/ref/add_electrical_pads_top_dc_ring_single_heater_add_electrical_pads_top_dc_984bbf2d.gds create mode 100644 tests/ref/add_electrical_pads_top_ring_single_heater_add_electrical_pads_top_984bbf2d.gds create mode 100644 tests/ref/coupler.gds create mode 100644 tests/ref/coupler_coupler1.gds create mode 100644 tests/ref/coupler_coupler_e0bb2bc4.gds create mode 100644 tests/ref/coupler_ring.gds create mode 100644 tests/ref/coupler_ring_coupler_ring1.gds create mode 100644 tests/ref/coupler_ring_coupler_ring_e0bb2bc4.gds create mode 100644 tests/ref/mmi1x2_mmi1x21.gds create mode 100644 tests/ref/mmi1x2_mmi1x2_e0bb2bc4.gds create mode 100644 tests/ref/mzi_mzi_a1fe9d55.gds create mode 100644 tests/ref/mzi_mzi_f5c6fc9f.gds create mode 100644 tests/ref/pad_array_pad_array_25dc0e38.gds create mode 100644 tests/ref/pad_pad_0210fbc6.gds create mode 100644 tests/ref/ring_double_heater_ring_double_heater_dde86d0f.gds create mode 100644 tests/ref/ring_double_heater_ring_double_heater_f261383d.gds create mode 100644 tests/ref/ring_double_ring_double_64b48b6b.gds create mode 100644 tests/ref/ring_double_ring_double_a459ac5d.gds create mode 100644 tests/ref/ring_single_dut_ring_single_dut_26538df6.gds create mode 100644 tests/ref/ring_single_dut_ring_single_dut_5f7261fe.gds create mode 100644 tests/ref/ring_single_heater_ring_single_heater_59bd74a4.gds create mode 100644 tests/ref/ring_single_heater_ring_single_heater_cc91df46.gds create mode 100644 tests/ref/ring_single_ring_single_382b19ee.gds create mode 100644 tests/ref/ring_single_ring_single_7ee9a328.gds create mode 100644 tests/ref/straight.gds create mode 100644 tests/test_netlists.py create mode 100644 tests/test_netlists/test_netlists_add_fiber_array_.yml create mode 100644 tests/test_netlists/test_netlists_add_fiber_array_pads_rf_.yml create mode 100644 tests/test_netlists/test_netlists_add_pads_.yml create mode 100644 tests/test_netlists/test_netlists_add_pads_rf_.yml create mode 100644 tests/test_netlists/test_netlists_bend_.yml create mode 100644 tests/test_netlists/test_netlists_bend_euler180_sc_.yml create mode 100644 tests/test_netlists/test_netlists_bend_euler_sc_.yml create mode 100644 tests/test_netlists/test_netlists_bend_s_.yml create mode 100644 tests/test_netlists/test_netlists_coupler_.yml create mode 100644 tests/test_netlists/test_netlists_coupler_ring_.yml create mode 100644 tests/test_netlists/test_netlists_dbr_cavity_.yml create mode 100644 tests/test_netlists/test_netlists_dbr_cavity_te_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_BondPad_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_adiabatic_te1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_adiabatic_tm1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_bdc_te1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_bdc_tm1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_crossing4_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_crossing4_2ports_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_dc_halfring_straight_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_dc_te1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_splitter_adiabatic_swg_te1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_splitter_swg_assist_te1310_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_splitter_swg_assist_te1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_swg_edgecoupler_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_terminator_te1310_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_terminator_te1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_terminator_tm1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_y_1550_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_y_adiabatic_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_y_adiabatic_1310_.yml create mode 100644 tests/test_netlists/test_netlists_ebeam_y_adiabatic_tapers_.yml create mode 100644 tests/test_netlists/test_netlists_gc_te1310_.yml create mode 100644 tests/test_netlists/test_netlists_gc_te1310_8deg_.yml create mode 100644 tests/test_netlists/test_netlists_gc_te1310_broadband_.yml create mode 100644 tests/test_netlists/test_netlists_gc_te1550_.yml create mode 100644 tests/test_netlists/test_netlists_gc_te1550_90nmSlab_.yml create mode 100644 tests/test_netlists/test_netlists_gc_te1550_broadband_.yml create mode 100644 tests/test_netlists/test_netlists_gc_tm1550_.yml create mode 100644 tests/test_netlists/test_netlists_metal_via_.yml create mode 100644 tests/test_netlists/test_netlists_mmi1x2_.yml create mode 100644 tests/test_netlists/test_netlists_mzi_.yml create mode 100644 tests/test_netlists/test_netlists_mzi_heater_.yml create mode 100644 tests/test_netlists/test_netlists_pad_.yml create mode 100644 tests/test_netlists/test_netlists_photonic_wirebond_surfacetaper_1310_.yml create mode 100644 tests/test_netlists/test_netlists_photonic_wirebond_surfacetaper_1550_.yml create mode 100644 tests/test_netlists/test_netlists_ring_double_.yml create mode 100644 tests/test_netlists/test_netlists_ring_double_heater_.yml create mode 100644 tests/test_netlists/test_netlists_ring_single_.yml create mode 100644 tests/test_netlists/test_netlists_ring_single_heater_.yml create mode 100644 tests/test_netlists/test_netlists_ring_with_crossing_.yml create mode 100644 tests/test_netlists/test_netlists_spiral_.yml create mode 100644 tests/test_netlists/test_netlists_straight_.yml create mode 100644 tests/test_netlists/test_netlists_straight_heater_metal_.yml create mode 100644 tests/test_netlists/test_netlists_straight_one_pin_.yml create mode 100644 tests/test_netlists/test_netlists_taper_.yml create mode 100644 tests/test_netlists/test_netlists_terminator_short_.yml create mode 100644 tests/test_netlists/test_netlists_thermal_phase_shifter0_.yml create mode 100644 tests/test_netlists/test_netlists_thermal_phase_shifter1_.yml create mode 100644 tests/test_netlists/test_netlists_thermal_phase_shifter2_.yml create mode 100644 tests/test_netlists/test_netlists_thermal_phase_shifter3_.yml diff --git a/pyproject.toml b/pyproject.toml index f44610ee..5def08a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ classifiers = [ "Operating System :: OS Independent" ] dependencies = [ - "gdsfactory==7.18.0", + "gdsfactory==7.22.2", "gplugins[tidy3d,sax,schematic]>=0.10.2,<0.11" ] description = "ubcpdk pdk" diff --git a/tests/ref/add_electrical_pads_top_dc_ring_single_heater_add_electrical_pads_top_dc_984bbf2d.gds b/tests/ref/add_electrical_pads_top_dc_ring_single_heater_add_electrical_pads_top_dc_984bbf2d.gds new file mode 100644 index 0000000000000000000000000000000000000000..8090689285fdc49dd2d7de6172bcc5545b0efa5c GIT binary patch literal 15792 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 Nr~a;1A$F}+@jrW-%F+M; literal 0 HcmV?d00001 diff --git a/tests/ref/add_electrical_pads_top_ring_single_heater_add_electrical_pads_top_984bbf2d.gds b/tests/ref/add_electrical_pads_top_ring_single_heater_add_electrical_pads_top_984bbf2d.gds new file mode 100644 index 0000000000000000000000000000000000000000..1bb24a66b9f1cb5603177b2979e5ec8f6f40e968 GIT binary patch literal 13042 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 Y*dqK)A2E!1)R*q-(W>9fXf%rd0-So!FaQ7m literal 0 HcmV?d00001 diff --git a/tests/ref/add_fiber_array_add_fiber_array_add_fiber_array.gds b/tests/ref/add_fiber_array_add_fiber_array_add_fiber_array.gds index 9b537c18bef8aa6dba0723f180a89fcb590a11d8..21d23e463380f88daa3026bbbe133830588bb5af 100644 GIT binary patch delta 1088 zcmb7DF>KR76#d_JE+(Y3O-mYwh$2KmLKNlPq)G-PB#=7N1yl9C}wm1baufrWwS zh7)1{QHcd47?4Vn2r;A5NKEW3St>H3GKB9qPH?HzGWfpk-}C+V-+%Y&S@89X;L|Og zuP$aU$e4y zHd|OQ?MnlEEaT#183%8kasKt^;_}`OUYG!Y0DVC4-%gavJ9v4Vzzfcf;tg7))xh|a z4&e#4pL7;xunLze4K%!iSf+pI9GGH7otv6w>~6Vim-0C)mFB6mnaV%X0^3>upMSuB ze7S>nD0JO$vw>OKJ!#-Ph1~|;qHwW^d0(HNDqf#{UEDtXxnufl4?1d(5&4t#+1CAi zo(_)&A(plCA+_U*uXaY_`*X*TQh)R-fVzKTQfkLXitC;uT>l)Jz2hIb)xyc3ol0lz zwe)tgg%8J*DA3LKYrvLx| delta 749 zcmZ2BpMB9x_6dtQER#|aQ%wy_Ca!jwe*6rh3|wIPYaox4k$cMj|N9actfmW`Wz^%+ zOH4CMGBmbKW|(ewmQjk`FgZ2V)G&2={8>gxW$Bv#|8IO?U=d_sVBun55EEi6E-6aP zOwTBZH!)8!H?pv_m_8S%&;Xt5$3=BL1%>Vy8^)LVd*e(vJT`AM& zon;hLWdOU322uC88nHoKIDNr6MjZm$q2V!cuN?=>?b99i zFv@f7E&2cdKN|zX-jeAJI~k4m{tAKE|Nlei=`3d$EhoO`;edw>Sd-KQh$g8C2u&a{ zkS3rQNRzM#8(V5pYGQ7DdUAY8s-dZ=0Ymc_rtM#t7-w%`hCHaoQG9ZKZb5!tYF-JNlP2!7<$$FXNO-6VK)j|dfbbef4CFPS7|3hW7w=&d jgr%wNyZ10Q@ms5~5wr`O+C+pfLS=f(8Af$x78V8o6JYU6 diff --git a/tests/ref/add_fiber_array_add_fiber_array_add_fiber_array_componentdbr_cavity.gds b/tests/ref/add_fiber_array_add_fiber_array_add_fiber_array_componentdbr_cavity.gds index a84aaed3e1e1632e7cc9f934bc2432ac20ee41b1..8c09894260c495d1c711a0a457bd562f30b7a9fa 100644 GIT binary patch delta 977 zcmb7@%WD%+6vpR-dNZ~`$yj65WbzlLzXmr3GoJ2rA-YI+>ZIt$C5gl`e#C zs-PI};x5ELAmYXcrfx+40gE6_f>0`gHc7j1FUH%6Nk|HUvpI9`obz$N-~DEzW_`b5 zee{+M#)N20iyFlb6Ng3-x{}GLX+u{eS(N0UWGqkn%hP^%@*4J$t#z2CC0a4dN(Ewc z^|=D4X&J4;I4z4+FdR;VmI`@wAvs@Aq=**PBv}ZE_^a28%f55?rEd&Ry1ba@1w7|M zHijuJGv-rzfamy2w$h5ZLPt?HSlm2;cidKAR22+0uIkLt2*Wryq{s7$W~5R|LRRIN z7761Te{o7cXd#`;<_k(vUsBQw`FxhPW$9MN$P@;>G0e~~!;Er!Oym3BSvDesL%N~I z>A5}lswYtV?&)*Z`EEMf?KqDwdj_33jkYsq)^z4v>~q$qCx}5^5@TUg?*{(m9n>oQ zXls>zwkd7*Y2n*&a{p?p^?Qe5F0A5baEwCs54YazcC}iq=XA(_fWExwj)~-M9S*bM zkPwcmvWUNco9%FZY!S)Y7T8!>jR*-Nq*4qnEW@OmM@Y-w%B76Fl2mg-E~uo8OtLU9 ze4O#vD$rmy#Y!GSh@3oeGNT0 z~4334K^`BG*J>fa9_L2EXA~x)OzvY#h7p+ z7!tqO#CYzBgV1dwtv_euT}m4--r6Q!NHozp-IW!%_+7rtH*e<6y!YN${nao2^#VU> zs9{aCjOQP2Vx<7>yd+O3;)JE)_X3>5jS}3#yG0lY6r0W8bwVOVd|ZTn+%G~WPc_A$ ziY#MC2?lvnRJ5p}Me#`;q+p2S%;ck$I8Eu3vc<;MguP#a>_BH1$1NBs-Gg6z3xn_x z`}3d(Cq_u9>m;LjL!4rC_w#V?Y9#M0xjrr_6JIwWzSD%972JzxJg$qfVTzJUF;IXz z?oXl$6)i~(w|+8>B^!Fr{1OQ1eb8*W9oK3w!&{=InMzo0!3HqafZJ2U9H%FiQmG_+ zWiqjnT&BxuYS3sxUo`bJl~h$EzBWQa0(X3jnF7r5nkGg?Sv6aCUO?XtTz9CmHJ3VD zbE#!{VIeGw*IZb}K7g(Mg{`(=n!uzyMzirQ(DQU0>~Vl+TfpPiHq5c+%QvN8L~sTVd-jMPE6JS_ZI632HOt3bD3 zGAUIhYR^<)?NCe{HGbBZ8=G}#A3E@ixyi(2Zaz$>qDzahwC;tlQiq{`4*44(5Cr*`N6g&1viKbUsAC8k3R{#J2 diff --git a/tests/ref/add_fiber_array_pads_rf.gds b/tests/ref/add_fiber_array_pads_rf.gds index 15acb0133c4afdbbe64c3001416cfa62b149a418..2fff3cc9bdff128a780c3a2bad9fc5836c3dcb4b 100644 GIT binary patch delta 1715 zcmb7FU1%It6uxJ&J3BQo`;*OXTZ36@Y+@T_{&z=;3K2w5QxriT+R6NFy3pOtZa1J% zMErpwsEq@;LQ#q+1@%Eu48Bwm@xdkMOsIE!aITb)5@=#1l3XB_9sQ+|A5_4c7SO+Q{J zXnD(2MTrw7UbLR4l1o$)&V39){N^Q?CT7z!_bh`#yqA{YPGY`ZhACoFD`45jsJHNZ z6%I4)_BneJM(~$ac#@GNK}Z{xg)i0MmQcGp{6GyR5(I`*m9mzbJyB6DNi$i)kjFUt z80^{T^M6Grh@O*n$TXu<@RuR$t; z5DJn9IgazEYcYEb4wBVFb=M>IFZYdSwjo6kduSUb2FYsET}AXhy2#_tH%YQo6ZVAK zaW^k+b6w;G|Z$j1PMU7`I;O zpkXMSnH6O(yX@d%z-b<0L*JYui*-GN_RfvB(Ar8idKm2mgIYt{F| zZ!pbtSVorg`vz%x)=(=JCrPXa9vk~VT5z##bCs7fdPX3$bI-CT15@D$-Fv03Hz1Br z{thMl=^BjgU{8mW?Y)W9_KCy|ctbtrp-3IO9*WcxT@>-m3K_}eI^4|o(pak3;YVQn w{|5ek8^n(H8a0f^NvVu4Ts+l)+d_VOdE%tn4nl-K?f_b+1)>DP5P1UVAL$pF delta 1383 zcmai!O=ufO6vyYu>T0bxk}SJ+tf;iej-5D7(0*!{wj|Vn5O7eAfl@ZB*^%QCe;_-B zLNUdmP;w{@Dta_+hz~ubv`{F>lAM@cnoHv-HIzaREjZCNhm8AJJD7dl+*D+m#Q0t?7yKjGRX0XvHeBvySKkDnT!A$@%57Z zc=!N#ytD*oak&nA157lN3YGBD61<9!>o9`#yU;V}?T!$CkdRoEqf-~BFR+}E8=o9A zOi5F8LC!dP@59k;Xy+wMQ!JV^(Wt^fJhcrS&r{c`@O3j4P*f|MkrX^vff!ETgL(XJ z74{U_GF%Qj``K00+)!*2K1^&56XHADXtEFvh4c%LGM9 zl1p>G;+zk@{J}nPtO#j4yyu2;5%jJg;bLGf)v^Dj<9%N^<0?Ka!jUe1*Nbd(oX5l> zjJ)t-^ylWl>>@C{U4zbmKp9g6R{Wy|pN4r$kxW@P6<68Iw_pHYyA1(+<0f>5wxfg; ztVY9)cyJwb{ASheq-ctAR@2qukE<{rcG@=Y>awF;#$7I0cb5y{=q7~F`UT!>$`oF3 zWeP9+yG&xg%1kpQsaCVE`=VTiOo3} z<08=$Qu!?Ab^YyTcXB2jMIvGO^v3q`5SNwCrWVG zGZbDg!TW(7H(|UCaZge_R`#Hhsiufj5*^O^uuz6Dp03#3wB)XoVTj*pg@xy;&{L?u zEBx-dUOU6#+ZEehtunI$w|LLV&Y_PFaGWtQp36<;3_3M2JvGTDXa7!^V~+0VKfrVN z`3T>=2fdhFhM|2i?mzq^+=Q2lE6?C3;JwD+S6d)IpZ&H4hj>qV{C3OrTd?I@X&d?@ zJ0`YKjUtp1BKewU}@j t{CpkKyw~j(mLo2%ExBzQzthBhc*Dhgc%zAXIKsU^1D@D`kK6oy@)vogwx9q2 diff --git a/tests/ref/coupler.gds b/tests/ref/coupler.gds new file mode 100644 index 0000000000000000000000000000000000000000..7e59845d92e5c9bf9668ea2d22e6985458c3f1ed GIT binary patch literal 6706 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 literal 0 HcmV?d00001 diff --git a/tests/ref/coupler_coupler1.gds b/tests/ref/coupler_coupler1.gds new file mode 100644 index 0000000000000000000000000000000000000000..01aa820c0e1f8bb9838b15449d17fd7081f7f752 GIT binary patch literal 7164 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 literal 0 HcmV?d00001 diff --git a/tests/ref/coupler_coupler_e0bb2bc4.gds b/tests/ref/coupler_coupler_e0bb2bc4.gds new file mode 100644 index 0000000000000000000000000000000000000000..8de6299cdc93d497d7ade8c104d8e73a960dd786 GIT binary patch literal 7170 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 literal 0 HcmV?d00001 diff --git a/tests/ref/coupler_ring.gds b/tests/ref/coupler_ring.gds new file mode 100644 index 0000000000000000000000000000000000000000..248af055ebca9214b42624d68504ae0396e9c8b1 GIT binary patch literal 2026 zcmbW&TWkzb9LMqh%Up_P2Gw1)C|C~7^ny6}>6e+6p zwd6`avC1GR>3%E@Ra@B@iUy+_MG8!oaW%WEr+1$E=%3V9+InQ+Tq&~r{#uWw)vsQ+ zW@RKAh&DDY6LYRep`QB9Ulxe?>nqC}ybYrDSGI{biYyZ@OXAPrF~wpZm&Q-bd6MN? zMkcReRB~i-x=LVeb2QkvY3#0>$coXvkk9KcPma7_(lbTxBSrFe zWky;hYj27(y-ClONtoRTR-&s)(sQ(eGF+rZMy0gi2x3<47U36m#$zI=E^Ydhihz zGHDo#@e>Xev9w?nh4OF`w&Hvdt1-_i?7*EOwi$Q=pJJCt&T{;KU&zu=BzGIuir86d z!m<4r-lT2Jt=O>>7l}CM;01g}M)J9WNFCQpd??~xOx7CY*mOz6GnK5vkz?~Ik-Pz9 z9)g?jEIuYPHT024J$*Bosi9NP`j(YJ6Kz{?99cQeUyTRwFqup62A;#$WFE__rr<54 zj$;8Di}4-O8|QjtZWsM8Sc->m1z87S6ffcivW`dcdG6v?G8*%2$2ZtQHpa&Np3qpm z`hGGb)qf<;^=911b?r7$&SZ3j1vXEWrkCTy` zHFY5Glc^fb)H;v!KxGXI&rdmu^iU~4^2?s25I+~*6Ya0|fkLgf-K57ZAS1f(0&e4N z)#!3-s#?nbs+!qm{Bafl literal 0 HcmV?d00001 diff --git a/tests/ref/coupler_ring_coupler_ring1.gds b/tests/ref/coupler_ring_coupler_ring1.gds new file mode 100644 index 0000000000000000000000000000000000000000..2e0993f85dc084dd78d6b6798adec5c02dcf915e GIT binary patch literal 2484 zcmbW3ZD?Cn7{{M`lbob^?`@3hEKP;_f^ThJx+W@fo7J%?qBwL;G)tOvtISri4i$Wv zLvT9ui~7ZZRKX2VQJhH8I?xXr_y!6N#fs=a#Sb!2zbG1i=iZy7jwE*W%kSQs=RD8< z{LeYhsVFhctukPk{*w}ve(}q&3@v|_u&H)Umusck{UQmEZ|(ZW$FDnf_*7wHVPyW` zwkpa#{YI1hZJ-e#4Vr_b6$8cJ_0TC53WkOWc6p>5fo_hVWp?bZpL{jS-6iH6# z?+x1Dy}csd9%sB^j}MAES7!;tJR-(#lCZO##}{GrIhwM#BO)=BAa666xEo zN4Z?_sMHmTE*-5_a6Nqg20|#Xs#q=U7`k-V&SX9_wm$Vzd7h zn_Ab@kaJ>#Ox$X$Zeg@oEllRpQ`sp|tBt)P;Q`-sg%IZok?3JB}sN9pkPW zk%P@D#ocqY()5m2pqxcorSMol_?V92!ZNFG8knjzEr``7UJZc{af~JOPs=t-wL}E4)y|w-1i7oqOQ~ zoQJoH_;sGU;ZgV)hxU5-68st-7wOpve}TU<%YKpIUbtB#gn`0y=mq!zwvpQi!DH}t zk;u*P4Y-6x^hHaMI??ao7b3Ac(7GP->^UM5--yBA8hjJphgNz_0)6pM;KOLtc^-j3z

V*5+RhbziccLW4`| zZ|B{bgHJN4zAwXXpniV`KeVsUz)?7jUvI<9As*7vBtT3Y-vWG#Gf)2_%s^_yzGodig3L#4 zg*ny<|Dq=#vC-Y|EXdk>@hdV9w?Jxn{y-DjJ%`}6@D?U4--QHlb zo}-ZSt{R<@z6*>^ve@2f&I?i#%*c$Fn{;XlvJus-#M)d=sQ@a zwzEo1pH_v-^Nnf^{;#U7{@b-`Xu+u(T4+>j@Jy<@|7$G2jdb^2Wwq~y&D*9!|4omL kmNVnI3R~y&d+7{(Z)NG~K;M4H0exbfRc`QK4tTxt56FV62LJ#7 literal 0 HcmV?d00001 diff --git a/tests/ref/coupler_ring_coupler_ring_e0bb2bc4.gds b/tests/ref/coupler_ring_coupler_ring_e0bb2bc4.gds new file mode 100644 index 0000000000000000000000000000000000000000..6d30276be468bada562a4b8a405dfd3faf6131df GIT binary patch literal 2492 zcmb7`ZD?Cn7{{M`Z*r36y|*#0wKNsx3%<2UleATt+pNl_h~m&W(JXIlmDx(xp@J`S z2u_E7QNJii6?BM-;zWwpfqvM)H&AdWRzwFXevpCsWuozS-;$t7Q}g9_@5yt{^FROd zoO7-y(e>>ztm%Q15|Tj)$a)!Vf0l@@_RN;+rTTp$NyEQk(_@p@9y@$$dS+>C@wpw_ zWZ2)m?~qcJ`F(fqsnv`1*|}ZC+IYE~Emv|PzMzPT>M|oLri;i$38T^Ye6-PMD3SC= zk0PlVtKFmB?(3(2pVMEn`-eoGZH*F)8zS28lC(!VhZdptSr%oDy;i;=*Ag96Hz0#N2$|QYNOJSrruawS;s53PQO2l!;j#7haKI7=>9&4+|TVk`T$GV!G z*oj`T>5WYdIVU#6#7%FNr^kyEwQ_!Xs+t!yr0o}p4Er~~ZTI2Xn#HM|_M5#LUHcO0 z_HoyZ$dP82;@*XNX?EA{g<`&tD-;UjlU>Jdi_BL_gu0PdMe%D>(K*s_$BPWes@0xS zsyRxzn#)XP@>Aq+E8VG7yV9-HPK6H~^hncbtDT?CR;BmO>h7_2_kB3F&Q#^vT(wx+ zXKlc8He0QX=d!i~P9lA|qXRAN|5=CLTAB`&%9+YUWvZ70@kPgh_@Xy+kN?MkX4ZVc zTjy1M4=*`c!%JQ^k8934(mLDPvU~Mt`Om&+{?l@!>1h}DJ4B+*uGAjxuT!1Z`(I8N z%g*j{9FRi}wUo;jA&K-c$RVr02RUerEieI3z!ZY2a0LDa&lm9@fO!tDemDcIb-hI- zV2yJZJPIG>h`tWK1iyjDMf!HbU*R9ja!@3+A8r*1W1#RHegS?+(K5CchR5J-BGH@R zn{Wk<=!=ygd1BwgFGb?FqjeMH**GGSxCX5kLY{qxMf$lF{O7^@;cJj{Uy;MS7?RI? z0L|nu$rt#EbAW9ed=PFxE6)S-@G1B#nn&RW@O5|+&6jgkYVadSp2)2*1Am5i6TJsA zc8t3&xf4DE??mf*Sch-Hd(p~`l0;wPQ}_@Xt#KZPKf(iOBi80$4y{|rd=d>V&A**@ za{)ddk+WYV;x(K&Hav7)5gm&X)cs0BkO`kww!`D+E$Ie0pMmL4i?xPHJ9yNrpjzp^D+emg>o+jB2tw{{R2? zmVv=`2Ll76@c;k+H^OL;_~Zf^4Zi=|7=QpMwFX2_wv$!x1E~T6Hc7U8Lk1Q>1_l-` z1_m)9w&Iea#LV=Jl6W&?1GA(=Q$q#@9sy>EsX+BGl>$O+DM>}~7KsL_iAjkmlYcQ9 zPW;cqVVY=ekd|tkIN4BMX0kq`o2(og9uI7`V_GS#C&mUgDmgVLCqB(I(bO{8+zit> zaFY+pD{+`u7^avRrzKB*EpLb57%I3;j%1VpxdY~SpgWQ@1Rxf`+{(bh4fZL>{V0}B MzAUH5%)-I|0EilNyZ`_I delta 383 zcmZ4E@XKLBp|FS$TXKGBK~8E>yoFI(l4W9=`NY2J$+7Z09EL{bCI;qdmXizRWhMtQ zxlQI|RI}Rq|NpSp*pvShyG%#Dv(2ONtUR(=$rqQ!P!B zQcaAECZA@Mg3<@dXu*Uy$lKixZ?}ulP1T?@hHJmVfqsuT-|a?9BBq= amdPf@Mw7S7*&#TE^3s#VUL>;1OVEU|=u;Vg?2dNw)lg5<> P?Tqr1lNdvpSy&hV7_2p}f?*lF+=o#N5=Bcq0=- zBSUj@gNYxF+zr@B(ZRsL!o|QKBE*Ja)C0HXJ1p&YSQxk8VPX1dFma~50J@sZW{kU; T7+EK?u;>Cw7nVw978V8o4PQOZ delta 168 zcmaF!n&ZZ6jtPZAB0_ArnMFnUMe#{yhK7kIDHapw8)=KMp^Gvwuy8Rj09B_Zr6%Ua zrzgjkq#7C<8ZbV>ng2pfiQvlC;x6C(&S0WmWWvj8zG5VHX> zI}mdKF((jn0Wmia^8hg~5c6$!V&wN;%E&r>!7_ebAoXAwzbBB=TF!3{q)L|a`va+K H%lVxE>Eur9 delta 276 zcmZp;U^nA}-Govh5h1qR%%YB;dWsfNae2Jsdtsp*qt7@fr>*s#hq7csUMF@i7?5HkZY3lOscF&hxG12G2>a{@6J z5OV`D4-oSLG2iwgMt<+5!dwh&Qj81?3_Q}T4rySJF@4`MeqCV>B#8!~0w9?FW*NUH YBgb^J<^1MY<@1*F`(u^Zx18Sz0J_&g3;+NC diff --git a/tests/ref/gc_te1310_broadband.gds b/tests/ref/gc_te1310_broadband.gds index 5bf89339c48eb53e6f49b64e2311da9da557a798..f5f317d83657a8499a27315ccca12f3a549f0125 100644 GIT binary patch delta 195 zcmcbzTHwlRfeF=m210C^xdr(}CGqJg#qqhBMMe2V@yYo>p}f?*lF+=o#N5=Bcyp6v zizI{O#EHE|?gnh6=wM)A;bLGA5n@9(s`&^@`wC(02;wU7ytkO delta 198 zcmcbzTHwlRfeF<@B0_ArnMFnUMe)fg<|gJwiK!D;8p+DBv85)ZCg#ScC&!nh8X6lK z#3vQyC#EDN=A|%fj}u}!%p}agz$V4Wz`(#G&FUaI69i^WR}y8>MUn710|wIrL|Gaq r?w2tYVMDi$fq{jKfk93PkA=-jjO|K{Aj|~B%-fY1S$GARSy&hVQW!Tw diff --git a/tests/ref/gc_te1550.gds b/tests/ref/gc_te1550.gds index e11481db085c003b9e0129316813f25b0086e861..00ba3c11a49430ba6d23123e1e29ade2ce195b87 100644 GIT binary patch delta 212 zcmZ4Ro^8>4wh4uL210C^xdr(}CGqJg#qqhBMMe2V@yYo>p}f?*lF+=o#N5=BcoS1Y z6H_CT)QQbT?gnh6=wM)A;bLGA5n@9(YI@mrM)ip^;J1Mt>j`1))}LW3&|JVqlYEWME+6k!E#}oCyN6ra#%ns4L8Y zB#{ON8PkQfGdiP4_?!WQ>0#R$JtuCJ(FWR&<|+mT7A^(`pli|HHCcjDotcG&0RXV@ BI;#Kx diff --git a/tests/ref/gc_te1550_90nmSlab.gds b/tests/ref/gc_te1550_90nmSlab.gds index c313236de9e1df422c8e676d20726499316e2344..f59446d9ce3a0a8649cb4f9a3af0669f8f643429 100644 GIT binary patch delta 191 zcmZp8%lP08B0?AzP5hwF%)-I|0Cd+t8UO$Q delta 218 zcmaFxhOyx-{jZGA`VmERqDyi!omOmLMuV% diff --git a/tests/ref/gc_te1550_broadband.gds b/tests/ref/gc_te1550_broadband.gds index 8a2a84ae036cd9383ed7d916a0bfb5557a9c78f9..6009c07c12bce430a242eb1a774952cda623929c 100644 GIT binary patch delta 177 zcmZ2Am3Pln-U-!u210C^xdr(}CGqJg#qqhBMMe2V@yYo>p}f?*lF+=o#N5=Bcr&9k z6GP)v(}}%C?gnh6=wM)A;bLGA5n{tI>Wj0m2pfiQa|mO52qOqHZ4Y5&R`z6Mo!;fe GtN;MU=s7w7 delta 160 zcmdlpm3P%t-U-!0B0_ArnMFnUMe&Ko7Rd%_7A6x{8kvf)p^Gvwuy8Rj$O*BfCZ#6k z#-}I8m!uk+ni|9>73C+UBqiphFicirbe5H4!=s|Pg0a1V5rmnxS1>XwdkS+fut_m8 VFfi~)vpPu51c6!8=XfzI0011lE@=P& diff --git a/tests/ref/gc_tm1550.gds b/tests/ref/gc_tm1550.gds index 7977dfde6f9fcb390e7dd29ccce1c8301ac37c80..047bed5f74f0ad14eaef9f16222be5e5c0f1defb 100644 GIT binary patch delta 187 zcmey;$oj33bwZ(@fe>3}Zb5!gNql-raeQuOQBi(Td~!ZeC@(dyBs4ECF*h|O-XzJ$ z#M~^=Y+|#Ky8#<1Iv5yOxEL5jgxJuHntsZGQN8&k%l4Nnj61Cb(4{w?_|3$~I{6y2 SE|3&saR!n(EVaxmEDQj#tv*u# delta 189 zcmey?$oi#`bwZ(#h!9(DW>HaoQM|FKX=-w^fyKo6M#3U&Y^h19iMjFV$?+w*hNh+l z4BI(u8Gkbgb1|?dNX`U-S<_h@7o5S)8=d3T0WBSa+-L?NXhiG>Iv2^9DT zyq{U$Xs&EN-gj544@-CLoh=kIL$ub`>$UP}rBp@`0e0NLgPkw{7IQv7LG&>POrQ4< z2%er`nr#Xl#yKp{) RTN%xD(}laN+>rkr;0Ic`j=lf@ literal 0 HcmV?d00001 diff --git a/tests/ref/mmi1x2_mmi1x2_e0bb2bc4.gds b/tests/ref/mmi1x2_mmi1x2_e0bb2bc4.gds new file mode 100644 index 0000000000000000000000000000000000000000..048d31cf11cbf967145bc9fea608d0f0a7a81bf4 GIT binary patch literal 736 zcma))KTE?<6va8(TW>6HJlu6w%J=iPt?f+|GwE!ob*)w{okTm8g*cAly(PfQ0(w}%fgVu+=JGB- zLG(TajGuLtjgM0As;PTpzw$)w4jbQ$9nOm=(N`dKBGO4eg$GuffO9PK89le^Rczhe zPx^oGL?1Ul`CC@$LO9ORu*&^@zTDg2=9K-#Z&miTxvlp0AL_qf4thqem>uOS^5$XQ zW$M*lp#3arrw*cc_9dW>Sg(zmtpA~iKCgr_YN#MdIHCBj(vuFd2uw2hPTVc%!;;OF X=9OER9O8`zd(Cw5E?Te8dwci>N+gj~ literal 0 HcmV?d00001 diff --git a/tests/ref/mzi_mzi_a1fe9d55.gds b/tests/ref/mzi_mzi_a1fe9d55.gds new file mode 100644 index 0000000000000000000000000000000000000000..a10dd727d0a9c066a346ad8bebdaa4ac6d37dbdb GIT binary patch literal 24312 zcmeI)cYIdW{W$QOC!2×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 H%x3XFw*M5^ literal 0 HcmV?d00001 diff --git a/tests/ref/ring_double_heater_ring_double_heater_f261383d.gds b/tests/ref/ring_double_heater_ring_double_heater_f261383d.gds new file mode 100644 index 0000000000000000000000000000000000000000..1648e92522b66d40604883044739c55fa3b7a3eb GIT binary patch literal 6658 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 H*NguE*W?f0 literal 0 HcmV?d00001 diff --git a/tests/ref/ring_double_ring_double_64b48b6b.gds b/tests/ref/ring_double_ring_double_64b48b6b.gds new file mode 100644 index 0000000000000000000000000000000000000000..7b5d611713e791e411e00f7955f8f00ef3925256 GIT binary patch literal 3952 zcmbW432anV6o$`xGxMfQ>(YJw#rlLEgk0dc*Ptgl98y@G_^K2*0xmnZK}N`bv3mfw@6Ha zNxFW_HtEA!%TO?maacxe2sq*I^ZEW1ne?J``P&nPhkOEmlqil`?He}g_B<9`4D5p{7zx!YS^Jd8c+EoxVS5w)&OPf_==YKGQR zwREiKLjk1qbRhRO;Ky zUq$UcpP#$>=M|`*_5l0s<=*a(Oxzuz2xEeI*;RU5OI0L7?=3?G?6h>PsluymWf1;ft7GK9LrI4Gn@>MLa#{leAtX^`sv&T zm%-&Cu@3k$Tn9Ic#FfIY;Wl_gBz_#K(T(xnLDo-TE*Sxj!J9;E^I@AvqW&Cs2|fhB z5J^gcop2?coWsK_A6^UB!-XO#L*QGG=Z5kt#m6zGGQWKboGy~e8tMwT6|#03-%aR{ z#{W%KBI)ID4SWZloQ6evj4{i{$cPiz4UThtWJ1 z{tVkh@)(ak1s9=xBm4&bB9hNMvCN%+3)~OUB#wQ{rw8Kph!j+y{Y1zGAYT9e9@_K& zf_E>h7Dy^G9nBjov^r`ndkx$(nx7fho*)I6(9+B$j+~C`^Q7A-;Lk zMqwN*gVDtK8nnWEXd(~vaIyzE*gF3rKl0M|CySh%zrow!Pv~+2?uB*mb9DO=Qe%!O z@J)363a)}z!$;BmV|XVV4rj3+8{kAZ1TvPk9_B&z*BQZnqF(_zr#j$H_WNl_tafrP zSVBEK0c#<-6|h&yk3;fLwvp@a)X{QCJW09+k5FeT;Ega7QYSX%&m%8ep|Lj!ufsd2 zS9Hl6K^>!0E;_`cTkaO>oLqCsJ+1~4b1ZwGgVwS4z-M6+yoP>RgJ$@}42Q4MPrKk$ z*Z`@AXg*o5(0|Xv@$gbK?4&>ULt>0v0LvkHJHDllx52p(ogM631fR^c^!+AyIYfgD zVzaV-2K}jRM^o0$k9TqX~brkjJDLd1;5k@oI`ui_5geelB1cr zOhHF;4s7Q9I)b*R;Jc6*P4}VgSvUzUgy@*);~YE#?}oe4_8*7_w!7eiXiH72GvV!U zG}@B4>V(X%vgdKfIA>45dbk%&iCNhSXTWu6%9!#bybj)rmOJ1aI1*N)35iv)paHrl?3)>#6l_iH{316~ zB}4;t10-)1t#vA^Ah{|j24!i0z_{J=+|rDD32XQEeiZ%&P&c!-uCCZkqFp!I3w{IW zd)01kO8PrlT4MM2j^Hgy{UH3l6}%ILZYV)ZwCK;=3e{&0I6kMl= gh`O=tXGGz961wa4x+l?_{5vkubZsy1H)gZ^3;D9V`Tzg` literal 0 HcmV?d00001 diff --git a/tests/ref/ring_double_ring_double_a459ac5d.gds b/tests/ref/ring_double_ring_double_a459ac5d.gds new file mode 100644 index 0000000000000000000000000000000000000000..c1acbb746aba158d9d096c3425450fc4f81c041c GIT binary patch literal 3770 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 literal 0 HcmV?d00001 diff --git a/tests/ref/ring_single_heater_ring_single_heater_59bd74a4.gds b/tests/ref/ring_single_heater_ring_single_heater_59bd74a4.gds new file mode 100644 index 0000000000000000000000000000000000000000..d2aef0f1d5842bff9207abe89850c3354bea934b GIT binary patch literal 10856 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 literal 0 HcmV?d00001 diff --git a/tests/ref/ring_single_heater_ring_single_heater_cc91df46.gds b/tests/ref/ring_single_heater_ring_single_heater_cc91df46.gds new file mode 100644 index 0000000000000000000000000000000000000000..bf5f1c80852eb6ced9df06f5b2c34ced60b5eea5 GIT binary patch literal 11258 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 F0RZD=JNEzp literal 0 HcmV?d00001 diff --git a/tests/ref/straight_heater_metal_undercut_straight_heater_metal_undercut_with_undercutFalse.gds b/tests/ref/straight_heater_metal_undercut_straight_heater_metal_undercut_with_undercutFalse.gds index 0ff63a4886c6841d1783e8b98b3180c2794c5be8..a7be1f52726ac5034f74bb8b722b5df7d291ea40 100644 GIT binary patch literal 3312 zcmcImJ#5oJ6n=J`ODF-_P$eyjP+E0CAYq3#O_r#jiiH6NBz_j-#!eG8P1D#0%G41M z13L_r7+66tFfy^g&<(NiC#DV^Ktfc=+@0gtv2$@6l}Ogv*7v^m{JwYJ1rYH3b;xjh z>>G^0B*b6_vfg`0@Tgu}YALM^fbmGQbpFBorFYMFi;Hj0Zaukq6*5tFY#t%qXeqVj zsv%c3#n4*vs%9v4*=(pytdk0YiJEa*0pt0Ym_xv zElRVhc&-4D7>$7Q6UOYAR1)2;DY9-Tw$}B-z)~Cx99EyZ!{ACw1nM8)t z#C6XW^YewuQo-ii`51yiCpe5qWTF>dQ>0z7@avQt7lXdNOL=-%*BZ-4RcuNi!~xI| z9ymZpdCYaj?t^7n2tTRLitqo>OzoAvr(YkEHH-T9ooIvm+)>r7td}Aa9%Mx<6pCu4 zFe5qYskA~z6E9X(b7EeTTx@BRi7hS_i*s6D>hQjL!Ndl5-)EUvKQFg%g^Bg^a@XE6 zu>sx>yG(3=_xmj-*3Zk|c+AB5dHHn;gz{Su*=84(y@P}=PhDilUY+nbgg0Yfk0@nqk0@nu9)?G> zJ?60AWA;u0ka&B=ru&uF+Ft24GNF8ur~W{JCr_?Ivcz*qn_G(GI(NkF$!n z>$H9HDY`D#l?|;WNwO@;dhMPjiLxx=&DYCm15vrqsE`V$?UTT*Bf#j)S;E!XvUct| z7r^oR-phGU)`5EDop0~%bMp2)1Jg}=zSCsa4>8{)p3FCiA7;J>i4UJt7;3)LEB1V+ z&4ZqA+RgpUw^uu_%l6gI6m9KHJmkY@N8*WgBz_p}28sV)+L@Ryu;}aI{_HVtzFU?LVTUwXW7?c=Nc(v|lYx1Qf#f^1yuTR_ONO{1|= zxAi(UY;5YQ*fyGar&YyfrDN;&8+N_-?W)nVFo1Fl0G*IQ0(4R)s?d2E0FtL-0Maj* z7$+9uHPscii6J4SNF%I_J^F9AdApYhed ziCZgnU2T)SO!oGi)ED3a-)&M&M7~vBOFsW)nYxy}XRAL%)@n7c7O++%{V^N zsyJ)c|2XSPpX!5i0MwsblBnAZ+_LwFRb5ky#Zt8vrMjHus>|7H+<# zkWQZF-EUZy-ZVC_scE{d>Q>_+)>K{B$VU55ncLNUUinC`h;B%uaQC~N5UM1=nMeFd zY*Xtve`q(5DYN&0TK2zDDmjhVx%XDyw+2^1%IhVX#eF;_T#@^pDH%mUjw=vO9$FtV zX?nBSJDY=Q;wQb%1Bg>mYvb0<(&EtaB?TEK;gk&h@r<{-s#*`MX z3&~(i>Ba{k8H)LNUr2^x{&xB+!ro7I;fjb|H`BNP==D#f=8H^b-w}oU- zXY9$MkPO9i+CnlIQ^|Z2lEIkD({Ujg>}2KTrjQJt4rS+sM@GyZ|NZAFb5B42edD`H w=>0d@<}-bg?uOw08+H>>e>&5t{}E?;-~8&E-0li|6ErZRdXsd>{8AM74^ag8KL7v# diff --git a/tests/test_components.py b/tests/test_components.py index 3af02499..d7b828d0 100644 --- a/tests/test_components.py +++ b/tests/test_components.py @@ -18,6 +18,7 @@ "add_pins_bbox_siepic", "add_pads", "add_pins_bbox_siepic_remove_layers", + "import_gds", } cell_names = set(cells.keys()) - set(skip_test) dirpath_ref = pathlib.Path(__file__).absolute().parent / "ref" diff --git a/tests/test_components/test_pdk_settings_add_fiber_array_.yml b/tests/test_components/test_pdk_settings_add_fiber_array_.yml index 517c32f6..3409cf54 100644 --- a/tests/test_components/test_pdk_settings_add_fiber_array_.yml +++ b/tests/test_components/test_pdk_settings_add_fiber_array_.yml @@ -1,29 +1,16 @@ function: add_fiber_array info: - length: 10.0 - route_info_length: 10.0 + length: 1.0 + route_info_length: 1.0 route_info_type: xs_sc - route_info_weight: 10.0 - route_info_xs_sc_length: 10.0 + route_info_weight: 1.0 + route_info_xs_sc_length: 1.0 width: 0.5 module: ubcpdk.components name: add_fiber_array_add_fiber_array settings: component: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 component_name: null cross_section: xs_sc fanout_length: 0.0 @@ -32,25 +19,10 @@ settings: function: get_input_labels grating_coupler: function: gc_te1550 - info: null layer_label: - 10 - 0 optical_routing_type: 0 - post_process: null straight: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 with_loopback: false diff --git a/tests/test_components/test_pdk_settings_add_pads_dc_.yml b/tests/test_components/test_pdk_settings_add_pads_dc_.yml index 4d025a6e..ed8ffd79 100644 --- a/tests/test_components/test_pdk_settings_add_pads_dc_.yml +++ b/tests/test_components/test_pdk_settings_add_pads_dc_.yml @@ -1,7 +1,7 @@ function: add_electrical_pads_top_dc info: {} module: gdsfactory.routing.add_electrical_pads_top_dc -name: ring_single_heater_add_electrical_pads_top_dc_cc2475fe +name: ring_single_heater_add_electrical_pads_top_dc_984bbf2d settings: component: ring_single_heater get_bundle_function: @@ -11,7 +11,6 @@ settings: bend: function: wire_corner cross_section: xs_metal_routing - info: null pad_array: function: pad_array module: gdsfactory.components.pad @@ -28,14 +27,6 @@ settings: layer: - 12 - 0 - post_process: - function: add_pins_siepic - module: ubcpdk.tech - settings: - layer_pin: - - 1 - - 11 - port_type: placement size: - 75 - 75 @@ -43,7 +34,6 @@ settings: - 125 - 125 port_names: null - post_process: null select_ports: function: select_ports module: gdsfactory.port diff --git a/tests/test_components/test_pdk_settings_add_pads_rf_.yml b/tests/test_components/test_pdk_settings_add_pads_rf_.yml index b5c91837..873b53c5 100644 --- a/tests/test_components/test_pdk_settings_add_pads_rf_.yml +++ b/tests/test_components/test_pdk_settings_add_pads_rf_.yml @@ -1,11 +1,10 @@ function: add_electrical_pads_top info: {} module: gdsfactory.routing.add_electrical_pads_top -name: ring_single_heater_add_electrical_pads_top_cc2475fe +name: ring_single_heater_add_electrical_pads_top_984bbf2d settings: component: ring_single_heater direction: top - info: null layer: MTOP pad_array: function: pad_array @@ -23,14 +22,6 @@ settings: layer: - 12 - 0 - post_process: - function: add_pins_siepic - module: ubcpdk.tech - settings: - layer_pin: - - 1 - - 11 - port_type: placement size: - 75 - 75 @@ -38,7 +29,6 @@ settings: - 125 - 125 port_names: null - post_process: null select_ports: function: select_ports module: gdsfactory.port diff --git a/tests/test_components/test_pdk_settings_bend_s_.yml b/tests/test_components/test_pdk_settings_bend_s_.yml index 471a9d03..3da9531c 100644 --- a/tests/test_components/test_pdk_settings_bend_s_.yml +++ b/tests/test_components/test_pdk_settings_bend_s_.yml @@ -8,9 +8,7 @@ module: gdsfactory.components.bend_s name: bend_s settings: cross_section: xs_sc - info: null npoints: 99 - post_process: null size: - 11.0 - 1.8 diff --git a/tests/test_components/test_pdk_settings_coupler_.yml b/tests/test_components/test_pdk_settings_coupler_.yml index 182dbcae..bc04f258 100644 --- a/tests/test_components/test_pdk_settings_coupler_.yml +++ b/tests/test_components/test_pdk_settings_coupler_.yml @@ -3,49 +3,14 @@ info: length: 10.186 min_bend_radius: 11.857 module: gdsfactory.components.coupler -name: coupler_4abc60df +name: coupler settings: coupler_straight: function: coupler_straight coupler_symmetric: function: coupler_symmetric - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null + cross_section: xs_sc dx: 10.0 dy: 4.0 gap: 0.236 - info: null length: 20.0 - post_process: - function: add_pins_bbox_siepic diff --git a/tests/test_components/test_pdk_settings_coupler_ring_.yml b/tests/test_components/test_pdk_settings_coupler_ring_.yml index 15895216..d232a33d 100644 --- a/tests/test_components/test_pdk_settings_coupler_ring_.yml +++ b/tests/test_components/test_pdk_settings_coupler_ring_.yml @@ -1,7 +1,7 @@ function: coupler_ring info: {} module: gdsfactory.components.coupler_ring -name: coupler_ring_4abc60df +name: coupler_ring settings: bend: function: bend_euler @@ -9,44 +9,9 @@ settings: function: coupler90 coupler_straight: function: coupler_straight - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null + cross_section: xs_sc cross_section_bend: null gap: 0.2 - info: null length_extension: 3 length_x: 4.0 - post_process: - function: add_pins_bbox_siepic radius: 5.0 diff --git a/tests/test_components/test_pdk_settings_dbr_cavity_.yml b/tests/test_components/test_pdk_settings_dbr_cavity_.yml index f079899a..030952cd 100644 --- a/tests/test_components/test_pdk_settings_dbr_cavity_.yml +++ b/tests/test_components/test_pdk_settings_dbr_cavity_.yml @@ -5,42 +5,5 @@ name: dbr_cavity settings: coupler: function: coupler - module: gdsfactory.components.coupler - settings: - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null - post_process: - function: add_pins_bbox_siepic dbr: function: dbr diff --git a/tests/test_components/test_pdk_settings_dbr_cavity_te_.yml b/tests/test_components/test_pdk_settings_dbr_cavity_te_.yml index 9b41f639..9d68abcf 100644 --- a/tests/test_components/test_pdk_settings_dbr_cavity_te_.yml +++ b/tests/test_components/test_pdk_settings_dbr_cavity_te_.yml @@ -9,43 +9,6 @@ settings: settings: coupler: function: coupler - module: gdsfactory.components.coupler - settings: - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null - post_process: - function: add_pins_bbox_siepic dbr: function: dbr component_name: null @@ -56,25 +19,10 @@ settings: function: get_input_labels grating_coupler: function: gc_te1550 - info: null layer_label: - 10 - 0 optical_routing_type: 0 - post_process: null straight: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 with_loopback: false diff --git a/tests/test_components/test_pdk_settings_ebeam_dc_te1550_.yml b/tests/test_components/test_pdk_settings_ebeam_dc_te1550_.yml index 7b07e047..bc04f258 100644 --- a/tests/test_components/test_pdk_settings_ebeam_dc_te1550_.yml +++ b/tests/test_components/test_pdk_settings_ebeam_dc_te1550_.yml @@ -3,7 +3,7 @@ info: length: 10.186 min_bend_radius: 11.857 module: gdsfactory.components.coupler -name: coupler_17b65cbd +name: coupler settings: coupler_straight: function: coupler_straight @@ -13,10 +13,4 @@ settings: dx: 10.0 dy: 4.0 gap: 0.236 - info: null length: 20.0 - post_process: - function: add_pins_bbox_siepic - module: ubcpdk.tech - settings: - remove_layers: true diff --git a/tests/test_components/test_pdk_settings_mmi1x2_.yml b/tests/test_components/test_pdk_settings_mmi1x2_.yml index 850bb6e8..57995a7a 100644 --- a/tests/test_components/test_pdk_settings_mmi1x2_.yml +++ b/tests/test_components/test_pdk_settings_mmi1x2_.yml @@ -1,47 +1,12 @@ function: mmi1x2 info: {} module: gdsfactory.components.mmi1x2 -name: mmi1x2_4abc60df +name: mmi1x2 settings: - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null + cross_section: xs_sc gap_mmi: 0.25 - info: null length_mmi: 5.5 length_taper: 10.0 - post_process: - function: add_pins_bbox_siepic taper: function: taper width: null diff --git a/tests/test_components/test_pdk_settings_mzi_.yml b/tests/test_components/test_pdk_settings_mzi_.yml index c0da023d..ba1f5c4d 100644 --- a/tests/test_components/test_pdk_settings_mzi_.yml +++ b/tests/test_components/test_pdk_settings_mzi_.yml @@ -1,7 +1,7 @@ function: mzi info: {} module: gdsfactory.components.mzi -name: mzi_0e264d4b +name: mzi_f5c6fc9f settings: add_electrical_ports_bot: true add_optical_ports_arms: false @@ -13,33 +13,19 @@ settings: cross_section_x_top: null delta_length: 10.0 extend_ports_straight_x: null - info: null length_x: 0.1 length_y: 2.0 + min_length: 0.01 mirror_bot: false nbends: 2 port_e0_combiner: o3 port_e0_splitter: o3 port_e1_combiner: o2 port_e1_splitter: o2 - post_process: null splitter: function: ebeam_y_1550 straight: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 straight_x_bot: null straight_x_top: null straight_y: null diff --git a/tests/test_components/test_pdk_settings_mzi_heater_.yml b/tests/test_components/test_pdk_settings_mzi_heater_.yml index dd8dd650..3850fb5a 100644 --- a/tests/test_components/test_pdk_settings_mzi_heater_.yml +++ b/tests/test_components/test_pdk_settings_mzi_heater_.yml @@ -1,7 +1,7 @@ function: mzi info: {} module: gdsfactory.components.mzi -name: mzi_5a8609eb +name: mzi_a1fe9d55 settings: add_electrical_ports_bot: true add_optical_ports_arms: false @@ -13,33 +13,19 @@ settings: cross_section_x_top: null delta_length: 10.0 extend_ports_straight_x: null - info: null length_x: 200 length_y: 2.0 + min_length: 0.01 mirror_bot: false nbends: 2 port_e0_combiner: o3 port_e0_splitter: o3 port_e1_combiner: o2 port_e1_splitter: o2 - post_process: null splitter: function: ebeam_y_1550 straight: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 straight_x_bot: null straight_x_top: straight_heater_metal straight_y: null diff --git a/tests/test_components/test_pdk_settings_pad_.yml b/tests/test_components/test_pdk_settings_pad_.yml index 85fd0d7c..a7786a50 100644 --- a/tests/test_components/test_pdk_settings_pad_.yml +++ b/tests/test_components/test_pdk_settings_pad_.yml @@ -9,27 +9,18 @@ info: xsize: 75 ysize: 75 module: gdsfactory.components.pad -name: pad_a56a8c7f +name: pad_0210fbc6 settings: bbox_layers: - - 13 - 0 bbox_offsets: - -1.8 - info: null layer: - 12 - 0 port_inclusion: 0 port_orientation: null - post_process: - function: add_pins_siepic - module: ubcpdk.tech - settings: - layer_pin: - - 1 - - 11 - port_type: placement size: - 75 - 75 diff --git a/tests/test_components/test_pdk_settings_pad_array_.yml b/tests/test_components/test_pdk_settings_pad_array_.yml index 73852c30..173e3b95 100644 --- a/tests/test_components/test_pdk_settings_pad_array_.yml +++ b/tests/test_components/test_pdk_settings_pad_array_.yml @@ -3,10 +3,9 @@ info: xsize: 75 ysize: 75 module: gdsfactory.components.pad -name: pad_array_2e24007e +name: pad_array_25dc0e38 settings: columns: 6 - info: null orientation: 270 pad: function: pad @@ -20,18 +19,9 @@ settings: layer: - 12 - 0 - post_process: - function: add_pins_siepic - module: ubcpdk.tech - settings: - layer_pin: - - 1 - - 11 - port_type: placement size: - 75 - 75 - post_process: null rows: 1 spacing: - 125 diff --git a/tests/test_components/test_pdk_settings_ring_double_.yml b/tests/test_components/test_pdk_settings_ring_double_.yml index d7a7d687..a9cae3ce 100644 --- a/tests/test_components/test_pdk_settings_ring_double_.yml +++ b/tests/test_components/test_pdk_settings_ring_double_.yml @@ -1,61 +1,16 @@ function: ring_double info: {} module: gdsfactory.components.ring_double -name: ring_double_b0e5609f +name: ring_double_a459ac5d settings: bend: function: bend_euler coupler_ring: function: coupler_ring - module: gdsfactory.components.coupler_ring - settings: - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null - post_process: - function: add_pins_bbox_siepic cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 bbox_layers: null bbox_offsets: null components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 radius: 10.0 radius_min: 5.0 sections: @@ -74,9 +29,6 @@ settings: simplify: null width: 0.5 width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null gap: 0.2 gap_top: null length_x: 0.01 @@ -84,16 +36,3 @@ settings: radius: 10.0 straight: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 diff --git a/tests/test_components/test_pdk_settings_ring_double_heater_.yml b/tests/test_components/test_pdk_settings_ring_double_heater_.yml index db86f3dd..43c6d386 100644 --- a/tests/test_components/test_pdk_settings_ring_double_heater_.yml +++ b/tests/test_components/test_pdk_settings_ring_double_heater_.yml @@ -1,62 +1,17 @@ function: ring_double_heater info: {} module: gdsfactory.components.ring_double_heater -name: ring_double_heater_30105b49 +name: ring_double_heater_dde86d0f settings: bend: function: bend_euler coupler_ring: function: coupler_ring - module: gdsfactory.components.coupler_ring - settings: - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null - post_process: - function: add_pins_bbox_siepic coupler_ring_top: null cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 bbox_layers: null bbox_offsets: null components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 radius: 10.0 radius_min: 5.0 sections: @@ -75,9 +30,6 @@ settings: simplify: null width: 0.5 width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null cross_section_heater: xs_heater_metal cross_section_waveguide_heater: xs_sc_heater_metal gap: 0.2 @@ -88,19 +40,6 @@ settings: radius: 10.0 straight: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 straight_heater: function: straight via_stack: diff --git a/tests/test_components/test_pdk_settings_ring_single_.yml b/tests/test_components/test_pdk_settings_ring_single_.yml index 433cd454..5d481b98 100644 --- a/tests/test_components/test_pdk_settings_ring_single_.yml +++ b/tests/test_components/test_pdk_settings_ring_single_.yml @@ -1,7 +1,7 @@ function: ring_single info: {} module: gdsfactory.components.ring_single -name: ring_single_f7a07c6e +name: ring_single_382b19ee settings: bend: function: bend_euler_sc @@ -9,55 +9,10 @@ settings: function: bend_euler coupler_ring: function: coupler_ring - module: gdsfactory.components.coupler_ring - settings: - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null - post_process: - function: add_pins_bbox_siepic cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 bbox_layers: null bbox_offsets: null components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 radius: 10.0 radius_min: 5.0 sections: @@ -76,9 +31,6 @@ settings: simplify: null width: 0.5 width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null gap: 0.2 length_x: 4.0 length_y: 0.6 @@ -86,16 +38,3 @@ settings: radius: 10.0 straight: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 diff --git a/tests/test_components/test_pdk_settings_ring_single_heater_.yml b/tests/test_components/test_pdk_settings_ring_single_heater_.yml index 8297d403..c93dfb19 100644 --- a/tests/test_components/test_pdk_settings_ring_single_heater_.yml +++ b/tests/test_components/test_pdk_settings_ring_single_heater_.yml @@ -1,7 +1,7 @@ function: ring_single_heater info: {} module: gdsfactory.components.ring_single_heater -name: ring_single_heater_2c28c6d4 +name: ring_single_heater_cc91df46 settings: bend: function: bend_euler @@ -9,55 +9,10 @@ settings: function: bend_euler coupler_ring: function: coupler_ring - module: gdsfactory.components.coupler_ring - settings: - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null - post_process: - function: add_pins_bbox_siepic cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 bbox_layers: null bbox_offsets: null components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 radius: 10.0 radius_min: 5.0 sections: @@ -76,9 +31,6 @@ settings: simplify: null width: 0.5 width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null cross_section_waveguide_heater: xs_sc_heater_metal gap: 0.2 length_x: 4.0 @@ -87,19 +39,6 @@ settings: radius: 10.0 straight: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 via_stack: function: via_stack module: gdsfactory.components.via_stack diff --git a/tests/test_components/test_pdk_settings_ring_with_crossing_.yml b/tests/test_components/test_pdk_settings_ring_with_crossing_.yml index 89e46b33..f279fddd 100644 --- a/tests/test_components/test_pdk_settings_ring_with_crossing_.yml +++ b/tests/test_components/test_pdk_settings_ring_with_crossing_.yml @@ -1,7 +1,7 @@ function: ring_single_dut info: {} module: gdsfactory.components.ring_single_dut -name: ring_single_dut_ec96572d +name: ring_single_dut_26538df6 settings: bend: function: bend_euler_sc @@ -9,43 +9,6 @@ settings: function: ebeam_crossing4_2ports coupler: function: coupler_ring - module: gdsfactory.components.coupler_ring - settings: - cross_section: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic - auto_widen: false - auto_widen_minimum_length: 200.0 - bbox_layers: null - bbox_offsets: null - components_along_path: [] - end_straight_length: 0.01 - gap: 3.0 - info: {} - min_length: 0.01 - radius: 10.0 - radius_min: 5.0 - sections: - - hidden: false - insets: null - layer: WG - name: _default - offset: 0.0 - offset_function: null - port_names: - - o1 - - o2 - port_types: - - optical - - optical - simplify: null - width: 0.5 - width_function: null - start_straight_length: 0.01 - taper_length: 10.0 - width_wide: null - post_process: - function: add_pins_bbox_siepic cross_section: xs_sc gap: 0.2 length_x: 4 @@ -54,17 +17,4 @@ settings: radius: 5.0 straight: function: straight - module: gdsfactory.components.straight - settings: - cross_section: xs_sc - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 with_component: true diff --git a/tests/test_components/test_pdk_settings_straight_.yml b/tests/test_components/test_pdk_settings_straight_.yml index 9e8609e4..d4e24ff4 100644 --- a/tests/test_components/test_pdk_settings_straight_.yml +++ b/tests/test_components/test_pdk_settings_straight_.yml @@ -1,25 +1,14 @@ function: straight info: - length: 10.0 - route_info_length: 10.0 + length: 1.0 + route_info_length: 1.0 route_info_type: xs_sc - route_info_weight: 10.0 - route_info_xs_sc_length: 10.0 + route_info_weight: 1.0 + route_info_xs_sc_length: 1.0 width: 0.5 -module: gdsfactory.components.straight -name: straight_af6b139c +module: ubcpdk.components +name: straight settings: cross_section: xs_sc - info: null - length: 10.0 + length: 1.0 npoints: 2 - post_process: - - function: add_padding - module: gdsfactory.add_padding - settings: - bottom: 0.5 - default: 0 - layers: - - - 68 - - 0 - top: 0.5 diff --git a/tests/test_components/test_pdk_settings_straight_heater_metal_.yml b/tests/test_components/test_pdk_settings_straight_heater_metal_.yml index 61ecb18b..68c076ad 100644 --- a/tests/test_components/test_pdk_settings_straight_heater_metal_.yml +++ b/tests/test_components/test_pdk_settings_straight_heater_metal_.yml @@ -17,5 +17,7 @@ settings: ohms_per_square: null port_orientation1: null port_orientation2: null + straight: + function: straight via_stack: via_stack_heater_mtop with_undercut: false diff --git a/tests/test_components/test_pdk_settings_straight_one_pin_.yml b/tests/test_components/test_pdk_settings_straight_one_pin_.yml index 6d949f67..f9a37ae2 100644 --- a/tests/test_components/test_pdk_settings_straight_one_pin_.yml +++ b/tests/test_components/test_pdk_settings_straight_one_pin_.yml @@ -7,8 +7,6 @@ settings: function: cross_section module: gdsfactory.cross_section settings: - add_pins_function_module: ubcpdk.tech - add_pins_function_name: add_pins_siepic bbox_layers: null bbox_offsets: null radius_min: 5 diff --git a/tests/test_components/test_pdk_settings_taper_.yml b/tests/test_components/test_pdk_settings_taper_.yml index d85384db..d9457867 100644 --- a/tests/test_components/test_pdk_settings_taper_.yml +++ b/tests/test_components/test_pdk_settings_taper_.yml @@ -7,7 +7,6 @@ module: gdsfactory.components.taper name: taper settings: cross_section: xs_sc - info: null length: 10.0 port: null port_order_name: @@ -16,7 +15,6 @@ settings: port_order_types: - optical - optical - post_process: null width1: 0.5 width2: null with_two_ports: true diff --git a/tests/test_components/test_pdk_settings_via_stack_heater_mtop_.yml b/tests/test_components/test_pdk_settings_via_stack_heater_mtop_.yml index 88845eb7..620e593e 100644 --- a/tests/test_components/test_pdk_settings_via_stack_heater_mtop_.yml +++ b/tests/test_components/test_pdk_settings_via_stack_heater_mtop_.yml @@ -12,7 +12,6 @@ module: gdsfactory.components.via_stack name: via_stack_627f28a4 settings: correct_size: true - info: null layer_offsets: null layer_port: null layers: @@ -20,7 +19,6 @@ settings: - 0 - - 12 - 0 - post_process: null size: - 10 - 10 diff --git a/tests/test_netlists.py b/tests/test_netlists.py new file mode 100644 index 00000000..a6d5b688 --- /dev/null +++ b/tests/test_netlists.py @@ -0,0 +1,56 @@ +from __future__ import annotations + +import gdsfactory as gf +import jsondiff +import pytest +from omegaconf import OmegaConf +from pytest_regressions.data_regression import DataRegressionFixture + +from ubcpdk import PDK + +cells = PDK.cells +skip_test = { + "via_stack_heater_mtop", + "add_pins_bbox_siepic_metal", + "add_pins_bbox_siepic", + "add_pins_siepic", + "add_pins_siepic_metal", + "add_pads", + "dbr", + "dbg", + "import_gds", + "pad_array", + "add_pads_dc", +} +cell_names = cells.keys() - skip_test + + +@pytest.mark.parametrize("component_type", cell_names) +def test_netlists( + component_type: str, + data_regression: DataRegressionFixture, + check: bool = True, + component_factory=cells, +) -> None: + """Write netlists for hierarchical circuits. + Checks that both netlists are the same jsondiff does a hierarchical diff. + Component -> netlist -> Component -> netlist + + Args: + component_type: component type. + data_regression: regression testing fixture. + check: whether to check the netlist. + component_factory: component factory. + + """ + c = component_factory[component_type]() + n = c.get_netlist() + if check: + data_regression.check(n) + + yaml_str = OmegaConf.to_yaml(n, sort_keys=True) + c2 = gf.read.from_yaml(yaml_str, name=c.name) + n2 = c2.get_netlist() + + d = jsondiff.diff(n, n2) + assert len(d) == 0, d diff --git a/tests/test_netlists/test_netlists_add_fiber_array_.yml b/tests/test_netlists/test_netlists_add_fiber_array_.yml new file mode 100644 index 00000000..c4e8aaa8 --- /dev/null +++ b/tests/test_netlists/test_netlists_add_fiber_array_.yml @@ -0,0 +1,56 @@ +connections: {} +instances: + add_fiber_array_1: + component: add_fiber_array + info: + length: 1.0 + route_info_length: 1.0 + route_info_type: xs_sc + route_info_weight: 1.0 + route_info_xs_sc_length: 1.0 + width: 0.5 + settings: + bend: + function: bend_euler_sc + component: + function: straight + component_name: null + cross_section: xs_sc + dev_id: null + fanout_length: 0.0 + gc_port_labels: null + gc_port_name: o1 + get_input_label_text_function: + function: get_input_label_text + get_input_labels_function: + function: get_input_labels + grating_coupler: + function: gc_te1550 + id_placement: center + id_placement_offset: + - 0 + - 0 + io_rotation: null + layer_label: + - 10 + - 0 + optical_routing_type: 0 + select_ports: + function: select_ports + module: gdsfactory.port + settings: + port_type: optical + straight: + function: straight + text: null + with_loopback: false +name: add_fiber_array_add_fiber_array +placements: + add_fiber_array_1: + mirror: 0 + rotation: 270 + x: 0.0 + y: 0.0 +ports: + o1: add_fiber_array_1,o1 + o2: add_fiber_array_1,o2 diff --git a/tests/test_netlists/test_netlists_add_fiber_array_pads_rf_.yml b/tests/test_netlists/test_netlists_add_fiber_array_pads_rf_.yml new file mode 100644 index 00000000..1bf19c27 --- /dev/null +++ b/tests/test_netlists/test_netlists_add_fiber_array_pads_rf_.yml @@ -0,0 +1,152 @@ +connections: {} +instances: + add_fiber_array_1: + component: add_fiber_array + info: {} + settings: + bend: + function: bend_euler_sc + component: + function: add_electrical_pads_top + module: gdsfactory.routing.add_electrical_pads_top + settings: + component: + function: ring_single_heater + module: gdsfactory.components.ring_single_heater + settings: + bend: + function: bend_euler + bend_coupler: + function: bend_euler + coupler_ring: + function: coupler_ring + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cross_section_waveguide_heater: xs_sc_heater_metal + gap: 0.2 + length_x: 4.0 + length_y: 0.6 + port_orientation: null + radius: 10.0 + straight: + function: straight + via_stack: + function: via_stack + module: gdsfactory.components.via_stack + settings: + layers: + - - 11 + - 0 + - - 12 + - 0 + size: + - 10 + - 10 + vias: + - null + - null + via_stack_offset: + - 0 + - 0 + direction: top + layer: MTOP + orientation: 0 + pad_array: + function: pad_array + module: gdsfactory.components.pad + settings: + pad: + function: pad + module: gdsfactory.components.pad + settings: + bbox_layers: + - - 13 + - 0 + bbox_offsets: + - -1.8 + layer: + - 12 + - 0 + size: + - 75 + - 75 + spacing: + - 125 + - 125 + port_names: null + select_ports: + function: select_ports + module: gdsfactory.port + settings: + port_type: electrical + spacing: + - 0.0 + - 100.0 + component_name: null + cross_section: xs_sc + dev_id: null + fanout_length: 0.0 + gc_port_labels: null + gc_port_name: o1 + get_input_label_text_function: + function: get_input_label_text + get_input_labels_function: + function: get_input_labels + grating_coupler: + function: gc_te1550 + id_placement: center + id_placement_offset: + - 0 + - 0 + io_rotation: null + layer_label: + - 10 + - 0 + optical_routing_type: 0 + select_ports: + function: select_ports + module: gdsfactory.port + settings: + port_type: optical + straight: + function: straight + text: null + with_loopback: false +name: add_fiber_array_pads_rf +placements: + add_fiber_array_1: + mirror: 0 + rotation: 270 + x: 0.0 + y: 0.0 +ports: + elec-ring_single_heater_cc91df46-1: add_fiber_array_1,elec-ring_single_heater_cc91df46-1 + elec-ring_single_heater_cc91df46-2: add_fiber_array_1,elec-ring_single_heater_cc91df46-2 + elec-ring_single_heater_cc91df46-3: add_fiber_array_1,elec-ring_single_heater_cc91df46-3 + elec-ring_single_heater_cc91df46-4: add_fiber_array_1,elec-ring_single_heater_cc91df46-4 + elec-ring_single_heater_cc91df46-5: add_fiber_array_1,elec-ring_single_heater_cc91df46-5 + elec-ring_single_heater_cc91df46-6: add_fiber_array_1,elec-ring_single_heater_cc91df46-6 + elec-ring_single_heater_cc91df46-7: add_fiber_array_1,elec-ring_single_heater_cc91df46-7 + elec-ring_single_heater_cc91df46-8: add_fiber_array_1,elec-ring_single_heater_cc91df46-8 + o1: add_fiber_array_1,o1 + o2: add_fiber_array_1,o2 diff --git a/tests/test_netlists/test_netlists_add_pads_.yml b/tests/test_netlists/test_netlists_add_pads_.yml new file mode 100644 index 00000000..5ebac3a1 --- /dev/null +++ b/tests/test_netlists/test_netlists_add_pads_.yml @@ -0,0 +1,489 @@ +connections: {} +instances: + pad_array_1: + component: pad_array + info: + xsize: 75 + ysize: 75 + settings: + columns: 8 + orientation: 270 + pad: + function: pad + module: gdsfactory.components.pad + settings: + bbox_layers: + - - 13 + - 0 + bbox_offsets: + - -1.8 + layer: + - 12 + - 0 + size: + - 75 + - 75 + rows: 1 + spacing: + - 125 + - 125 + ring_single_heater_1: + component: ring_single_heater + info: {} + settings: + bend: + function: bend_euler + bend_coupler: + function: bend_euler + coupler_ring: + function: coupler_ring + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cross_section_waveguide_heater: xs_sc_heater_metal + gap: 0.2 + length_x: 4.0 + length_y: 0.6 + port_orientation: null + radius: 10.0 + straight: + function: straight + via_stack: + function: via_stack + module: gdsfactory.components.via_stack + settings: + layers: + - - 11 + - 0 + - - 12 + - 0 + size: + - 10 + - 10 + vias: + - null + - null + via_stack_offset: + - 0 + - 0 + route_quad_1: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - -14.0 + - 0.0 + layer: + - 12 + - 0 + name: l_e1 + orientation: 180.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - -439.5 + - 160.05 + layer: + - 12 + - 0 + name: e11 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_2: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - -9.0 + - 5.0 + layer: + - 12 + - 0 + name: l_e2 + orientation: 90.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - -314.5 + - 160.05 + layer: + - 12 + - 0 + name: e12 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_3: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - -9.0 + - -5.0 + layer: + - 12 + - 0 + name: l_e4 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - -189.5 + - 160.05 + layer: + - 12 + - 0 + name: e13 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_4: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - -4.0 + - 0.0 + layer: + - 12 + - 0 + name: l_e3 + orientation: 0.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - -64.5 + - 160.05 + layer: + - 12 + - 0 + name: e14 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_5: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - 0.0 + - 0.0 + layer: + - 12 + - 0 + name: r_e1 + orientation: 180.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - 60.5 + - 160.05 + layer: + - 12 + - 0 + name: e15 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_6: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - 5.0 + - 5.0 + layer: + - 12 + - 0 + name: r_e2 + orientation: 90.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - 185.5 + - 160.05 + layer: + - 12 + - 0 + name: e16 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_7: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - 5.0 + - -5.0 + layer: + - 12 + - 0 + name: r_e4 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - 310.5 + - 160.05 + layer: + - 12 + - 0 + name: e17 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_8: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - 10.0 + - 0.0 + layer: + - 12 + - 0 + name: r_e3 + orientation: 0.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - 435.5 + - 160.05 + layer: + - 12 + - 0 + name: e18 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null +name: add_pads +placements: + pad_array_1: + mirror: 0 + rotation: 0 + x: -439.5 + y: 160.05 + ring_single_heater_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_2: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_3: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_4: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_5: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_6: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_7: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_8: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + elec-ring_single_heater_cc91df46-1: pad_array_1,e18 + elec-ring_single_heater_cc91df46-2: pad_array_1,e17 + elec-ring_single_heater_cc91df46-3: pad_array_1,e16 + elec-ring_single_heater_cc91df46-4: pad_array_1,e15 + elec-ring_single_heater_cc91df46-5: pad_array_1,e14 + elec-ring_single_heater_cc91df46-6: pad_array_1,e13 + elec-ring_single_heater_cc91df46-7: pad_array_1,e12 + elec-ring_single_heater_cc91df46-8: pad_array_1,e11 + o1: ring_single_heater_1,o1 + o2: ring_single_heater_1,o2 +warnings: + electrical: + unconnected_ports: + - message: 8 unconnected electrical ports! + ports: + - ring_single_heater_1,l_e1 + - ring_single_heater_1,l_e2 + - ring_single_heater_1,l_e3 + - ring_single_heater_1,l_e4 + - ring_single_heater_1,r_e1 + - ring_single_heater_1,r_e2 + - ring_single_heater_1,r_e3 + - ring_single_heater_1,r_e4 + values: + - - -14.0 + - 0.0 + - - -9.0 + - 5.0 + - - -4.0 + - 0.0 + - - -9.0 + - -5.0 + - - 0.0 + - 0.0 + - - 5.0 + - 5.0 + - - 10.0 + - 0.0 + - - 5.0 + - -5.0 + optical: + unconnected_ports: + - message: 16 unconnected optical ports! + ports: + - route_quad_1,e1 + - route_quad_1,e2 + - route_quad_2,e1 + - route_quad_2,e2 + - route_quad_3,e1 + - route_quad_3,e2 + - route_quad_4,e1 + - route_quad_4,e2 + - route_quad_5,e1 + - route_quad_5,e2 + - route_quad_6,e1 + - route_quad_6,e2 + - route_quad_7,e1 + - route_quad_7,e2 + - route_quad_8,e1 + - route_quad_8,e2 + values: + - - -14.0 + - 0.0 + - - -439.5 + - 160.05 + - - -9.0 + - 5.0 + - - -314.5 + - 160.05 + - - -9.0 + - -5.0 + - - -189.5 + - 160.05 + - - -4.0 + - 0.0 + - - -64.5 + - 160.05 + - - 0.0 + - 0.0 + - - 60.5 + - 160.05 + - - 5.0 + - 5.0 + - - 185.5 + - 160.05 + - - 5.0 + - -5.0 + - - 310.5 + - 160.05 + - - 10.0 + - 0.0 + - - 435.5 + - 160.05 diff --git a/tests/test_netlists/test_netlists_add_pads_rf_.yml b/tests/test_netlists/test_netlists_add_pads_rf_.yml new file mode 100644 index 00000000..d994d81d --- /dev/null +++ b/tests/test_netlists/test_netlists_add_pads_rf_.yml @@ -0,0 +1,489 @@ +connections: {} +instances: + pad_array_1: + component: pad_array + info: + xsize: 75 + ysize: 75 + settings: + columns: 8 + orientation: 270 + pad: + function: pad + module: gdsfactory.components.pad + settings: + bbox_layers: + - - 13 + - 0 + bbox_offsets: + - -1.8 + layer: + - 12 + - 0 + size: + - 75 + - 75 + rows: 1 + spacing: + - 125 + - 125 + ring_single_heater_1: + component: ring_single_heater + info: {} + settings: + bend: + function: bend_euler + bend_coupler: + function: bend_euler + coupler_ring: + function: coupler_ring + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cross_section_waveguide_heater: xs_sc_heater_metal + gap: 0.2 + length_x: 4.0 + length_y: 0.6 + port_orientation: null + radius: 10.0 + straight: + function: straight + via_stack: + function: via_stack + module: gdsfactory.components.via_stack + settings: + layers: + - - 11 + - 0 + - - 12 + - 0 + size: + - 10 + - 10 + vias: + - null + - null + via_stack_offset: + - 0 + - 0 + route_quad_1: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - -14.0 + - 0.0 + layer: + - 12 + - 0 + name: l_e1 + orientation: 180.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - -439.5 + - 160.05 + layer: + - 12 + - 0 + name: e11 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_2: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - -9.0 + - 5.0 + layer: + - 12 + - 0 + name: l_e2 + orientation: 90.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - -314.5 + - 160.05 + layer: + - 12 + - 0 + name: e12 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_3: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - -9.0 + - -5.0 + layer: + - 12 + - 0 + name: l_e4 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - -189.5 + - 160.05 + layer: + - 12 + - 0 + name: e13 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_4: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - -4.0 + - 0.0 + layer: + - 12 + - 0 + name: l_e3 + orientation: 0.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - -64.5 + - 160.05 + layer: + - 12 + - 0 + name: e14 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_5: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - 0.0 + - 0.0 + layer: + - 12 + - 0 + name: r_e1 + orientation: 180.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - 60.5 + - 160.05 + layer: + - 12 + - 0 + name: e15 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_6: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - 5.0 + - 5.0 + layer: + - 12 + - 0 + name: r_e2 + orientation: 90.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - 185.5 + - 160.05 + layer: + - 12 + - 0 + name: e16 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_7: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - 5.0 + - -5.0 + layer: + - 12 + - 0 + name: r_e4 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - 310.5 + - 160.05 + layer: + - 12 + - 0 + name: e17 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null + route_quad_8: + component: route_quad + info: {} + settings: + layer: MTOP + manhattan_target_step: null + port1: + center: + - 10.0 + - 0.0 + layer: + - 12 + - 0 + name: r_e3 + orientation: 0.0 + port_type: electrical + shear_angle: null + width: 10.0 + port2: + center: + - 435.5 + - 160.05 + layer: + - 12 + - 0 + name: e18 + orientation: 270.0 + port_type: electrical + shear_angle: null + width: 75 + width1: null + width2: null +name: ring_single_heater_add_electrical_pads_top_984bbf2d +placements: + pad_array_1: + mirror: 0 + rotation: 0 + x: -439.5 + y: 160.05 + ring_single_heater_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_2: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_3: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_4: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_5: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_6: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_7: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + route_quad_8: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + elec-ring_single_heater_cc91df46-1: pad_array_1,e18 + elec-ring_single_heater_cc91df46-2: pad_array_1,e17 + elec-ring_single_heater_cc91df46-3: pad_array_1,e16 + elec-ring_single_heater_cc91df46-4: pad_array_1,e15 + elec-ring_single_heater_cc91df46-5: pad_array_1,e14 + elec-ring_single_heater_cc91df46-6: pad_array_1,e13 + elec-ring_single_heater_cc91df46-7: pad_array_1,e12 + elec-ring_single_heater_cc91df46-8: pad_array_1,e11 + o1: ring_single_heater_1,o1 + o2: ring_single_heater_1,o2 +warnings: + electrical: + unconnected_ports: + - message: 8 unconnected electrical ports! + ports: + - ring_single_heater_1,l_e1 + - ring_single_heater_1,l_e2 + - ring_single_heater_1,l_e3 + - ring_single_heater_1,l_e4 + - ring_single_heater_1,r_e1 + - ring_single_heater_1,r_e2 + - ring_single_heater_1,r_e3 + - ring_single_heater_1,r_e4 + values: + - - -14.0 + - 0.0 + - - -9.0 + - 5.0 + - - -4.0 + - 0.0 + - - -9.0 + - -5.0 + - - 0.0 + - 0.0 + - - 5.0 + - 5.0 + - - 10.0 + - 0.0 + - - 5.0 + - -5.0 + optical: + unconnected_ports: + - message: 16 unconnected optical ports! + ports: + - route_quad_1,e1 + - route_quad_1,e2 + - route_quad_2,e1 + - route_quad_2,e2 + - route_quad_3,e1 + - route_quad_3,e2 + - route_quad_4,e1 + - route_quad_4,e2 + - route_quad_5,e1 + - route_quad_5,e2 + - route_quad_6,e1 + - route_quad_6,e2 + - route_quad_7,e1 + - route_quad_7,e2 + - route_quad_8,e1 + - route_quad_8,e2 + values: + - - -14.0 + - 0.0 + - - -439.5 + - 160.05 + - - -9.0 + - 5.0 + - - -314.5 + - 160.05 + - - -9.0 + - -5.0 + - - -189.5 + - 160.05 + - - -4.0 + - 0.0 + - - -64.5 + - 160.05 + - - 0.0 + - 0.0 + - - 60.5 + - 160.05 + - - 5.0 + - 5.0 + - - 185.5 + - 160.05 + - - 5.0 + - -5.0 + - - 310.5 + - 160.05 + - - 10.0 + - 0.0 + - - 435.5 + - 160.05 diff --git a/tests/test_netlists/test_netlists_bend_.yml b/tests/test_netlists/test_netlists_bend_.yml new file mode 100644 index 00000000..171d3c42 --- /dev/null +++ b/tests/test_netlists/test_netlists_bend_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: bend_euler_sc +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_bend_euler180_sc_.yml b/tests/test_netlists/test_netlists_bend_euler180_sc_.yml new file mode 100644 index 00000000..6114b46d --- /dev/null +++ b/tests/test_netlists/test_netlists_bend_euler180_sc_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: bend_euler_sc_angle180 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_bend_euler_sc_.yml b/tests/test_netlists/test_netlists_bend_euler_sc_.yml new file mode 100644 index 00000000..171d3c42 --- /dev/null +++ b/tests/test_netlists/test_netlists_bend_euler_sc_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: bend_euler_sc +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_bend_s_.yml b/tests/test_netlists/test_netlists_bend_s_.yml new file mode 100644 index 00000000..907247aa --- /dev/null +++ b/tests/test_netlists/test_netlists_bend_s_.yml @@ -0,0 +1,35 @@ +connections: {} +instances: + bezier_1: + component: bezier + info: + end_angle: 0 + length: 11.206 + min_bend_radius: 13.012 + start_angle: 0 + settings: + bend_radius_error_type: null + control_points: + - - 0 + - 0 + - - 5.5 + - 0 + - - 5.5 + - 1.8 + - - 11.0 + - 1.8 + cross_section: xs_sc + end_angle: null + npoints: 99 + start_angle: null + with_manhattan_facing_angles: true +name: bend_s +placements: + bezier_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: bezier_1,o1 + o2: bezier_1,o2 diff --git a/tests/test_netlists/test_netlists_coupler_.yml b/tests/test_netlists/test_netlists_coupler_.yml new file mode 100644 index 00000000..79540eb5 --- /dev/null +++ b/tests/test_netlists/test_netlists_coupler_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: coupler +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_coupler_ring_.yml b/tests/test_netlists/test_netlists_coupler_ring_.yml new file mode 100644 index 00000000..c0570ace --- /dev/null +++ b/tests/test_netlists/test_netlists_coupler_ring_.yml @@ -0,0 +1,246 @@ +connections: + coupler90_1,o1: coupler_straight_1,o1 + coupler90_1,o2: coupler_straight_1,o2 + coupler90_1,o4: straight_1,o2 + coupler90_2,o1: coupler_straight_1,o4 + coupler90_2,o2: coupler_straight_1,o3 + coupler90_2,o4: straight_2,o1 +instances: + coupler90_1: + component: coupler90 + info: {} + settings: + bend: + function: bend_euler + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cross_section_bend: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 5.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + gap: 0.2 + radius: 5.0 + straight: + function: straight + coupler90_2: + component: coupler90 + info: {} + settings: + bend: + function: bend_euler + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cross_section_bend: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 5.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + gap: 0.2 + radius: 5.0 + straight: + function: straight + coupler_straight_1: + component: coupler_straight + info: {} + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + gap: 0.2 + length: 4.0 + straight: + function: straight + straight_1: + component: straight + info: + length: 3 + route_info_length: 3.0 + route_info_type: xs_sc + route_info_weight: 3.0 + route_info_xs_sc_length: 3.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 3 + npoints: 2 + straight_2: + component: straight + info: + length: 3 + route_info_length: 3.0 + route_info_type: xs_sc + route_info_weight: 3.0 + route_info_xs_sc_length: 3.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 3 + npoints: 2 +name: coupler_ring +placements: + coupler90_1: + mirror: true + rotation: 180 + x: -4.0 + y: 0.0 + coupler90_2: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + coupler_straight_1: + mirror: 0 + rotation: 0 + x: -4.0 + y: 0.0 + straight_1: + mirror: 0 + rotation: 0 + x: -12.0 + y: 0.0 + straight_2: + mirror: 0 + rotation: 0 + x: 5.0 + y: 0.0 +ports: + o1: straight_1,o1 + o2: coupler90_1,o3 + o3: coupler90_2,o3 + o4: straight_2,o2 diff --git a/tests/test_netlists/test_netlists_dbr_cavity_.yml b/tests/test_netlists/test_netlists_dbr_cavity_.yml new file mode 100644 index 00000000..12d6b47f --- /dev/null +++ b/tests/test_netlists/test_netlists_dbr_cavity_.yml @@ -0,0 +1,60 @@ +connections: + coupler_1,o2: dbr_1,o1 + coupler_1,o3: dbr_2,o1 +instances: + coupler_1: + component: coupler + info: + length: 10.19 + min_bend_radius: 11.744 + settings: + gap: 0.2 + length: 0.1 + dbr_1: + component: dbr + info: {} + settings: + cross_section: + function: cross_section + module: gdsfactory.cross_section + settings: + radius_min: 5 + dw: 0.1 + l1: 0.079406 + l2: 0.079406 + n: 100 + w0: 0.5 + dbr_2: + component: dbr + info: {} + settings: + cross_section: + function: cross_section + module: gdsfactory.cross_section + settings: + radius_min: 5 + dw: 0.1 + l1: 0.079406 + l2: 0.079406 + n: 100 + w0: 0.5 +name: dbr_cavity +placements: + coupler_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + dbr_1: + mirror: 0 + rotation: 180 + x: -10.079 + y: 2.35 + dbr_2: + mirror: 0 + rotation: 0 + x: 10.179 + y: 2.35 +ports: + o1: coupler_1,o1 + o2: coupler_1,o4 diff --git a/tests/test_netlists/test_netlists_dbr_cavity_te_.yml b/tests/test_netlists/test_netlists_dbr_cavity_te_.yml new file mode 100644 index 00000000..cf512432 --- /dev/null +++ b/tests/test_netlists/test_netlists_dbr_cavity_te_.yml @@ -0,0 +1,56 @@ +connections: {} +instances: + add_fiber_array_1: + component: add_fiber_array + info: {} + settings: + bend: + function: bend_euler_sc + component: + function: dbr_cavity + module: ubcpdk.components + settings: + coupler: + function: coupler + dbr: + function: dbr + component_name: null + cross_section: xs_sc + dev_id: null + fanout_length: 0.0 + gc_port_labels: null + gc_port_name: o1 + get_input_label_text_function: + function: get_input_label_text + get_input_labels_function: + function: get_input_labels + grating_coupler: + function: gc_te1550 + id_placement: center + id_placement_offset: + - 0 + - 0 + io_rotation: null + layer_label: + - 10 + - 0 + optical_routing_type: 0 + select_ports: + function: select_ports + module: gdsfactory.port + settings: + port_type: optical + straight: + function: straight + text: null + with_loopback: false +name: add_fiber_array_add_fiber_array_componentdbr_cavity +placements: + add_fiber_array_1: + mirror: 0 + rotation: 270 + x: 0.0 + y: 0.0 +ports: + o1: add_fiber_array_1,o1 + o2: add_fiber_array_1,o2 diff --git a/tests/test_netlists/test_netlists_ebeam_BondPad_.yml b/tests/test_netlists/test_netlists_ebeam_BondPad_.yml new file mode 100644 index 00000000..541b3606 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_BondPad_.yml @@ -0,0 +1,14 @@ +connections: {} +instances: + BondPad$1_1: + component: BondPad$1 + info: {} + settings: {} +name: ebeam_BondPad +placements: + BondPad$1_1: + mirror: 0 + rotation: 180 + x: 50.0 + y: 50.0 +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_adiabatic_te1550_.yml b/tests/test_netlists/test_netlists_ebeam_adiabatic_te1550_.yml new file mode 100644 index 00000000..bd0f31c0 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_adiabatic_te1550_.yml @@ -0,0 +1,14 @@ +connections: {} +instances: + Adiabatic3dB_TE_FullEtch_1: + component: Adiabatic3dB_TE_FullEtch + info: {} + settings: {} +name: ebeam_adiabatic_te1550 +placements: + Adiabatic3dB_TE_FullEtch_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_adiabatic_tm1550_.yml b/tests/test_netlists/test_netlists_ebeam_adiabatic_tm1550_.yml new file mode 100644 index 00000000..dbd72e5e --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_adiabatic_tm1550_.yml @@ -0,0 +1,14 @@ +connections: {} +instances: + Adiabatic3dB_TM_FullEtch_1: + component: Adiabatic3dB_TM_FullEtch + info: {} + settings: {} +name: ebeam_adiabatic_tm1550 +placements: + Adiabatic3dB_TM_FullEtch_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_bdc_te1550_.yml b/tests/test_netlists/test_netlists_ebeam_bdc_te1550_.yml new file mode 100644 index 00000000..69d57661 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_bdc_te1550_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_bdc_te1550 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_bdc_tm1550_.yml b/tests/test_netlists/test_netlists_ebeam_bdc_tm1550_.yml new file mode 100644 index 00000000..61f5b68c --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_bdc_tm1550_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_bdc_tm1550 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_crossing4_.yml b/tests/test_netlists/test_netlists_ebeam_crossing4_.yml new file mode 100644 index 00000000..839ef78f --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_crossing4_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_crossing4 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_crossing4_2ports_.yml b/tests/test_netlists/test_netlists_ebeam_crossing4_2ports_.yml new file mode 100644 index 00000000..a37fb35f --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_crossing4_2ports_.yml @@ -0,0 +1,66 @@ +connections: + ebeam_crossing4_1,o2: straight_one_pin_1,o1 + ebeam_crossing4_1,o4: straight_one_pin_2,o1 +instances: + ebeam_crossing4_1: + component: ebeam_crossing4 + info: + library: Design kits/ebeam + model: ebeam_crossing4 + settings: {} + straight_one_pin_1: + component: straight_one_pin + info: {} + settings: + cross_section: + function: cross_section + module: gdsfactory.cross_section + settings: + bbox_layers: null + bbox_offsets: null + radius_min: 5 + length: 1 + straight_one_pin_2: + component: straight_one_pin + info: {} + settings: + cross_section: + function: cross_section + module: gdsfactory.cross_section + settings: + bbox_layers: null + bbox_offsets: null + radius_min: 5 + length: 1 +name: ebeam_crossing4_2ports +placements: + ebeam_crossing4_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + straight_one_pin_1: + mirror: 0 + rotation: 90 + x: 0.0 + y: 4.8 + straight_one_pin_2: + mirror: 0 + rotation: 270 + x: 0.0 + y: -4.8 +ports: + o1: ebeam_crossing4_1,o1 + o4: ebeam_crossing4_1,o3 +warnings: + optical: + unconnected_ports: + - message: 2 unconnected optical ports! + ports: + - straight_one_pin_1,o2 + - straight_one_pin_2,o2 + values: + - - 0.0 + - 5.8 + - - -0.0 + - -5.8 diff --git a/tests/test_netlists/test_netlists_ebeam_dc_halfring_straight_.yml b/tests/test_netlists/test_netlists_ebeam_dc_halfring_straight_.yml new file mode 100644 index 00000000..01990fcc --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_dc_halfring_straight_.yml @@ -0,0 +1,21 @@ +connections: {} +instances: + coupler_ring_1: + component: coupler_ring + info: {} + settings: + gap: 0.2 + length_x: 4.0 + radius: 5.0 +name: ebeam_dc_halfring_straight +placements: + coupler_ring_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: coupler_ring_1,o1 + o2: coupler_ring_1,o2 + o3: coupler_ring_1,o3 + o4: coupler_ring_1,o4 diff --git a/tests/test_netlists/test_netlists_ebeam_dc_te1550_.yml b/tests/test_netlists/test_netlists_ebeam_dc_te1550_.yml new file mode 100644 index 00000000..79540eb5 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_dc_te1550_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: coupler +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_splitter_adiabatic_swg_te1550_.yml b/tests/test_netlists/test_netlists_ebeam_splitter_adiabatic_swg_te1550_.yml new file mode 100644 index 00000000..a7a7816f --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_splitter_adiabatic_swg_te1550_.yml @@ -0,0 +1,14 @@ +connections: {} +instances: + Han_SWGA3dB_1: + component: Han_SWGA3dB + info: {} + settings: {} +name: ebeam_splitter_adiabatic_swg_te1550 +placements: + Han_SWGA3dB_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_splitter_swg_assist_te1310_.yml b/tests/test_netlists/test_netlists_ebeam_splitter_swg_assist_te1310_.yml new file mode 100644 index 00000000..798daa5c --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_splitter_swg_assist_te1310_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_splitter_swg_assist_te1310 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_splitter_swg_assist_te1550_.yml b/tests/test_netlists/test_netlists_ebeam_splitter_swg_assist_te1550_.yml new file mode 100644 index 00000000..c10b5266 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_splitter_swg_assist_te1550_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_splitter_swg_assist_te1550 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_swg_edgecoupler_.yml b/tests/test_netlists/test_netlists_ebeam_swg_edgecoupler_.yml new file mode 100644 index 00000000..fe0256a6 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_swg_edgecoupler_.yml @@ -0,0 +1,14 @@ +connections: {} +instances: + EC_1: + component: EC + info: {} + settings: {} +name: ebeam_swg_edgecoupler +placements: + EC_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_terminator_te1310_.yml b/tests/test_netlists/test_netlists_ebeam_terminator_te1310_.yml new file mode 100644 index 00000000..3dd60240 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_terminator_te1310_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_terminator_te1310 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_terminator_te1550_.yml b/tests/test_netlists/test_netlists_ebeam_terminator_te1550_.yml new file mode 100644 index 00000000..e74c67a2 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_terminator_te1550_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_terminator_te1550 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_terminator_tm1550_.yml b/tests/test_netlists/test_netlists_ebeam_terminator_tm1550_.yml new file mode 100644 index 00000000..9b78a545 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_terminator_tm1550_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_terminator_tm1550 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_y_1550_.yml b/tests/test_netlists/test_netlists_ebeam_y_1550_.yml new file mode 100644 index 00000000..fe43e0a2 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_y_1550_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_y_1550 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_y_adiabatic_.yml b/tests/test_netlists/test_netlists_ebeam_y_adiabatic_.yml new file mode 100644 index 00000000..a148d846 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_y_adiabatic_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_y_adiabatic +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_y_adiabatic_1310_.yml b/tests/test_netlists/test_netlists_ebeam_y_adiabatic_1310_.yml new file mode 100644 index 00000000..dbde4db2 --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_y_adiabatic_1310_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: ebeam_y_adiabatic_1310 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ebeam_y_adiabatic_tapers_.yml b/tests/test_netlists/test_netlists_ebeam_y_adiabatic_tapers_.yml new file mode 100644 index 00000000..b2ee9bca --- /dev/null +++ b/tests/test_netlists/test_netlists_ebeam_y_adiabatic_tapers_.yml @@ -0,0 +1,95 @@ +connections: + import_gds_1,o1: taper_1,o2 + import_gds_1,o2: taper_2,o2 + import_gds_1,o3: taper_3,o2 +instances: + import_gds_1: + component: import_gds + info: + library: Design kits/ebeam + model: ebeam_y_adiabatic + settings: + gdspath: ebeam_y_adiabatic.gds + taper_1: + component: taper + info: + length: 10.0 + width1: 0.5 + width2: 0.45 + settings: + cross_section: xs_sc + length: 10.0 + port: null + port_order_name: + - o1 + - o2 + port_order_types: + - optical + - optical + width1: 0.5 + width2: 0.45 + with_two_ports: true + taper_2: + component: taper + info: + length: 10.0 + width1: 0.5 + width2: 0.45 + settings: + cross_section: xs_sc + length: 10.0 + port: null + port_order_name: + - o1 + - o2 + port_order_types: + - optical + - optical + width1: 0.5 + width2: 0.45 + with_two_ports: true + taper_3: + component: taper + info: + length: 10.0 + width1: 0.5 + width2: 0.45 + settings: + cross_section: xs_sc + length: 10.0 + port: null + port_order_name: + - o1 + - o2 + port_order_types: + - optical + - optical + width1: 0.5 + width2: 0.45 + with_two_ports: true +name: ebeam_y_adiabatic_tapers +placements: + import_gds_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + taper_1: + mirror: 0 + rotation: 0 + x: -9.95 + y: 0.0 + taper_2: + mirror: 0 + rotation: 180 + x: 60.05 + y: 1.25 + taper_3: + mirror: 0 + rotation: 180 + x: 60.05 + y: -1.25 +ports: + o1: taper_1,o1 + o2: taper_2,o1 + o3: taper_3,o1 diff --git a/tests/test_netlists/test_netlists_gc_te1310_.yml b/tests/test_netlists/test_netlists_gc_te1310_.yml new file mode 100644 index 00000000..e17e3b9a --- /dev/null +++ b/tests/test_netlists/test_netlists_gc_te1310_.yml @@ -0,0 +1,28 @@ +connections: {} +instances: + mirror_1: + component: mirror + info: + library: Design kits/ebeam + model: ebeam_gc_te1310 + settings: + component: + function: import_gds + module: ubcpdk.import_gds + settings: + gdspath: ebeam_gc_te1310.gds + p1: + - 0 + - 1 + p2: + - 0 + - 0 +name: gc_te1310 +placements: + mirror_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: mirror_1,o1 diff --git a/tests/test_netlists/test_netlists_gc_te1310_8deg_.yml b/tests/test_netlists/test_netlists_gc_te1310_8deg_.yml new file mode 100644 index 00000000..98aa4c0e --- /dev/null +++ b/tests/test_netlists/test_netlists_gc_te1310_8deg_.yml @@ -0,0 +1,28 @@ +connections: {} +instances: + mirror_1: + component: mirror + info: + library: Design kits/ebeam + model: ebeam_gc_te1310_8deg + settings: + component: + function: import_gds + module: ubcpdk.import_gds + settings: + gdspath: ebeam_gc_te1310_8deg.gds + p1: + - 0 + - 1 + p2: + - 0 + - 0 +name: gc_te1310_8deg +placements: + mirror_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: mirror_1,o1 diff --git a/tests/test_netlists/test_netlists_gc_te1310_broadband_.yml b/tests/test_netlists/test_netlists_gc_te1310_broadband_.yml new file mode 100644 index 00000000..73aee9e5 --- /dev/null +++ b/tests/test_netlists/test_netlists_gc_te1310_broadband_.yml @@ -0,0 +1,28 @@ +connections: {} +instances: + mirror_1: + component: mirror + info: + library: Design kits/ebeam + model: ebeam_gc_te1310_broadband + settings: + component: + function: import_gds + module: ubcpdk.import_gds + settings: + gdspath: ebeam_gc_te1310_broadband.gds + p1: + - 0 + - 1 + p2: + - 0 + - 0 +name: gc_te1310_broadband +placements: + mirror_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: mirror_1,o1 diff --git a/tests/test_netlists/test_netlists_gc_te1550_.yml b/tests/test_netlists/test_netlists_gc_te1550_.yml new file mode 100644 index 00000000..316de4e2 --- /dev/null +++ b/tests/test_netlists/test_netlists_gc_te1550_.yml @@ -0,0 +1,28 @@ +connections: {} +instances: + mirror_1: + component: mirror + info: + library: Design kits/ebeam + model: ebeam_gc_te1550 + settings: + component: + function: import_gds + module: ubcpdk.import_gds + settings: + gdspath: ebeam_gc_te1550.gds + p1: + - 0 + - 1 + p2: + - 0 + - 0 +name: gc_te1550 +placements: + mirror_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: mirror_1,o1 diff --git a/tests/test_netlists/test_netlists_gc_te1550_90nmSlab_.yml b/tests/test_netlists/test_netlists_gc_te1550_90nmSlab_.yml new file mode 100644 index 00000000..8c2b5979 --- /dev/null +++ b/tests/test_netlists/test_netlists_gc_te1550_90nmSlab_.yml @@ -0,0 +1,28 @@ +connections: {} +instances: + mirror_1: + component: mirror + info: + library: Design kits/ebeam + model: ebeam_gc_te1550_90nmSlab + settings: + component: + function: import_gds + module: ubcpdk.import_gds + settings: + gdspath: ebeam_gc_te1550_90nmSlab.gds + p1: + - 0 + - 1 + p2: + - 0 + - 0 +name: gc_te1550_90nmSlab +placements: + mirror_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: mirror_1,o1 diff --git a/tests/test_netlists/test_netlists_gc_te1550_broadband_.yml b/tests/test_netlists/test_netlists_gc_te1550_broadband_.yml new file mode 100644 index 00000000..a33c446d --- /dev/null +++ b/tests/test_netlists/test_netlists_gc_te1550_broadband_.yml @@ -0,0 +1,28 @@ +connections: {} +instances: + mirror_1: + component: mirror + info: + library: Design kits/ebeam + model: ebeam_gc_te1550_broadband + settings: + component: + function: import_gds + module: ubcpdk.import_gds + settings: + gdspath: ebeam_gc_te1550_broadband.gds + p1: + - 0 + - 1 + p2: + - 0 + - 0 +name: gc_te1550_broadband +placements: + mirror_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: mirror_1,o1 diff --git a/tests/test_netlists/test_netlists_gc_tm1550_.yml b/tests/test_netlists/test_netlists_gc_tm1550_.yml new file mode 100644 index 00000000..2e1bdd28 --- /dev/null +++ b/tests/test_netlists/test_netlists_gc_tm1550_.yml @@ -0,0 +1,28 @@ +connections: {} +instances: + mirror_1: + component: mirror + info: + library: Design kits/ebeam + model: ebeam_gc_tm1550 + settings: + component: + function: import_gds + module: ubcpdk.import_gds + settings: + gdspath: ebeam_gc_tm1550.gds + p1: + - 0 + - 1 + p2: + - 0 + - 0 +name: gc_tm1550 +placements: + mirror_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: mirror_1,o1 diff --git a/tests/test_netlists/test_netlists_metal_via_.yml b/tests/test_netlists/test_netlists_metal_via_.yml new file mode 100644 index 00000000..f36b9c3e --- /dev/null +++ b/tests/test_netlists/test_netlists_metal_via_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: metal_via +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_mmi1x2_.yml b/tests/test_netlists/test_netlists_mmi1x2_.yml new file mode 100644 index 00000000..e2c95eb5 --- /dev/null +++ b/tests/test_netlists/test_netlists_mmi1x2_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: mmi1x2 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_mzi_.yml b/tests/test_netlists/test_netlists_mzi_.yml new file mode 100644 index 00000000..325d62d8 --- /dev/null +++ b/tests/test_netlists/test_netlists_mzi_.yml @@ -0,0 +1,599 @@ +connections: + bend_euler_sc_1,o1: cp1,o3 + bend_euler_sc_1,o2: syl,o1 + bend_euler_sc_2,o1: syl,o2 + bend_euler_sc_2,o2: sxb,o1 + bend_euler_sc_3,o1: cp1,o2 + bend_euler_sc_3,o2: sytl,o1 + bend_euler_sc_4,o1: sxt,o1 + bend_euler_sc_4,o2: sytl,o2 + bend_euler_sc_5,o1: straight_5,o2 + bend_euler_sc_5,o2: straight_6,o1 + bend_euler_sc_6,o1: straight_6,o2 + bend_euler_sc_6,o2: straight_7,o1 + bend_euler_sc_7,o1: straight_8,o2 + bend_euler_sc_7,o2: straight_9,o1 + bend_euler_sc_8,o1: straight_9,o2 + bend_euler_sc_8,o2: straight_10,o1 + cp2,o2: straight_7,o2 + cp2,o3: straight_10,o2 + straight_5,o1: sxt,o2 + straight_8,o1: sxb,o2 +instances: + bend_euler_sc_1: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: xs_sc + bend_euler_sc_2: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: xs_sc + bend_euler_sc_3: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: xs_sc + bend_euler_sc_4: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: xs_sc + bend_euler_sc_5: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + bend_euler_sc_6: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + bend_euler_sc_7: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + bend_euler_sc_8: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cp1: + component: ebeam_y_1550 + info: + library: Design kits/ebeam + model: ebeam_y_1550 + settings: {} + cp2: + component: ebeam_y_1550 + info: + library: Design kits/ebeam + model: ebeam_y_1550 + settings: {} + straight_10: + component: straight + info: + length: 0.01 + route_info_length: 0.01 + route_info_type: xs_sc + route_info_weight: 0.01 + route_info_xs_sc_length: 0.01 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.01 + npoints: 2 + straight_5: + component: straight + info: + length: 0.015 + route_info_length: 0.015 + route_info_type: xs_sc + route_info_weight: 0.015 + route_info_xs_sc_length: 0.015 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.015 + npoints: 2 + straight_6: + component: straight + info: + length: 2.0 + route_info_length: 2.0 + route_info_type: xs_sc + route_info_weight: 2.0 + route_info_xs_sc_length: 2.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 2.0 + npoints: 2 + straight_7: + component: straight + info: + length: 0.01 + route_info_length: 0.01 + route_info_type: xs_sc + route_info_weight: 0.01 + route_info_xs_sc_length: 0.01 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.01 + npoints: 2 + straight_8: + component: straight + info: + length: 0.015 + route_info_length: 0.015 + route_info_type: xs_sc + route_info_weight: 0.015 + route_info_xs_sc_length: 0.015 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.015 + npoints: 2 + straight_9: + component: straight + info: + length: 7.0 + route_info_length: 7.0 + route_info_type: xs_sc + route_info_weight: 7.0 + route_info_xs_sc_length: 7.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 7.0 + npoints: 2 + sxb: + component: straight + info: + length: 0.1 + route_info_length: 0.1 + route_info_type: xs_sc + route_info_weight: 0.1 + route_info_xs_sc_length: 0.1 + width: 0.5 + settings: + cross_section: xs_sc + length: 0.1 + npoints: 2 + sxt: + component: straight + info: + length: 0.1 + route_info_length: 0.1 + route_info_type: xs_sc + route_info_weight: 0.1 + route_info_xs_sc_length: 0.1 + width: 0.5 + settings: + cross_section: xs_sc + length: 0.1 + npoints: 2 + syl: + component: straight + info: + length: 7.0 + route_info_length: 7.0 + route_info_type: xs_sc + route_info_weight: 7.0 + route_info_xs_sc_length: 7.0 + width: 0.5 + settings: + cross_section: xs_sc + length: 7.0 + npoints: 2 + sytl: + component: straight + info: + length: 2.0 + route_info_length: 2.0 + route_info_type: xs_sc + route_info_weight: 2.0 + route_info_xs_sc_length: 2.0 + width: 0.5 + settings: + cross_section: xs_sc + length: 2.0 + npoints: 2 +name: mzi_f5c6fc9f +placements: + bend_euler_sc_1: + mirror: true + rotation: 0 + x: 7.4 + y: -2.75 + bend_euler_sc_2: + mirror: 0 + rotation: 270 + x: 17.4 + y: -19.75 + bend_euler_sc_3: + mirror: 0 + rotation: 0 + x: 7.4 + y: 2.75 + bend_euler_sc_4: + mirror: 0 + rotation: 180 + x: 27.4 + y: 24.75 + bend_euler_sc_5: + mirror: true + rotation: 0 + x: 27.515 + y: 24.75 + bend_euler_sc_6: + mirror: 0 + rotation: 270 + x: 37.515 + y: 12.75 + bend_euler_sc_7: + mirror: 0 + rotation: 0 + x: 27.515 + y: -29.75 + bend_euler_sc_8: + mirror: true + rotation: 90 + x: 37.515 + y: -12.75 + cp1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + cp2: + mirror: true + rotation: 180 + x: 54.925 + y: 0.0 + straight_10: + mirror: 0 + rotation: 0 + x: 47.515 + y: -2.75 + straight_5: + mirror: 0 + rotation: 0 + x: 27.5 + y: 24.75 + straight_6: + mirror: 0 + rotation: 270 + x: 37.515 + y: 14.75 + straight_7: + mirror: 0 + rotation: 0 + x: 47.515 + y: 2.75 + straight_8: + mirror: 0 + rotation: 0 + x: 27.5 + y: -29.75 + straight_9: + mirror: 0 + rotation: 90 + x: 37.515 + y: -19.75 + sxb: + mirror: 0 + rotation: 0 + x: 27.4 + y: -29.75 + sxt: + mirror: 0 + rotation: 0 + x: 27.4 + y: 24.75 + syl: + mirror: 0 + rotation: 270 + x: 17.4 + y: -12.75 + sytl: + mirror: 0 + rotation: 90 + x: 17.4 + y: 12.75 +ports: + o1: cp1,o1 + o2: cp2,o1 diff --git a/tests/test_netlists/test_netlists_mzi_heater_.yml b/tests/test_netlists/test_netlists_mzi_heater_.yml new file mode 100644 index 00000000..b5c1db53 --- /dev/null +++ b/tests/test_netlists/test_netlists_mzi_heater_.yml @@ -0,0 +1,616 @@ +connections: + bend_euler_sc_1,o1: cp1,o3 + bend_euler_sc_1,o2: syl,o1 + bend_euler_sc_2,o1: syl,o2 + bend_euler_sc_2,o2: sxb,o1 + bend_euler_sc_3,o1: cp1,o2 + bend_euler_sc_3,o2: sytl,o1 + bend_euler_sc_4,o1: sxt,o1 + bend_euler_sc_4,o2: sytl,o2 + bend_euler_sc_5,o1: straight_4,o2 + bend_euler_sc_5,o2: straight_5,o1 + bend_euler_sc_6,o1: straight_5,o2 + bend_euler_sc_6,o2: straight_6,o1 + bend_euler_sc_7,o1: straight_7,o2 + bend_euler_sc_7,o2: straight_8,o1 + bend_euler_sc_8,o1: straight_8,o2 + bend_euler_sc_8,o2: straight_9,o1 + cp2,o2: straight_6,o2 + cp2,o3: straight_9,o2 + straight_4,o1: sxt,o2 + straight_7,o1: sxb,o2 +instances: + bend_euler_sc_1: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: xs_sc + bend_euler_sc_2: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: xs_sc + bend_euler_sc_3: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: xs_sc + bend_euler_sc_4: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: xs_sc + bend_euler_sc_5: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + bend_euler_sc_6: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + bend_euler_sc_7: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + bend_euler_sc_8: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cp1: + component: ebeam_y_1550 + info: + library: Design kits/ebeam + model: ebeam_y_1550 + settings: {} + cp2: + component: ebeam_y_1550 + info: + library: Design kits/ebeam + model: ebeam_y_1550 + settings: {} + straight_4: + component: straight + info: + length: 0.015 + route_info_length: 0.015 + route_info_type: xs_sc + route_info_weight: 0.015 + route_info_xs_sc_length: 0.015 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.015 + npoints: 2 + straight_5: + component: straight + info: + length: 2.0 + route_info_length: 2.0 + route_info_type: xs_sc + route_info_weight: 2.0 + route_info_xs_sc_length: 2.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 2.0 + npoints: 2 + straight_6: + component: straight + info: + length: 0.01 + route_info_length: 0.01 + route_info_type: xs_sc + route_info_weight: 0.01 + route_info_xs_sc_length: 0.01 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.01 + npoints: 2 + straight_7: + component: straight + info: + length: 0.015 + route_info_length: 0.015 + route_info_type: xs_sc + route_info_weight: 0.015 + route_info_xs_sc_length: 0.015 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.015 + npoints: 2 + straight_8: + component: straight + info: + length: 7.0 + route_info_length: 7.0 + route_info_type: xs_sc + route_info_weight: 7.0 + route_info_xs_sc_length: 7.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 7.0 + npoints: 2 + straight_9: + component: straight + info: + length: 0.01 + route_info_length: 0.01 + route_info_type: xs_sc + route_info_weight: 0.01 + route_info_xs_sc_length: 0.01 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.01 + npoints: 2 + sxb: + component: straight + info: + length: 200 + route_info_length: 200.0 + route_info_type: xs_sc + route_info_weight: 200.0 + route_info_xs_sc_length: 200.0 + width: 0.5 + settings: + cross_section: xs_sc + length: 200 + npoints: 2 + sxt: + component: straight_heater_metal_undercut + info: + resistance: 0 + settings: + cross_section: xs_sc + cross_section_heater: xs_heater_metal + cross_section_heater_undercut: xs_sc_heater_metal_undercut + cross_section_waveguide_heater: xs_sc_heater_metal + heater_taper_length: 5.0 + length: 200 + length_straight: 0.1 + length_straight_input: 15.0 + length_undercut: 30.0 + length_undercut_spacing: 6.0 + ohms_per_square: null + port_orientation1: null + port_orientation2: null + straight: + function: straight + via_stack: via_stack_heater_mtop + with_undercut: false + syl: + component: straight + info: + length: 7.0 + route_info_length: 7.0 + route_info_type: xs_sc + route_info_weight: 7.0 + route_info_xs_sc_length: 7.0 + width: 0.5 + settings: + cross_section: xs_sc + length: 7.0 + npoints: 2 + sytl: + component: straight + info: + length: 2.0 + route_info_length: 2.0 + route_info_type: xs_sc + route_info_weight: 2.0 + route_info_xs_sc_length: 2.0 + width: 0.5 + settings: + cross_section: xs_sc + length: 2.0 + npoints: 2 +name: mzi_a1fe9d55 +placements: + bend_euler_sc_1: + mirror: true + rotation: 0 + x: 7.4 + y: -2.75 + bend_euler_sc_2: + mirror: 0 + rotation: 270 + x: 17.4 + y: -19.75 + bend_euler_sc_3: + mirror: 0 + rotation: 0 + x: 7.4 + y: 2.75 + bend_euler_sc_4: + mirror: 0 + rotation: 180 + x: 27.4 + y: 24.75 + bend_euler_sc_5: + mirror: true + rotation: 0 + x: 227.415 + y: 24.75 + bend_euler_sc_6: + mirror: 0 + rotation: 270 + x: 237.415 + y: 12.75 + bend_euler_sc_7: + mirror: 0 + rotation: 0 + x: 227.415 + y: -29.75 + bend_euler_sc_8: + mirror: true + rotation: 90 + x: 237.415 + y: -12.75 + cp1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + cp2: + mirror: true + rotation: 180 + x: 254.825 + y: 0.0 + straight_4: + mirror: 0 + rotation: 0 + x: 227.4 + y: 24.75 + straight_5: + mirror: 0 + rotation: 270 + x: 237.415 + y: 14.75 + straight_6: + mirror: 0 + rotation: 0 + x: 247.415 + y: 2.75 + straight_7: + mirror: 0 + rotation: 0 + x: 227.4 + y: -29.75 + straight_8: + mirror: 0 + rotation: 90 + x: 237.415 + y: -19.75 + straight_9: + mirror: 0 + rotation: 0 + x: 247.415 + y: -2.75 + sxb: + mirror: 0 + rotation: 0 + x: 27.4 + y: -29.75 + sxt: + mirror: 0 + rotation: 0 + x: 27.4 + y: 24.75 + syl: + mirror: 0 + rotation: 270 + x: 17.4 + y: -12.75 + sytl: + mirror: 0 + rotation: 90 + x: 17.4 + y: 12.75 +ports: + o1: cp1,o1 + o2: cp2,o1 + top_l_e1: sxt,l_e1 + top_l_e2: sxt,l_e2 + top_l_e3: sxt,l_e3 + top_l_e4: sxt,l_e4 + top_r_e1: sxt,r_e1 + top_r_e2: sxt,r_e2 + top_r_e3: sxt,r_e3 + top_r_e4: sxt,r_e4 diff --git a/tests/test_netlists/test_netlists_pad_.yml b/tests/test_netlists/test_netlists_pad_.yml new file mode 100644 index 00000000..237da850 --- /dev/null +++ b/tests/test_netlists/test_netlists_pad_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: pad_0210fbc6 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_photonic_wirebond_surfacetaper_1310_.yml b/tests/test_netlists/test_netlists_photonic_wirebond_surfacetaper_1310_.yml new file mode 100644 index 00000000..816858b4 --- /dev/null +++ b/tests/test_netlists/test_netlists_photonic_wirebond_surfacetaper_1310_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: photonic_wirebond_surfacetaper_1310 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_photonic_wirebond_surfacetaper_1550_.yml b/tests/test_netlists/test_netlists_photonic_wirebond_surfacetaper_1550_.yml new file mode 100644 index 00000000..8583178b --- /dev/null +++ b/tests/test_netlists/test_netlists_photonic_wirebond_surfacetaper_1550_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: photonic_wirebond_surfacetaper_1550 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_ring_double_.yml b/tests/test_netlists/test_netlists_ring_double_.yml new file mode 100644 index 00000000..3c638a28 --- /dev/null +++ b/tests/test_netlists/test_netlists_ring_double_.yml @@ -0,0 +1,163 @@ +connections: + coupler_ring_1,o2: straight_1,o1 + coupler_ring_1,o3: straight_2,o1 + coupler_ring_2,o2: straight_2,o2 + coupler_ring_2,o3: straight_1,o2 +instances: + coupler_ring_1: + component: coupler_ring + info: {} + settings: + bend: + function: bend_euler + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + gap: 0.2 + length_x: 0.01 + radius: 10.0 + coupler_ring_2: + component: coupler_ring + info: {} + settings: + bend: + function: bend_euler + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + gap: 0.2 + length_x: 0.01 + radius: 10.0 + straight_1: + component: straight + info: + length: 0.01 + route_info_length: 0.01 + route_info_type: xs_sc + route_info_weight: 0.01 + route_info_xs_sc_length: 0.01 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.01 + npoints: 2 + straight_2: + component: straight + info: + length: 0.01 + route_info_length: 0.01 + route_info_type: xs_sc + route_info_weight: 0.01 + route_info_xs_sc_length: 0.01 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.01 + npoints: 2 +name: ring_double_a459ac5d +placements: + coupler_ring_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + coupler_ring_2: + mirror: 0 + rotation: 180 + x: -0.01 + y: 21.41 + straight_1: + mirror: 0 + rotation: 90 + x: -10.01 + y: 10.7 + straight_2: + mirror: 0 + rotation: 90 + x: 10.0 + y: 10.7 +ports: + o1: coupler_ring_1,o1 + o2: coupler_ring_1,o4 + o3: coupler_ring_2,o4 + o4: coupler_ring_2,o1 diff --git a/tests/test_netlists/test_netlists_ring_double_heater_.yml b/tests/test_netlists/test_netlists_ring_double_heater_.yml new file mode 100644 index 00000000..9cd81549 --- /dev/null +++ b/tests/test_netlists/test_netlists_ring_double_heater_.yml @@ -0,0 +1,233 @@ +connections: + coupler_ring_1,e2: straight_1,e1 + coupler_ring_1,e3: straight_2,e1 + coupler_ring_1,o2: straight_1,o1 + coupler_ring_1,o3: straight_2,o1 + coupler_ring_2,e1: straight_3,e1 + coupler_ring_2,e2: straight_2,e2 + coupler_ring_2,e3: straight_1,e2 + coupler_ring_2,e4: straight_3,e2 + coupler_ring_2,o2: straight_2,o2 + coupler_ring_2,o3: straight_1,o2 +instances: + coupler_ring_1: + component: coupler_ring + info: {} + settings: + bend: + function: bend_euler + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cross_section_bend: xs_sc_heater_metal + gap: 0.2 + length_x: 1.0 + radius: 10.0 + coupler_ring_2: + component: coupler_ring + info: {} + settings: + bend: + function: bend_euler + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cross_section_bend: xs_sc_heater_metal + gap: 0.2 + length_x: 1.0 + radius: 10.0 + straight_1: + component: straight + info: + length: 0.2 + route_info_length: 0.2 + route_info_type: xs_sc_heater_metal + route_info_weight: 0.2 + route_info_xs_sc_heater_metal_length: 0.2 + width: 0.5 + settings: + cross_section: xs_sc_heater_metal + length: 0.2 + npoints: 2 + straight_2: + component: straight + info: + length: 0.2 + route_info_length: 0.2 + route_info_type: xs_sc_heater_metal + route_info_weight: 0.2 + route_info_xs_sc_heater_metal_length: 0.2 + width: 0.5 + settings: + cross_section: xs_sc_heater_metal + length: 0.2 + npoints: 2 + straight_3: + component: straight + info: + length: 1.0 + route_info_length: 1.0 + route_info_type: xs_heater_metal + route_info_weight: 1.0 + route_info_xs_heater_metal_length: 1.0 + width: 4.0 + settings: + cross_section: xs_heater_metal + length: 1.0 + npoints: 2 + via_stack_1: + component: via_stack + info: + layer: + - 12 + - 0 + size: + - 10 + - 10 + xsize: 10 + ysize: 10 + settings: + correct_size: true + layer_offsets: null + layer_port: null + layers: + - - 11 + - 0 + - - 12 + - 0 + size: + - 10 + - 10 + slot_horizontal: false + slot_vertical: false + vias: + - null + - null + via_stack_2: + component: via_stack + info: + layer: + - 12 + - 0 + size: + - 10 + - 10 + xsize: 10 + ysize: 10 + settings: + correct_size: true + layer_offsets: null + layer_port: null + layers: + - - 11 + - 0 + - - 12 + - 0 + size: + - 10 + - 10 + slot_horizontal: false + slot_vertical: false + vias: + - null + - null +name: ring_double_heater_dde86d0f +placements: + coupler_ring_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + coupler_ring_2: + mirror: 0 + rotation: 180 + x: -1.0 + y: 21.6 + straight_1: + mirror: 0 + rotation: 90 + x: -11.0 + y: 10.7 + straight_2: + mirror: 0 + rotation: 90 + x: 10.0 + y: 10.7 + straight_3: + mirror: 0 + rotation: 0 + x: -1.0 + y: 20.9 + via_stack_1: + mirror: 0 + rotation: 0 + x: -7.0 + y: 0.0 + via_stack_2: + mirror: 0 + rotation: 0 + x: 6.0 + y: 0.0 +ports: + l_e1: via_stack_1,e1 + l_e2: via_stack_1,e2 + l_e3: via_stack_1,e3 + l_e4: via_stack_1,e4 + o1: coupler_ring_1,o1 + o2: coupler_ring_1,o4 + o3: coupler_ring_2,o4 + o4: coupler_ring_2,o1 + r_e1: via_stack_2,e1 + r_e2: via_stack_2,e2 + r_e3: via_stack_2,e3 + r_e4: via_stack_2,e4 +warnings: + electrical: + unconnected_ports: + - message: 2 unconnected electrical ports! + ports: + - coupler_ring_1,e4 + - coupler_ring_1,e1 + values: + - - -1.0 + - 0.7 + - - 0.0 + - 0.7 diff --git a/tests/test_netlists/test_netlists_ring_single_.yml b/tests/test_netlists/test_netlists_ring_single_.yml new file mode 100644 index 00000000..82b8c66f --- /dev/null +++ b/tests/test_netlists/test_netlists_ring_single_.yml @@ -0,0 +1,206 @@ +connections: + bend_euler_sc_1,o1: straight_3,o2 + bend_euler_sc_1,o2: straight_1,o2 + bend_euler_sc_2,o1: straight_2,o1 + bend_euler_sc_2,o2: straight_3,o1 + coupler_ring_1,o2: straight_1,o1 + coupler_ring_1,o3: straight_2,o2 +instances: + bend_euler_sc_1: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + radius: 10.0 + bend_euler_sc_2: + component: bend_euler_sc + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 16.637 + route_info_xs_sc_devrec_length: 16.637 + width: 0.5 + settings: + radius: 10.0 + coupler_ring_1: + component: coupler_ring + info: {} + settings: + bend: + function: bend_euler + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + gap: 0.2 + length_x: 4.0 + radius: 10.0 + straight_1: + component: straight + info: + length: 0.6 + route_info_length: 0.6 + route_info_type: xs_sc + route_info_weight: 0.6 + route_info_xs_sc_length: 0.6 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.6 + npoints: 2 + straight_2: + component: straight + info: + length: 0.6 + route_info_length: 0.6 + route_info_type: xs_sc + route_info_weight: 0.6 + route_info_xs_sc_length: 0.6 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 0.6 + npoints: 2 + straight_3: + component: straight + info: + length: 4.0 + route_info_length: 4.0 + route_info_type: xs_sc + route_info_weight: 4.0 + route_info_xs_sc_length: 4.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 4.0 + npoints: 2 +name: ring_single_382b19ee +placements: + bend_euler_sc_1: + mirror: 0 + rotation: 180 + x: -4.0 + y: 21.3 + bend_euler_sc_2: + mirror: 0 + rotation: 90 + x: 10.0 + y: 11.3 + coupler_ring_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + straight_1: + mirror: 0 + rotation: 90 + x: -14.0 + y: 10.7 + straight_2: + mirror: 0 + rotation: 270 + x: 10.0 + y: 11.3 + straight_3: + mirror: 0 + rotation: 180 + x: 0.0 + y: 21.3 +ports: + o1: coupler_ring_1,o1 + o2: coupler_ring_1,o4 diff --git a/tests/test_netlists/test_netlists_ring_single_heater_.yml b/tests/test_netlists/test_netlists_ring_single_heater_.yml new file mode 100644 index 00000000..7e7e38a4 --- /dev/null +++ b/tests/test_netlists/test_netlists_ring_single_heater_.yml @@ -0,0 +1,248 @@ +connections: + bend_euler_1,e1: straight_3,e2 + bend_euler_1,e2: straight_1,e2 + bend_euler_1,o1: straight_3,o2 + bend_euler_1,o2: straight_1,o2 + bend_euler_2,e1: straight_2,e1 + bend_euler_2,e2: straight_3,e1 + bend_euler_2,o1: straight_2,o1 + bend_euler_2,o2: straight_3,o1 + coupler_ring_1,e2: straight_1,e1 + coupler_ring_1,e3: straight_2,e2 + coupler_ring_1,o2: straight_1,o1 + coupler_ring_1,o3: straight_2,o2 +instances: + bend_euler_1: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_heater_metal + route_info_weight: 16.637 + route_info_xs_sc_heater_metal_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc_heater_metal + direction: ccw + npoints: null + p: 0.5 + radius: 10.0 + with_arc_floorplan: true + bend_euler_2: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_heater_metal + route_info_weight: 16.637 + route_info_xs_sc_heater_metal_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc_heater_metal + direction: ccw + npoints: null + p: 0.5 + radius: 10.0 + with_arc_floorplan: true + coupler_ring_1: + component: coupler_ring + info: {} + settings: + bend: + function: bend_euler + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + cross_section_bend: xs_sc_heater_metal + gap: 0.2 + length_x: 4.0 + radius: 10.0 + straight_1: + component: straight + info: + length: 0.6 + route_info_length: 0.6 + route_info_type: xs_sc_heater_metal + route_info_weight: 0.6 + route_info_xs_sc_heater_metal_length: 0.6 + width: 0.5 + settings: + cross_section: xs_sc_heater_metal + length: 0.6 + npoints: 2 + straight_2: + component: straight + info: + length: 0.6 + route_info_length: 0.6 + route_info_type: xs_sc_heater_metal + route_info_weight: 0.6 + route_info_xs_sc_heater_metal_length: 0.6 + width: 0.5 + settings: + cross_section: xs_sc_heater_metal + length: 0.6 + npoints: 2 + straight_3: + component: straight + info: + length: 4.0 + route_info_length: 4.0 + route_info_type: xs_sc_heater_metal + route_info_weight: 4.0 + route_info_xs_sc_heater_metal_length: 4.0 + width: 0.5 + settings: + cross_section: xs_sc_heater_metal + length: 4.0 + npoints: 2 + via_stack_1: + component: via_stack + info: + layer: + - 12 + - 0 + size: + - 10 + - 10 + xsize: 10 + ysize: 10 + settings: + correct_size: true + layer_offsets: null + layer_port: null + layers: + - - 11 + - 0 + - - 12 + - 0 + size: + - 10 + - 10 + slot_horizontal: false + slot_vertical: false + vias: + - null + - null + via_stack_2: + component: via_stack + info: + layer: + - 12 + - 0 + size: + - 10 + - 10 + xsize: 10 + ysize: 10 + settings: + correct_size: true + layer_offsets: null + layer_port: null + layers: + - - 11 + - 0 + - - 12 + - 0 + size: + - 10 + - 10 + slot_horizontal: false + slot_vertical: false + vias: + - null + - null +name: ring_single_heater_cc91df46 +placements: + bend_euler_1: + mirror: 0 + rotation: 180 + x: -4.0 + y: 21.3 + bend_euler_2: + mirror: 0 + rotation: 90 + x: 10.0 + y: 11.3 + coupler_ring_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + straight_1: + mirror: 0 + rotation: 90 + x: -14.0 + y: 10.7 + straight_2: + mirror: 0 + rotation: 270 + x: 10.0 + y: 11.3 + straight_3: + mirror: 0 + rotation: 180 + x: 0.0 + y: 21.3 + via_stack_1: + mirror: 0 + rotation: 0 + x: -9.0 + y: 0.0 + via_stack_2: + mirror: 0 + rotation: 0 + x: 5.0 + y: 0.0 +ports: + l_e1: via_stack_1,e1 + l_e2: via_stack_1,e2 + l_e3: via_stack_1,e3 + l_e4: via_stack_1,e4 + o1: coupler_ring_1,o1 + o2: coupler_ring_1,o4 + r_e1: via_stack_2,e1 + r_e2: via_stack_2,e2 + r_e3: via_stack_2,e3 + r_e4: via_stack_2,e4 +warnings: + electrical: + unconnected_ports: + - message: 2 unconnected electrical ports! + ports: + - coupler_ring_1,e4 + - coupler_ring_1,e1 + values: + - - -4.0 + - 0.7 + - - 0.0 + - 0.7 diff --git a/tests/test_netlists/test_netlists_ring_with_crossing_.yml b/tests/test_netlists/test_netlists_ring_with_crossing_.yml new file mode 100644 index 00000000..085a96df --- /dev/null +++ b/tests/test_netlists/test_netlists_ring_with_crossing_.yml @@ -0,0 +1,113 @@ +connections: + bend_euler_sc_1,o1: straight_2,o1 + bend_euler_sc_1,o2: straight_1,o1 + bend_euler_sc_2,o1: ebeam_crossing4_2ports_1,o4 + bend_euler_sc_2,o2: straight_2,o2 + coupler_ring_1,o2: straight_1,o2 + coupler_ring_1,o3: ebeam_crossing4_2ports_1,o1 +instances: + bend_euler_sc_1: + component: bend_euler_sc + info: + dy: 5.0 + length: 8.318 + radius: 5.0 + radius_min: 3.53 + route_info_length: 8.318 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 8.318 + route_info_xs_sc_devrec_length: 8.318 + width: 0.5 + settings: + cross_section: xs_sc + radius: 5.0 + bend_euler_sc_2: + component: bend_euler_sc + info: + dy: 5.0 + length: 8.318 + radius: 5.0 + radius_min: 3.53 + route_info_length: 8.318 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc_devrec + route_info_weight: 8.318 + route_info_xs_sc_devrec_length: 8.318 + width: 0.5 + settings: + cross_section: xs_sc + radius: 5.0 + coupler_ring_1: + component: coupler_ring + info: {} + settings: + cross_section: xs_sc + gap: 0.2 + length_x: 4 + radius: 5.0 + ebeam_crossing4_2ports_1: + component: ebeam_crossing4_2ports + info: {} + settings: {} + straight_1: + component: straight + info: + length: 9.6 + route_info_length: 9.6 + route_info_type: xs_sc + route_info_weight: 9.6 + route_info_xs_sc_length: 9.6 + width: 0.5 + settings: + cross_section: xs_sc + length: 9.6 + npoints: 2 + straight_2: + component: straight + info: + length: 4 + route_info_length: 4.0 + route_info_type: xs_sc + route_info_weight: 4.0 + route_info_xs_sc_length: 4.0 + width: 0.5 + settings: + cross_section: xs_sc + length: 4 + npoints: 2 +name: ring_single_dut_26538df6 +placements: + bend_euler_sc_1: + mirror: 0 + rotation: 180 + x: -4.0 + y: 20.3 + bend_euler_sc_2: + mirror: 0 + rotation: 90 + x: 5.0 + y: 15.3 + coupler_ring_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + ebeam_crossing4_2ports_1: + mirror: 0 + rotation: 90 + x: 5.0 + y: 10.5 + straight_1: + mirror: 0 + rotation: 270 + x: -9.0 + y: 15.3 + straight_2: + mirror: 0 + rotation: 0 + x: -4.0 + y: 20.3 +ports: + o1: coupler_ring_1,o1 + o2: coupler_ring_1,o4 diff --git a/tests/test_netlists/test_netlists_spiral_.yml b/tests/test_netlists/test_netlists_spiral_.yml new file mode 100644 index 00000000..583b89e0 --- /dev/null +++ b/tests/test_netlists/test_netlists_spiral_.yml @@ -0,0 +1,3128 @@ +connections: + bend_euler_1,o1: straight_1,o2 + bend_euler_1,o2: straight_2,o1 + bend_euler_10,o1: straight_10,o2 + bend_euler_10,o2: straight_11,o1 + bend_euler_11,o1: straight_11,o2 + bend_euler_11,o2: straight_12,o1 + bend_euler_12,o1: straight_12,o2 + bend_euler_12,o2: straight_13,o1 + bend_euler_13,o1: straight_13,o2 + bend_euler_13,o2: straight_14,o1 + bend_euler_14,o1: straight_14,o2 + bend_euler_14,o2: straight_15,o1 + bend_euler_15,o1: straight_15,o2 + bend_euler_15,o2: straight_16,o1 + bend_euler_16,o1: straight_16,o2 + bend_euler_16,o2: straight_17,o1 + bend_euler_17,o1: straight_17,o2 + bend_euler_17,o2: straight_18,o1 + bend_euler_18,o1: straight_18,o2 + bend_euler_18,o2: straight_19,o1 + bend_euler_19,o1: straight_19,o2 + bend_euler_19,o2: straight_20,o1 + bend_euler_2,o1: straight_2,o2 + bend_euler_2,o2: straight_3,o1 + bend_euler_20,o1: straight_20,o2 + bend_euler_20,o2: straight_21,o1 + bend_euler_21,o1: straight_21,o2 + bend_euler_21,o2: straight_22,o1 + bend_euler_22,o1: straight_22,o2 + bend_euler_22,o2: straight_23,o1 + bend_euler_23,o1: straight_23,o2 + bend_euler_23,o2: straight_24,o1 + bend_euler_24,o1: straight_24,o2 + bend_euler_24,o2: straight_25,o1 + bend_euler_25,o1: straight_25,o2 + bend_euler_25,o2: straight_26,o1 + bend_euler_26,o1: straight_26,o2 + bend_euler_26,o2: straight_27,o1 + bend_euler_27,o1: straight_27,o2 + bend_euler_27,o2: straight_28,o1 + bend_euler_28,o1: straight_28,o2 + bend_euler_28,o2: straight_29,o1 + bend_euler_29,o1: straight_29,o2 + bend_euler_29,o2: straight_30,o1 + bend_euler_3,o1: straight_3,o2 + bend_euler_3,o2: straight_4,o1 + bend_euler_30,o1: straight_30,o2 + bend_euler_30,o2: straight_31,o1 + bend_euler_31,o1: straight_31,o2 + bend_euler_31,o2: straight_32,o1 + bend_euler_32,o1: straight_32,o2 + bend_euler_32,o2: straight_33,o1 + bend_euler_33,o1: straight_33,o2 + bend_euler_33,o2: straight_34,o1 + bend_euler_34,o1: straight_34,o2 + bend_euler_34,o2: straight_35,o1 + bend_euler_35,o1: straight_35,o2 + bend_euler_35,o2: straight_36,o1 + bend_euler_36,o1: straight_36,o2 + bend_euler_36,o2: straight_37,o1 + bend_euler_37,o1: straight_37,o2 + bend_euler_37,o2: straight_38,o1 + bend_euler_38,o1: straight_38,o2 + bend_euler_38,o2: straight_39,o1 + bend_euler_39,o1: straight_39,o2 + bend_euler_39,o2: straight_40,o1 + bend_euler_4,o1: straight_4,o2 + bend_euler_4,o2: straight_5,o1 + bend_euler_40,o1: straight_40,o2 + bend_euler_40,o2: straight_41,o1 + bend_euler_41,o1: straight_41,o2 + bend_euler_41,o2: straight_42,o1 + bend_euler_42,o1: straight_42,o2 + bend_euler_42,o2: straight_43,o1 + bend_euler_43,o1: straight_43,o2 + bend_euler_43,o2: straight_44,o1 + bend_euler_44,o1: straight_44,o2 + bend_euler_44,o2: straight_45,o1 + bend_euler_45,o1: straight_45,o2 + bend_euler_45,o2: straight_46,o1 + bend_euler_46,o1: straight_46,o2 + bend_euler_46,o2: straight_47,o1 + bend_euler_5,o1: straight_5,o2 + bend_euler_5,o2: straight_6,o1 + bend_euler_6,o1: straight_6,o2 + bend_euler_6,o2: straight_7,o1 + bend_euler_7,o1: straight_7,o2 + bend_euler_7,o2: straight_8,o1 + bend_euler_8,o1: straight_8,o2 + bend_euler_8,o2: straight_9,o1 + bend_euler_9,o1: straight_9,o2 + bend_euler_9,o2: straight_10,o1 +instances: + bend_euler_1: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_10: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_11: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_12: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_13: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_14: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_15: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_16: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_17: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_18: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_19: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_2: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_20: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_21: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_22: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_23: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_24: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_25: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_26: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_27: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_28: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_29: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_3: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_30: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_31: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_32: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_33: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_34: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_35: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_36: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_37: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_38: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_39: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_4: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_40: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_41: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_42: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_43: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_44: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_45: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_46: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_5: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_6: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_7: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_8: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + bend_euler_9: + component: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + route_info_length: 16.637 + route_info_n_bend_90: 1.0 + route_info_type: xs_sc + route_info_weight: 16.637 + route_info_xs_sc_length: 16.637 + width: 0.5 + settings: + angle: 90.0 + cross_section: xs_sc + direction: ccw + npoints: null + p: 0.5 + radius: null + with_arc_floorplan: true + straight_1: + component: straight + info: + length: 84.0 + route_info_length: 84.0 + route_info_type: xs_sc + route_info_weight: 84.0 + route_info_xs_sc_length: 84.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 84.0 + npoints: 2 + straight_10: + component: straight + info: + length: 369.0 + route_info_length: 369.0 + route_info_type: xs_sc + route_info_weight: 369.0 + route_info_xs_sc_length: 369.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 369.0 + npoints: 2 + straight_11: + component: straight + info: + length: 44.0 + route_info_length: 44.0 + route_info_type: xs_sc + route_info_weight: 44.0 + route_info_xs_sc_length: 44.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 44.0 + npoints: 2 + straight_12: + component: straight + info: + length: 363.0 + route_info_length: 363.0 + route_info_type: xs_sc + route_info_weight: 363.0 + route_info_xs_sc_length: 363.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 363.0 + npoints: 2 + straight_13: + component: straight + info: + length: 38.0 + route_info_length: 38.0 + route_info_type: xs_sc + route_info_weight: 38.0 + route_info_xs_sc_length: 38.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 38.0 + npoints: 2 + straight_14: + component: straight + info: + length: 357.0 + route_info_length: 357.0 + route_info_type: xs_sc + route_info_weight: 357.0 + route_info_xs_sc_length: 357.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 357.0 + npoints: 2 + straight_15: + component: straight + info: + length: 32.0 + route_info_length: 32.0 + route_info_type: xs_sc + route_info_weight: 32.0 + route_info_xs_sc_length: 32.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 32.0 + npoints: 2 + straight_16: + component: straight + info: + length: 351.0 + route_info_length: 351.0 + route_info_type: xs_sc + route_info_weight: 351.0 + route_info_xs_sc_length: 351.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 351.0 + npoints: 2 + straight_17: + component: straight + info: + length: 26.0 + route_info_length: 26.0 + route_info_type: xs_sc + route_info_weight: 26.0 + route_info_xs_sc_length: 26.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 26.0 + npoints: 2 + straight_18: + component: straight + info: + length: 345.0 + route_info_length: 345.0 + route_info_type: xs_sc + route_info_weight: 345.0 + route_info_xs_sc_length: 345.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 345.0 + npoints: 2 + straight_19: + component: straight + info: + length: 20.0 + route_info_length: 20.0 + route_info_type: xs_sc + route_info_weight: 20.0 + route_info_xs_sc_length: 20.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 20.0 + npoints: 2 + straight_2: + component: straight + info: + length: 393.0 + route_info_length: 393.0 + route_info_type: xs_sc + route_info_weight: 393.0 + route_info_xs_sc_length: 393.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 393.0 + npoints: 2 + straight_20: + component: straight + info: + length: 339.0 + route_info_length: 339.0 + route_info_type: xs_sc + route_info_weight: 339.0 + route_info_xs_sc_length: 339.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 339.0 + npoints: 2 + straight_21: + component: straight + info: + length: 14.0 + route_info_length: 14.0 + route_info_type: xs_sc + route_info_weight: 14.0 + route_info_xs_sc_length: 14.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 14.0 + npoints: 2 + straight_22: + component: straight + info: + length: 33.0 + route_info_length: 33.0 + route_info_type: xs_sc + route_info_weight: 33.0 + route_info_xs_sc_length: 33.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 33.0 + npoints: 2 + straight_23: + component: straight + info: + length: 8.0 + route_info_length: 8.0 + route_info_type: xs_sc + route_info_weight: 8.0 + route_info_xs_sc_length: 8.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 8.0 + npoints: 2 + straight_24: + component: straight + info: + length: 5.0 + route_info_length: 5.0 + route_info_type: xs_sc + route_info_weight: 5.0 + route_info_xs_sc_length: 5.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 5.0 + npoints: 2 + straight_25: + component: straight + info: + length: 5.0 + route_info_length: 5.0 + route_info_type: xs_sc + route_info_weight: 5.0 + route_info_xs_sc_length: 5.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 5.0 + npoints: 2 + straight_26: + component: straight + info: + length: 5.0 + route_info_length: 5.0 + route_info_type: xs_sc + route_info_weight: 5.0 + route_info_xs_sc_length: 5.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 5.0 + npoints: 2 + straight_27: + component: straight + info: + length: 8.0 + route_info_length: 8.0 + route_info_type: xs_sc + route_info_weight: 8.0 + route_info_xs_sc_length: 8.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 8.0 + npoints: 2 + straight_28: + component: straight + info: + length: 333.0 + route_info_length: 333.0 + route_info_type: xs_sc + route_info_weight: 333.0 + route_info_xs_sc_length: 333.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 333.0 + npoints: 2 + straight_29: + component: straight + info: + length: 14.0 + route_info_length: 14.0 + route_info_type: xs_sc + route_info_weight: 14.0 + route_info_xs_sc_length: 14.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 14.0 + npoints: 2 + straight_3: + component: straight + info: + length: 68.0 + route_info_length: 68.0 + route_info_type: xs_sc + route_info_weight: 68.0 + route_info_xs_sc_length: 68.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 68.0 + npoints: 2 + straight_30: + component: straight + info: + length: 339.0 + route_info_length: 339.0 + route_info_type: xs_sc + route_info_weight: 339.0 + route_info_xs_sc_length: 339.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 339.0 + npoints: 2 + straight_31: + component: straight + info: + length: 20.0 + route_info_length: 20.0 + route_info_type: xs_sc + route_info_weight: 20.0 + route_info_xs_sc_length: 20.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 20.0 + npoints: 2 + straight_32: + component: straight + info: + length: 345.0 + route_info_length: 345.0 + route_info_type: xs_sc + route_info_weight: 345.0 + route_info_xs_sc_length: 345.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 345.0 + npoints: 2 + straight_33: + component: straight + info: + length: 26.0 + route_info_length: 26.0 + route_info_type: xs_sc + route_info_weight: 26.0 + route_info_xs_sc_length: 26.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 26.0 + npoints: 2 + straight_34: + component: straight + info: + length: 351.0 + route_info_length: 351.0 + route_info_type: xs_sc + route_info_weight: 351.0 + route_info_xs_sc_length: 351.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 351.0 + npoints: 2 + straight_35: + component: straight + info: + length: 32.0 + route_info_length: 32.0 + route_info_type: xs_sc + route_info_weight: 32.0 + route_info_xs_sc_length: 32.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 32.0 + npoints: 2 + straight_36: + component: straight + info: + length: 357.0 + route_info_length: 357.0 + route_info_type: xs_sc + route_info_weight: 357.0 + route_info_xs_sc_length: 357.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 357.0 + npoints: 2 + straight_37: + component: straight + info: + length: 38.0 + route_info_length: 38.0 + route_info_type: xs_sc + route_info_weight: 38.0 + route_info_xs_sc_length: 38.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 38.0 + npoints: 2 + straight_38: + component: straight + info: + length: 363.0 + route_info_length: 363.0 + route_info_type: xs_sc + route_info_weight: 363.0 + route_info_xs_sc_length: 363.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 363.0 + npoints: 2 + straight_39: + component: straight + info: + length: 44.0 + route_info_length: 44.0 + route_info_type: xs_sc + route_info_weight: 44.0 + route_info_xs_sc_length: 44.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 44.0 + npoints: 2 + straight_4: + component: straight + info: + length: 387.0 + route_info_length: 387.0 + route_info_type: xs_sc + route_info_weight: 387.0 + route_info_xs_sc_length: 387.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 387.0 + npoints: 2 + straight_40: + component: straight + info: + length: 369.0 + route_info_length: 369.0 + route_info_type: xs_sc + route_info_weight: 369.0 + route_info_xs_sc_length: 369.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 369.0 + npoints: 2 + straight_41: + component: straight + info: + length: 50.0 + route_info_length: 50.0 + route_info_type: xs_sc + route_info_weight: 50.0 + route_info_xs_sc_length: 50.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 50.0 + npoints: 2 + straight_42: + component: straight + info: + length: 375.0 + route_info_length: 375.0 + route_info_type: xs_sc + route_info_weight: 375.0 + route_info_xs_sc_length: 375.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 375.0 + npoints: 2 + straight_43: + component: straight + info: + length: 56.0 + route_info_length: 56.0 + route_info_type: xs_sc + route_info_weight: 56.0 + route_info_xs_sc_length: 56.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 56.0 + npoints: 2 + straight_44: + component: straight + info: + length: 381.0 + route_info_length: 381.0 + route_info_type: xs_sc + route_info_weight: 381.0 + route_info_xs_sc_length: 381.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 381.0 + npoints: 2 + straight_45: + component: straight + info: + length: 62.0 + route_info_length: 62.0 + route_info_type: xs_sc + route_info_weight: 62.0 + route_info_xs_sc_length: 62.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 62.0 + npoints: 2 + straight_46: + component: straight + info: + length: 387.0 + route_info_length: 387.0 + route_info_type: xs_sc + route_info_weight: 387.0 + route_info_xs_sc_length: 387.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 387.0 + npoints: 2 + straight_47: + component: straight + info: + length: 78.0 + route_info_length: 78.0 + route_info_type: xs_sc + route_info_weight: 78.0 + route_info_xs_sc_length: 78.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 78.0 + npoints: 2 + straight_5: + component: straight + info: + length: 62.0 + route_info_length: 62.0 + route_info_type: xs_sc + route_info_weight: 62.0 + route_info_xs_sc_length: 62.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 62.0 + npoints: 2 + straight_6: + component: straight + info: + length: 381.0 + route_info_length: 381.0 + route_info_type: xs_sc + route_info_weight: 381.0 + route_info_xs_sc_length: 381.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 381.0 + npoints: 2 + straight_7: + component: straight + info: + length: 56.0 + route_info_length: 56.0 + route_info_type: xs_sc + route_info_weight: 56.0 + route_info_xs_sc_length: 56.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 56.0 + npoints: 2 + straight_8: + component: straight + info: + length: 375.0 + route_info_length: 375.0 + route_info_type: xs_sc + route_info_weight: 375.0 + route_info_xs_sc_length: 375.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 375.0 + npoints: 2 + straight_9: + component: straight + info: + length: 50.0 + route_info_length: 50.0 + route_info_type: xs_sc + route_info_weight: 50.0 + route_info_xs_sc_length: 50.0 + width: 0.5 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: 10.0 + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: WG + name: _default + offset: 0.0 + offset_function: null + port_names: + - o1 + - o2 + port_types: + - optical + - optical + simplify: null + width: 0.5 + width_function: null + length: 50.0 + npoints: 2 +name: spiral_external_io +placements: + bend_euler_1: + mirror: 0 + rotation: 90 + x: 386.0 + y: 38.0 + bend_euler_10: + mirror: 0 + rotation: 180 + x: -5.0 + y: 36.0 + bend_euler_11: + mirror: 0 + rotation: 270 + x: -15.0 + y: -18.0 + bend_euler_12: + mirror: 0 + rotation: 0 + x: 358.0 + y: -28.0 + bend_euler_13: + mirror: 0 + rotation: 90 + x: 368.0 + y: 20.0 + bend_euler_14: + mirror: 0 + rotation: 180 + x: 1.0 + y: 30.0 + bend_euler_15: + mirror: 0 + rotation: 270 + x: -9.0 + y: -12.0 + bend_euler_16: + mirror: 0 + rotation: 0 + x: 352.0 + y: -22.0 + bend_euler_17: + mirror: 0 + rotation: 90 + x: 362.0 + y: 14.0 + bend_euler_18: + mirror: 0 + rotation: 180 + x: 7.0 + y: 24.0 + bend_euler_19: + mirror: 0 + rotation: 270 + x: -3.0 + y: -6.0 + bend_euler_2: + mirror: 0 + rotation: 180 + x: -17.0 + y: 48.0 + bend_euler_20: + mirror: 0 + rotation: 0 + x: 346.0 + y: -16.0 + bend_euler_21: + mirror: 0 + rotation: 90 + x: 356.0 + y: 8.0 + bend_euler_22: + mirror: 0 + rotation: 180 + x: 313.0 + y: 18.0 + bend_euler_23: + mirror: 0 + rotation: 270 + x: 303.0 + y: 0.0 + bend_euler_24: + mirror: 0 + rotation: 0 + x: 318.0 + y: -10.0 + bend_euler_25: + mirror: true + rotation: 90 + x: 328.0 + y: 5.0 + bend_euler_26: + mirror: true + rotation: 0 + x: 343.0 + y: 15.0 + bend_euler_27: + mirror: true + rotation: 270 + x: 353.0 + y: -3.0 + bend_euler_28: + mirror: true + rotation: 180 + x: 10.0 + y: -13.0 + bend_euler_29: + mirror: true + rotation: 90 + x: 0.0 + y: 11.0 + bend_euler_3: + mirror: 0 + rotation: 270 + x: -27.0 + y: -30.0 + bend_euler_30: + mirror: true + rotation: 0 + x: 349.0 + y: 21.0 + bend_euler_31: + mirror: true + rotation: 270 + x: 359.0 + y: -9.0 + bend_euler_32: + mirror: true + rotation: 180 + x: 4.0 + y: -19.0 + bend_euler_33: + mirror: true + rotation: 90 + x: -6.0 + y: 17.0 + bend_euler_34: + mirror: true + rotation: 0 + x: 355.0 + y: 27.0 + bend_euler_35: + mirror: true + rotation: 270 + x: 365.0 + y: -15.0 + bend_euler_36: + mirror: true + rotation: 180 + x: -2.0 + y: -25.0 + bend_euler_37: + mirror: true + rotation: 90 + x: -12.0 + y: 23.0 + bend_euler_38: + mirror: true + rotation: 0 + x: 361.0 + y: 33.0 + bend_euler_39: + mirror: true + rotation: 270 + x: 371.0 + y: -21.0 + bend_euler_4: + mirror: 0 + rotation: 0 + x: 370.0 + y: -40.0 + bend_euler_40: + mirror: true + rotation: 180 + x: -8.0 + y: -31.0 + bend_euler_41: + mirror: true + rotation: 90 + x: -18.0 + y: 29.0 + bend_euler_42: + mirror: true + rotation: 0 + x: 367.0 + y: 39.0 + bend_euler_43: + mirror: true + rotation: 270 + x: 377.0 + y: -27.0 + bend_euler_44: + mirror: true + rotation: 180 + x: -14.0 + y: -37.0 + bend_euler_45: + mirror: true + rotation: 90 + x: -24.0 + y: 35.0 + bend_euler_46: + mirror: true + rotation: 0 + x: 373.0 + y: 45.0 + bend_euler_5: + mirror: 0 + rotation: 90 + x: 380.0 + y: 32.0 + bend_euler_6: + mirror: 0 + rotation: 180 + x: -11.0 + y: 42.0 + bend_euler_7: + mirror: 0 + rotation: 270 + x: -21.0 + y: -24.0 + bend_euler_8: + mirror: 0 + rotation: 0 + x: 364.0 + y: -34.0 + bend_euler_9: + mirror: 0 + rotation: 90 + x: 374.0 + y: 26.0 + straight_1: + mirror: 0 + rotation: 90 + x: 386.0 + y: -46.0 + straight_10: + mirror: 0 + rotation: 180 + x: 364.0 + y: 36.0 + straight_11: + mirror: 0 + rotation: 270 + x: -15.0 + y: 26.0 + straight_12: + mirror: 0 + rotation: 0 + x: -5.0 + y: -28.0 + straight_13: + mirror: 0 + rotation: 90 + x: 368.0 + y: -18.0 + straight_14: + mirror: 0 + rotation: 180 + x: 358.0 + y: 30.0 + straight_15: + mirror: 0 + rotation: 270 + x: -9.0 + y: 20.0 + straight_16: + mirror: 0 + rotation: 0 + x: 1.0 + y: -22.0 + straight_17: + mirror: 0 + rotation: 90 + x: 362.0 + y: -12.0 + straight_18: + mirror: 0 + rotation: 180 + x: 352.0 + y: 24.0 + straight_19: + mirror: 0 + rotation: 270 + x: -3.0 + y: 14.0 + straight_2: + mirror: 0 + rotation: 180 + x: 376.0 + y: 48.0 + straight_20: + mirror: 0 + rotation: 0 + x: 7.0 + y: -16.0 + straight_21: + mirror: 0 + rotation: 90 + x: 356.0 + y: -6.0 + straight_22: + mirror: 0 + rotation: 180 + x: 346.0 + y: 18.0 + straight_23: + mirror: 0 + rotation: 270 + x: 303.0 + y: 8.0 + straight_24: + mirror: 0 + rotation: 0 + x: 313.0 + y: -10.0 + straight_25: + mirror: 0 + rotation: 90 + x: 328.0 + y: 0.0 + straight_26: + mirror: 0 + rotation: 0 + x: 338.0 + y: 15.0 + straight_27: + mirror: 0 + rotation: 270 + x: 353.0 + y: 5.0 + straight_28: + mirror: 0 + rotation: 180 + x: 343.0 + y: -13.0 + straight_29: + mirror: 0 + rotation: 90 + x: 0.0 + y: -3.0 + straight_3: + mirror: 0 + rotation: 270 + x: -27.0 + y: 38.0 + straight_30: + mirror: 0 + rotation: 0 + x: 10.0 + y: 21.0 + straight_31: + mirror: 0 + rotation: 270 + x: 359.0 + y: 11.0 + straight_32: + mirror: 0 + rotation: 180 + x: 349.0 + y: -19.0 + straight_33: + mirror: 0 + rotation: 90 + x: -6.0 + y: -9.0 + straight_34: + mirror: 0 + rotation: 0 + x: 4.0 + y: 27.0 + straight_35: + mirror: 0 + rotation: 270 + x: 365.0 + y: 17.0 + straight_36: + mirror: 0 + rotation: 180 + x: 355.0 + y: -25.0 + straight_37: + mirror: 0 + rotation: 90 + x: -12.0 + y: -15.0 + straight_38: + mirror: 0 + rotation: 0 + x: -2.0 + y: 33.0 + straight_39: + mirror: 0 + rotation: 270 + x: 371.0 + y: 23.0 + straight_4: + mirror: 0 + rotation: 0 + x: -17.0 + y: -40.0 + straight_40: + mirror: 0 + rotation: 180 + x: 361.0 + y: -31.0 + straight_41: + mirror: 0 + rotation: 90 + x: -18.0 + y: -21.0 + straight_42: + mirror: 0 + rotation: 0 + x: -8.0 + y: 39.0 + straight_43: + mirror: 0 + rotation: 270 + x: 377.0 + y: 29.0 + straight_44: + mirror: 0 + rotation: 180 + x: 367.0 + y: -37.0 + straight_45: + mirror: 0 + rotation: 90 + x: -24.0 + y: -27.0 + straight_46: + mirror: 0 + rotation: 0 + x: -14.0 + y: 45.0 + straight_47: + mirror: 0 + rotation: 270 + x: 383.0 + y: 35.0 + straight_5: + mirror: 0 + rotation: 90 + x: 380.0 + y: -30.0 + straight_6: + mirror: 0 + rotation: 180 + x: 370.0 + y: 42.0 + straight_7: + mirror: 0 + rotation: 270 + x: -21.0 + y: 32.0 + straight_8: + mirror: 0 + rotation: 0 + x: -11.0 + y: -34.0 + straight_9: + mirror: 0 + rotation: 90 + x: 374.0 + y: -24.0 +ports: + o1: straight_47,o2 + o2: straight_1,o1 diff --git a/tests/test_netlists/test_netlists_straight_.yml b/tests/test_netlists/test_netlists_straight_.yml new file mode 100644 index 00000000..dc6aa4dc --- /dev/null +++ b/tests/test_netlists/test_netlists_straight_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: straight +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_straight_heater_metal_.yml b/tests/test_netlists/test_netlists_straight_heater_metal_.yml new file mode 100644 index 00000000..8f3009d0 --- /dev/null +++ b/tests/test_netlists/test_netlists_straight_heater_metal_.yml @@ -0,0 +1,244 @@ +connections: {} +instances: + component_sequence_1: + component: component_sequence + info: {} + settings: + port_name1: o1 + port_name2: o2 + ports_map: null + sequence: _-UHUHUHUHUHUHUHUH-_ + start_orientation: 0.0 + symbol_to_component: + '-': + - function: straight + module: ubcpdk.components + settings: + cross_section: xs_sc_heater_metal + length: 15.9 + npoints: 2 + - o1 + - o2 + H: + - function: straight + module: ubcpdk.components + settings: + cross_section: xs_sc_heater_metal + length: 6.0 + npoints: 2 + - o1 + - o2 + U: + - function: straight + module: ubcpdk.components + settings: + cross_section: xs_sc_heater_metal + length: 30.0 + npoints: 2 + - o1 + - o2 + _: + - function: straight + module: gdsfactory.components.straight + settings: + cross_section: xs_sc + length: 0.1 + npoints: 2 + - o1 + - o2 + taper_1: + component: taper + info: + length: 5.0 + width1: 10.0 + width2: 4.0 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: null + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: + - 11 + - 0 + name: _default + offset: 0.0 + offset_function: null + port_names: + - e1 + - e2 + port_types: + - electrical + - electrical + simplify: null + width: 4.0 + width_function: null + length: 5.0 + port: null + port_order_name: + - o1 + - o2 + port_order_types: + - optical + - optical + width1: 10.0 + width2: 4.0 + with_two_ports: true + taper_2: + component: taper + info: + length: 5.0 + width1: 10.0 + width2: 4.0 + settings: + cross_section: + bbox_layers: null + bbox_offsets: null + components_along_path: [] + radius: null + radius_min: 5.0 + sections: + - hidden: false + insets: null + layer: + - 11 + - 0 + name: _default + offset: 0.0 + offset_function: null + port_names: + - e1 + - e2 + port_types: + - electrical + - electrical + simplify: null + width: 4.0 + width_function: null + length: 5.0 + port: null + port_order_name: + - o1 + - o2 + port_order_types: + - optical + - optical + width1: 10.0 + width2: 4.0 + with_two_ports: true + via_stack_1: + component: via_stack + info: + layer: + - 12 + - 0 + size: + - 10 + - 10 + xsize: 10 + ysize: 10 + settings: + correct_size: true + layer_offsets: null + layer_port: null + layers: + - - 11 + - 0 + - - 12 + - 0 + size: + - 10 + - 10 + slot_horizontal: false + slot_vertical: false + vias: + - null + - null + via_stack_2: + component: via_stack + info: + layer: + - 12 + - 0 + size: + - 10 + - 10 + xsize: 10 + ysize: 10 + settings: + correct_size: true + layer_offsets: null + layer_port: null + layers: + - - 11 + - 0 + - - 12 + - 0 + size: + - 10 + - 10 + slot_horizontal: false + slot_vertical: false + vias: + - null + - null +name: straight_heater_metal_undercut_with_undercutFalse +placements: + component_sequence_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 + taper_1: + mirror: 0 + rotation: 0 + x: -4.905 + y: 0.0 + taper_2: + mirror: 0 + rotation: 180 + x: 324.905 + y: 0.0 + via_stack_1: + mirror: 0 + rotation: 0 + x: -9.905 + y: 0.0 + via_stack_2: + mirror: 0 + rotation: 0 + x: 329.905 + y: 0.0 +ports: + l_e1: via_stack_1,e1 + l_e2: via_stack_1,e2 + l_e3: via_stack_1,e3 + l_e4: via_stack_1,e4 + o1: component_sequence_1,o1 + o2: component_sequence_1,o2 + r_e1: via_stack_2,e1 + r_e2: via_stack_2,e2 + r_e3: via_stack_2,e3 + r_e4: via_stack_2,e4 +warnings: + optical: + unconnected_ports: + - message: 4 unconnected optical ports! + ports: + - taper_1,o1 + - taper_1,o2 + - taper_2,o1 + - taper_2,o2 + values: + - - -4.905 + - 0.0 + - - 0.095 + - 0.0 + - - 324.905 + - 0.0 + - - 319.905 + - 0.0 diff --git a/tests/test_netlists/test_netlists_straight_one_pin_.yml b/tests/test_netlists/test_netlists_straight_one_pin_.yml new file mode 100644 index 00000000..3695803a --- /dev/null +++ b/tests/test_netlists/test_netlists_straight_one_pin_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: straight_one_pin +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_taper_.yml b/tests/test_netlists/test_netlists_taper_.yml new file mode 100644 index 00000000..472c9453 --- /dev/null +++ b/tests/test_netlists/test_netlists_taper_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: taper +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_terminator_short_.yml b/tests/test_netlists/test_netlists_terminator_short_.yml new file mode 100644 index 00000000..da838a2d --- /dev/null +++ b/tests/test_netlists/test_netlists_terminator_short_.yml @@ -0,0 +1,43 @@ +connections: {} +instances: + taper_1: + component: taper + info: + length: 10.0 + width1: 0.5 + width2: 0.5 + settings: + cross_section: + function: cross_section + module: gdsfactory.cross_section + settings: + radius_min: 5 + length: 10.0 + port: null + port_order_name: + - o1 + - o2 + port_order_types: + - optical + - optical + width1: 0.5 + width2: null + with_two_ports: true +name: terminator_short +placements: + taper_1: + mirror: 0 + rotation: 0 + x: 0.0 + y: 0.0 +ports: + o1: taper_1,o1 +warnings: + optical: + unconnected_ports: + - message: 1 unconnected optical ports! + ports: + - taper_1,o2 + values: + - - 10.0 + - 0.0 diff --git a/tests/test_netlists/test_netlists_thermal_phase_shifter0_.yml b/tests/test_netlists/test_netlists_thermal_phase_shifter0_.yml new file mode 100644 index 00000000..17efc2c8 --- /dev/null +++ b/tests/test_netlists/test_netlists_thermal_phase_shifter0_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: thermal_phase_shifter0 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_thermal_phase_shifter1_.yml b/tests/test_netlists/test_netlists_thermal_phase_shifter1_.yml new file mode 100644 index 00000000..dea5860b --- /dev/null +++ b/tests/test_netlists/test_netlists_thermal_phase_shifter1_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: thermal_phase_shifter1 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_thermal_phase_shifter2_.yml b/tests/test_netlists/test_netlists_thermal_phase_shifter2_.yml new file mode 100644 index 00000000..3d149414 --- /dev/null +++ b/tests/test_netlists/test_netlists_thermal_phase_shifter2_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: thermal_phase_shifter2 +placements: {} +ports: {} diff --git a/tests/test_netlists/test_netlists_thermal_phase_shifter3_.yml b/tests/test_netlists/test_netlists_thermal_phase_shifter3_.yml new file mode 100644 index 00000000..bff7b431 --- /dev/null +++ b/tests/test_netlists/test_netlists_thermal_phase_shifter3_.yml @@ -0,0 +1,5 @@ +connections: {} +instances: {} +name: thermal_phase_shifter3 +placements: {} +ports: {} diff --git a/ubcpdk/components.py b/ubcpdk/components.py index 725efeb4..dfd4c848 100644 --- a/ubcpdk/components.py +++ b/ubcpdk/components.py @@ -11,7 +11,6 @@ Label, LayerSpec, List, - Metadata, Optional, Port, Tuple, @@ -24,8 +23,6 @@ LAYER, LAYER_STACK, add_pins_bbox_siepic, - add_pins_bbox_siepic_remove_layers, - add_pins_siepic_metal, ) um = 1e-6 @@ -40,12 +37,15 @@ def bend_euler_sc(**kwargs) -> Component: bend_euler180_sc = partial(bend_euler_sc, angle=180) bend = bend_euler_sc -straight = partial( - gf.components.straight, - cross_section="xs_sc", - post_process=(tech.add_bbox_siepic_top_bot,), -) -straight_heater_metal = gf.c.straight_heater_metal + +@gf.cell(post_process=(tech.add_pins_bbox_siepic,)) +def straight(length: float = 1.0, npoints: int = 2, cross_section="xs_sc"): + return gf.components.straight( + length=length, npoints=npoints, cross_section=cross_section + ) + + +straight_heater_metal = partial(gf.c.straight_heater_metal, straight=straight) bend_s = partial( gf.components.bend_s, cross_section="xs_sc", @@ -494,8 +494,6 @@ def add_fiber_array( cross_section: CrossSectionSpec = "xs_sc", layer_label: LayerSpec = LAYER.TEXT, straight: ComponentSpec = straight, - post_process: Callable | list[Callable] | None = None, - info: Metadata | None = None, **kwargs, ) -> Component: """Returns component with grating couplers and labels on each port. @@ -515,8 +513,6 @@ def add_fiber_array( cross_section: spec. layer_label: for label. straight: straight component. - post_process: function to post process the component. - info: metadata. """ c = gf.Component() @@ -542,8 +538,6 @@ def add_fiber_array( c.add_ports(ref.ports) c.copy_child_info(component) - c.post_process(post_process) - c.info.update(info or {}) return c @@ -639,21 +633,19 @@ def dbr( return add_pins_bbox_siepic(c) -coupler = partial( - gf.components.coupler, - cross_section=tech.xs_sc_simple, - post_process=tech.add_pins_bbox_siepic, -) -coupler_ring = partial( - gf.components.coupler_ring, - cross_section=tech.xs_sc_simple, - post_process=tech.add_pins_bbox_siepic, -) -mmi1x2 = partial( - gf.components.mmi1x2, - cross_section=tech.xs_sc_simple, - post_process=tech.add_pins_bbox_siepic, -) +@gf.cell(post_process=(tech.add_pins_bbox_siepic,)) +def coupler(**kwargs) -> gf.Component: + return gf.components.coupler(**kwargs) + + +@gf.cell(post_process=(tech.add_pins_bbox_siepic,)) +def coupler_ring(**kwargs) -> gf.Component: + return gf.components.coupler_ring(**kwargs) + + +@gf.cell(post_process=(tech.add_pins_bbox_siepic,)) +def mmi1x2(**kwargs) -> gf.Component: + return gf.components.mmi1x2(**kwargs) @gf.cell @@ -752,7 +744,7 @@ def ebeam_dc_halfring_straight( ebeam_dc_te1550 = partial( - gf.components.coupler, post_process=add_pins_bbox_siepic_remove_layers + gf.components.coupler, ) taper = partial(gf.components.taper) spiral = partial(gf.components.spiral_external_io) @@ -773,7 +765,6 @@ def ebeam_dc_halfring_straight( layer=LAYER.M2_ROUTER, bbox_layers=(LAYER.PAD_OPEN,), bbox_offsets=(-1.8,), - post_process=add_pins_siepic_metal, ) @@ -820,14 +811,9 @@ def add_fiber_array_pads_rf( kwargs: for add_fiber_array. """ c0 = gf.get_component(component) - text = f"elec_{username}-{clean_name(c0.name)}_G" - add_label = partial(add_label_electrical, text=text) - rename_ports_and_add_label = gf.compose( - add_label, gf.port.auto_rename_ports_electrical - ) - c1 = add_pads_rf( - component=c0, post_process=rename_ports_and_add_label, orientation=orientation - ) + # text = f"elec_{username}-{clean_name(c0.name)}_G" + # add_label = partial(add_label_electrical, text=text) + c1 = add_pads_rf(component=c0, orientation=orientation) return add_fiber_array(component=c1, **kwargs) @@ -845,13 +831,13 @@ def add_pads( kwargs: for add_fiber_array. """ c0 = gf.get_component(component) - text = f"elec_{username}-{clean_name(c0.name)}_G" - add_label = partial(add_label_electrical, text=text) - return add_pads_rf(component=c, post_process=add_label, **kwargs) + # text = f"elec_{username}-{clean_name(c0.name)}_G" + # add_label = partial(add_label_electrical, text=text) + return add_pads_rf(component=c0, **kwargs) if __name__ == "__main__": - # c = mzi_heater() + # c = straight() # c = uc.ring_single_heater() # c = uc.add_fiber_array_pads_rf(c) @@ -867,11 +853,11 @@ def add_pads( # c = bend_euler() # c = mzi() # c = spiral() - # c = mzi_heater() + c = pad_array() # c = ring_double_heater() # c = ring_single_heater() - c = ebeam_y_1550() + # c = ebeam_y_1550() # c = ebeam_dc_halfring_straight() # c = ring_with_crossing() # c = ring_single() - c.show(show_ports=True) + c.show(show_ports=False) diff --git a/ubcpdk/import_gds.py b/ubcpdk/import_gds.py index 2f9a261e..d51dbbcf 100644 --- a/ubcpdk/import_gds.py +++ b/ubcpdk/import_gds.py @@ -167,13 +167,13 @@ def add_ports_from_siepic_pins( ) +@gf.cell(autoname=False, post_process=(add_ports_from_siepic_pins,)) def import_gds(gdspath, **kwargs): return gf.import_gds( gdspath, gdsdir=PATH.gds, library="Design kits/ebeam", model=gdspath.split(".")[0], - post_process=add_ports_from_siepic_pins, **kwargs, ) diff --git a/ubcpdk/tech.py b/ubcpdk/tech.py index 0afc07cb..ec2686e9 100644 --- a/ubcpdk/tech.py +++ b/ubcpdk/tech.py @@ -173,9 +173,6 @@ def add_pins_bbox_siepic( return c -add_pins_bbox_siepic_remove_layers = partial(add_pins_bbox_siepic, remove_layers=True) - - add_pins_bbox_siepic_metal = partial( add_pins_bbox_siepic, port_type="placement", layer_pin=LAYER.PORTE ) @@ -294,8 +291,6 @@ class Tech(BaseModel): ############################ cross_section = partial( gf.cross_section.cross_section, - add_pins_function_name="add_pins_siepic", - add_pins_function_module="ubcpdk.tech", radius_min=5, ) @@ -312,8 +307,6 @@ class Tech(BaseModel): layer_heater=LAYER.M1_HEATER, cladding_layers=cladding_layers_optical_siepic, cladding_offsets=cladding_offsets_optical_siepic, - add_pins_function_name="add_pins_siepic", - add_pins_function_module="ubcpdk.tech", ) strip_bbox = partial( @@ -330,9 +323,7 @@ class Tech(BaseModel): port_types=gf.cross_section.port_types_electrical, radius=None, ) -heater_metal = partial( - metal_routing, width=4, layer=LAYER.M1_HEATER, add_pins_function_name=None -) +heater_metal = partial(metal_routing, width=4, layer=LAYER.M1_HEATER) ############################ # Cross-sections From 5af193f5940dc860894846f30cf16c9c1c66ed8c Mon Sep 17 00:00:00 2001 From: Joaquin Matres <4514346+joamatab@users.noreply.github.com> Date: Sun, 24 Mar 2024 10:52:58 -0700 Subject: [PATCH 5/7] fix simulations --- pyproject.toml | 2 +- ubcpdk/__init__.py | 10 ++-- ubcpdk/models.py | 57 ++++++++-------------- ubcpdk/samples/test_circuit_simulations.py | 34 +++++++++++++ 4 files changed, 61 insertions(+), 42 deletions(-) create mode 100644 ubcpdk/samples/test_circuit_simulations.py diff --git a/pyproject.toml b/pyproject.toml index 5def08a8..6b2f4edf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -16,7 +16,7 @@ classifiers = [ ] dependencies = [ "gdsfactory==7.22.2", - "gplugins[tidy3d,sax,schematic]>=0.10.2,<0.11" + "gplugins[tidy3d,sax,schematic]>=0.11,<0.12" ] description = "ubcpdk pdk" keywords = ["python"] diff --git a/ubcpdk/__init__.py b/ubcpdk/__init__.py index ddd184f7..defe5039 100644 --- a/ubcpdk/__init__.py +++ b/ubcpdk/__init__.py @@ -3,8 +3,9 @@ from gdsfactory.config import PATH as GPATH from gdsfactory.get_factories import get_cells from gdsfactory.pdk import Pdk +from gplugins.sax.models import get_models -from ubcpdk import components, data, tech +from ubcpdk import components, data, models, tech from ubcpdk.config import CONFIG, PATH from ubcpdk.tech import LAYER, LAYER_STACK, LAYER_VIEWS, cross_sections @@ -29,6 +30,7 @@ name="ubcpdk", cells=cells, cross_sections=cross_sections, + models=get_models(models), layers=dict(LAYER), layer_stack=LAYER_STACK, layer_views=LAYER_VIEWS, @@ -40,6 +42,6 @@ if __name__ == "__main__": - f = PDK.cells - for k, _v in f.items(): - print(k) + m = get_models(models) + for model in m.keys(): + print(model) diff --git a/ubcpdk/models.py b/ubcpdk/models.py index ffc8f8ff..b406d0df 100644 --- a/ubcpdk/models.py +++ b/ubcpdk/models.py @@ -2,50 +2,33 @@ from functools import partial -from gplugins.sax.models import ( - attenuator, - bend, - coupler, - grating_coupler, - mmi1x2, - mmi2x2, - phase_shifter, -) -from gplugins.sax.models import straight as _straight +import gplugins.sax.models as sm nm = 1e-3 -straight = partial(_straight, wl0=1.55, neff=2.4, ng=4.2) -bend_euler = partial(bend, loss=0.03) +straight = partial(sm.straight, wl0=1.55, neff=2.4, ng=4.2) +bend_euler_sc = bend_euler = partial(sm.bend, loss=0.03) -gc_te1550 = partial(grating_coupler, loss=6, bandwidth=35 * nm, wl0=1.55) -gc_te1550_broadband = partial(grating_coupler, loss=6, bandwidth=50 * nm, wl0=1.55) -gc_tm1550 = partial(grating_coupler, loss=6, bandwidth=35 * nm, wl0=1.55) - -gc_te1310_broadband = partial(grating_coupler, loss=6, bandwidth=50 * nm, wl0=1.31) -gc_te1310 = partial(grating_coupler, loss=6, bandwidth=35 * nm, wl0=1.31) - - -models = dict( - attenuator=attenuator, - bend_euler=bend, - coupler=coupler, - mmi1x2=mmi1x2, - mmi2x2=mmi2x2, - phase_shifter=phase_shifter, - straight=straight, - taper=straight, - gc_te1550=gc_te1550, - gc_te1550_broadband=gc_te1550_broadband, - gc_tm1550=gc_tm1550, - gc_te1310_broadband=gc_te1310_broadband, - gc_te1310=gc_te1310, -) +################ +# grating couplers +################ +gc_te1550 = partial(sm.grating_coupler, loss=6, bandwidth=35 * nm, wl0=1.55) +gc_te1550_broadband = partial(sm.grating_coupler, loss=6, bandwidth=50 * nm, wl0=1.55) +gc_tm1550 = partial(sm.grating_coupler, loss=6, bandwidth=35 * nm, wl0=1.55) +gc_te1310_broadband = partial(sm.grating_coupler, loss=6, bandwidth=50 * nm, wl0=1.31) +gc_te1310 = partial(sm.grating_coupler, loss=6, bandwidth=35 * nm, wl0=1.31) +################ +# MMIs +################ +mmi1x2 = partial(sm.mmi1x2, wl0=1.55, fwhm=0.2, loss_dB=0.3) +mmi2x2 = partial(sm.mmi2x2, wl0=1.55, fwhm=0.2, loss_dB=0.3) +ebeam_y_1550 = mmi1x2 +coupler = sm.coupler if __name__ == "__main__": import gplugins.sax as gs - gs.plot_model(grating_coupler) - # gs.plot_model(coupler) + gs.plot_model(gc_te1550) + gs.plot_model(coupler) diff --git a/ubcpdk/samples/test_circuit_simulations.py b/ubcpdk/samples/test_circuit_simulations.py new file mode 100644 index 00000000..f81d2e59 --- /dev/null +++ b/ubcpdk/samples/test_circuit_simulations.py @@ -0,0 +1,34 @@ +import jax.numpy as jnp +import matplotlib.pyplot as plt +import sax + +import ubcpdk +from ubcpdk import PDK + + +def test_mzi(): + c = ubcpdk.components.mzi(delta_length=20) + netlist = c.get_netlist() + models = PDK.models + circuit, _ = sax.circuit(netlist, models=models) # type: ignore + wl = jnp.linspace(1.5, 1.6) + + S = circuit(wl=wl) + assert S + + +if __name__ == "__main__": + c = ubcpdk.components.mzi(delta_length=20) + netlist = c.get_netlist() + models = PDK.models + circuit, _ = sax.circuit(netlist, models=models) # type: ignore + wl = jnp.linspace(1.5, 1.6) + + S = circuit(wl=wl) + plt.figure(figsize=(14, 4)) + plt.title("MZI") + plt.plot(1e3 * wl, jnp.abs(S["o1", "o2"]) ** 2) # type: ignore + plt.xlabel("λ [nm]") + plt.ylabel("T") + plt.grid(True) + plt.show() From 286e92cc4748d091faab2ecd413699d46873e3d2 Mon Sep 17 00:00:00 2001 From: Joaquin Matres <4514346+joamatab@users.noreply.github.com> Date: Sun, 24 Mar 2024 10:56:39 -0700 Subject: [PATCH 6/7] fix tests --- tests/ref/mzi_mzi_a1fe9d55.gds | Bin 24312 -> 24852 bytes tests/ref/mzi_mzi_f5c6fc9f.gds | Bin 23124 -> 23506 bytes ...ater_metal_undercut_with_undercutFalse.gds | Bin 3312 -> 2756 bytes tests/test_components.py | 1 + .../test_netlists_straight_heater_metal_.yml | 4 ++-- 5 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/ref/mzi_mzi_a1fe9d55.gds b/tests/ref/mzi_mzi_a1fe9d55.gds index a10dd727d0a9c066a346ad8bebdaa4ac6d37dbdb..cf5d962396494caba026f680203d23e3bc41f0ca 100644 GIT binary patch delta 515 zcmeydmvPD=#tk=FCYySSaik_CnH!~88clxBC^6aAn`1I7o518|Pn~)RA-3X@qQuPf zjFR}26e9z(R6`3DLk0#O0cHk<+yn*?U=ajjE(QiUj9+R*GOzq?gUaX>6y*>Gb*VN5VSqdB{ z=f?1G!i|`m7pE|JlSj(rJuWhnKY6H3{^JtCRjLg(kD=6ba-3@bQ>nq^4X*l=)7b2S{gO>Y64d@c@RvUoPcWbsn4$>Ied PlQ+luJQ8GPVPOCO1*e21 delta 299 zcmbPoi1Ei>#tk=FCg1lG+HB6A<+wT4%Z`!5EXl|s)!Z<3awCWE4%1^%LkusT$U4HUS7BPg%_ly#g`B_~iM>6w>!c;Rb@CYz7FytmM0Kwz{W>Hbg zBuh)vR5L@U%%ce~8H5c7S;fGHpekj|H-ITcGoG<+0bB-6&+iK`8HDkLY+&Qrp-Lyu kVVgR6vd@Ff`u>juCv&oEaKOv}dv%3x3L85E0}BfS0G^XdApigX diff --git a/tests/ref/mzi_mzi_f5c6fc9f.gds b/tests/ref/mzi_mzi_f5c6fc9f.gds index fe26b898d1d6904619f99d882ab42304340f137d..267e17795659d81537d9016996911bea1855f4b2 100644 GIT binary patch delta 101 zcmcbzh4IpM#tp5^ViH1Z#U(|FnduoN@kwTuNy%wODJq7WXELWaPW~Up!-Wu=Ea>Vy yc>$ZuWCK@~$q(2fCfkLvu`n<&@K3G_3uNS)d?8GKbFu3({>hxKS(|x7-B|(f;2}%^ delta 40 ycmV+@0N4N0w*l0&0kDMwlZONyv!nxCL6eJC43i;NYO{MrrVo=V1PZgERxt%ujt@ov diff --git a/tests/ref/straight_heater_metal_undercut_straight_heater_metal_undercut_with_undercutFalse.gds b/tests/ref/straight_heater_metal_undercut_straight_heater_metal_undercut_with_undercutFalse.gds index a7be1f52726ac5034f74bb8b722b5df7d291ea40..7983b3baafe7b41a7181f1e59502d8c8977d3004 100644 GIT binary patch delta 717 zcmew$c|>%=dJZ$o>G^0B*b6_vfg`0@Tgu}YALM^fbmGQbpFBorFYMFi;Hj0Zaukq6*5tFY#t%qXeqVj zsv%c3#n4*vs%9v4*=(pytdk0YiJEa*0pt0Ym_xv zElRVhc&-4D7>$7Q6UOYAR1)2;DY9-Tw$}B-z)~Cx99EyZ!{ACw1nM8)t z#C6XW^YewuQo-ii`51yiCpe5qWTF>dQ>0z7@avQt7lXdNOL=-%*BZ-4RcuNi!~xI| z9ymZpdCYaj?t^7n2tTRLitqo>OzoAvr(YkEHH-T9ooIvm+)>r7td}Aa9%Mx<6pCu4 zFe5qYskA~z6E9X(b7EeTTx@BRi7hS_i*s6D>hQjL!Ndl5-)EUvKQFg%g^Bg^a@XE6 zu>sx>yG(3=_xmj-*3Zk|c+AB5dHHn;gz{Su*=84(y@P}=PhDilUY+nbgg0Yfk0@nqk0@nu9)?G> zJ?60AWA;u0ka&B=ru&uF+Ft24GNF8ur~W{JCr_?Ivcz*qn_G(GI(NkF$!n z>$H9HDY`D#l?|;WNwO@;dhMPjiLxx=&DYCm15vrqsE`V$?UTT*Bf#j)S;E!XvUct| z7r^oR-phGU)`5EDop0~%bMp2)1Jg}=zSCsa4>8{)p3FCiA7;J>i4UJt7;3)LEB1V+ z&4ZqA+RgpUw^uu_%l6gI6m9KHJmkY@N8*WgBz_p}28sV)+L@Ryu;}aI{ Date: Sun, 24 Mar 2024 11:10:52 -0700 Subject: [PATCH 7/7] fix docs --- docs/notebooks/00_layout.ipynb | 1 - docs/notebooks/12_sim_plugins_tidy3d.ipynb | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/notebooks/00_layout.ipynb b/docs/notebooks/00_layout.ipynb index 0bbcd6f1..4957ff67 100644 --- a/docs/notebooks/00_layout.ipynb +++ b/docs/notebooks/00_layout.ipynb @@ -343,7 +343,6 @@ " radius=radius,\n", " y_straight_inner_top=0,\n", " x_inner_length_cutback=0,\n", - " info=dict(does=[\"spiral\", \"te1550\"]),\n", " )\n", " )\n", " ]\n", diff --git a/docs/notebooks/12_sim_plugins_tidy3d.ipynb b/docs/notebooks/12_sim_plugins_tidy3d.ipynb index 338d512a..791e35ef 100644 --- a/docs/notebooks/12_sim_plugins_tidy3d.ipynb +++ b/docs/notebooks/12_sim_plugins_tidy3d.ipynb @@ -240,6 +240,14 @@ "metadata": {}, "outputs": [], "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5e44e25", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {