diff --git a/requirements.txt b/requirements.txt index 452aadcd..5faf0358 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -e . lygadgets -gdsfactory[full]>=4.3.5 +gdsfactory[full]==4.3.7 modes diff --git a/ubcpdk/add_pins.py b/ubcpdk/add_pins.py deleted file mode 100644 index b81804bc..00000000 --- a/ubcpdk/add_pins.py +++ /dev/null @@ -1,41 +0,0 @@ -from typing import Callable, Optional - -from gdsfactory.add_pins import add_pin_path -from gdsfactory.component import Component -from gdsfactory.types import Layer -from ubcpdk.tech import LAYER - - -def add_pins( - component: Component, - function: Callable = add_pin_path, - layer_port: Layer = LAYER.WG, - layer_pin: Layer = LAYER.PORT, - bbox_layer: Optional[Layer] = LAYER.DEVREC, -) -> Component: - """Add pins and device recognition layer. - - Args: - component: to add pins - function: - layer_port: - layer_pin: - bbox_layer: bounding box layer - """ - if bbox_layer: - component.add_padding(default=0, layers=(bbox_layer,)) - - for p in component.get_ports_list(layer=layer_port): - function(component=component, port=p, layer=layer_pin, layer_label=layer_pin) - - return component - - -if __name__ == "__main__": - import gdsfactory as gf - - c = gf.components.crossing() - c.unlock() - add_pins(c) - c.lock() - c.show(show_ports=False) diff --git a/ubcpdk/components/__init__.py b/ubcpdk/components/__init__.py index 548a887c..3d9ade98 100644 --- a/ubcpdk/components/__init__.py +++ b/ubcpdk/components/__init__.py @@ -5,7 +5,6 @@ add_fiber_array, ) from ubcpdk.components.cells import ( - bend_euler, dc_adiabatic, dc_broadband_te, dc_broadband_tm, @@ -16,6 +15,7 @@ spiral, y_adiabatic, y_splitter, + bend_euler, ) from ubcpdk.components.crossing import ( crossing, @@ -37,6 +37,7 @@ factory = dict( add_fiber_array=add_fiber_array, + bend_euler=bend_euler, crossing=crossing, dbr=dbr, dbr_cavity=dbr_cavity, diff --git a/ubcpdk/components/add_fiber_array.py b/ubcpdk/components/add_fiber_array.py index b59454a6..ae2cb94c 100644 --- a/ubcpdk/components/add_fiber_array.py +++ b/ubcpdk/components/add_fiber_array.py @@ -180,4 +180,3 @@ def add_fiber_array( c = pdk.straight() c = add_fiber_array(component=c) c.show() - c.pprint diff --git a/ubcpdk/components/cells.py b/ubcpdk/components/cells.py index 0b05eab3..55488c15 100644 --- a/ubcpdk/components/cells.py +++ b/ubcpdk/components/cells.py @@ -1,6 +1,4 @@ -""" - -Each partial function is equivalent to +""" Each partial function is equivalent to def y_splitter() -> Component: c = import_gds("ebeam_y_1550", rename_ports=True) @@ -8,8 +6,8 @@ def y_splitter() -> Component: """ import gdsfactory as gf +from gdsfactory.add_pins import add_pins_bbox_siepic from ubcpdk.import_gds import import_gds -from ubcpdk.add_pins import add_pins from ubcpdk.components.straight import straight @@ -44,7 +42,7 @@ def y_splitter() -> Component: doc="Y junction TE1550 50/50 power.", ) -bend_euler = gf.partial(gf.components.bend_euler, decorator=add_pins) +bend_euler = gf.partial(gf.components.bend_euler, decorator=add_pins_bbox_siepic) mzi = gf.partial( gf.components.mzi, splitter=y_splitter, straight=straight, bend=bend_euler ) @@ -65,6 +63,16 @@ def y_splitter() -> Component: # print(c.ports.keys()) # c = straight() # c = add_fiber_array(component=c) - c = mzi() + c = mzi(splitter=y_splitter) # c = gc_te1550() - c.show() + + # c = y_splitter() + # s = dc_adiabatic() + + c = gf.Component() + s = y_splitter() + sp = c << s + wg = c << straight() + wg.connect("o1", sp.ports["o1"]) + + c.show(show_ports=False) diff --git a/ubcpdk/components/grating_couplers.py b/ubcpdk/components/grating_couplers.py index e2cf6443..2988ccbe 100644 --- a/ubcpdk/components/grating_couplers.py +++ b/ubcpdk/components/grating_couplers.py @@ -1,8 +1,9 @@ import gdsfactory as gf -from ubcpdk.import_gds import import_gds, add_ports_renamed +from ubcpdk.import_gds import import_gds, add_ports_renamed_gratings -add_ports_rotate180 = gf.compose(gf.functions.rotate180, add_ports_renamed) +add_ports_rotate180 = gf.compose(gf.functions.rotate180, add_ports_renamed_gratings) + gc_te1550 = gf.partial( import_gds, @@ -12,6 +13,8 @@ wavelength=1.55, ) +# FIXME: move 1nm to the left, snapping issue? + gc_te1550_broadband = gf.partial( import_gds, "ebeam_gc_te1550_broadband.gds", @@ -39,5 +42,7 @@ if __name__ == "__main__": - c = gc_te1550() + # c = gc_te1310() + c = gc_tm1550() + # c = gc_te1550() c.show() diff --git a/ubcpdk/components/straight.py b/ubcpdk/components/straight.py index dee105c7..a769001a 100644 --- a/ubcpdk/components/straight.py +++ b/ubcpdk/components/straight.py @@ -1,7 +1,7 @@ import gdsfactory as gf from ubcpdk.tech import LAYER -from ubcpdk.add_pins import add_pins +from gdsfactory.add_pins import add_pins_bbox_siepic @gf.cell @@ -36,10 +36,15 @@ def straight( for i, text in enumerate(labels): c.add_label(text=text, position=(length / 2, i * 0.1), layer=LAYER.DEVREC) - add_pins(c) + add_pins_bbox_siepic(c) return c if __name__ == "__main__": - c = straight() + c = gf.Component() + # s1 = c.add_ref(straight()) + + s1 = c << straight() + s2 = c << straight() + s2.connect("o2", s1.ports["o1"]) c.show(show_ports=False) diff --git a/ubcpdk/import_gds.py b/ubcpdk/import_gds.py index 1b455eb4..abc15ad8 100644 --- a/ubcpdk/import_gds.py +++ b/ubcpdk/import_gds.py @@ -4,6 +4,7 @@ from ubcpdk.tech import LAYER from ubcpdk.config import PATH +from gdsfactory.add_pins import add_pins_bbox_siepic layer = LAYER.WG @@ -32,8 +33,19 @@ def guess_port_orientaton(position: ndarray, name: str, label: str, n: int) -> i return 0 +def remove_pins(component) -> Component: + """Remove PINS and""" + # component.remove_labels(test=lambda x: True) + component.remove_layers(layers=(LAYER.DEVREC, LAYER.PORT)) + component.paths = [] + component._bb_valid = False + return component + + def add_ports(component: Component) -> Component: - """Add ports from labels.""" + """Add ports from labels. + guessing port orientaton from port location + """ c = component n = 0 @@ -44,6 +56,7 @@ def add_ports(component: Component) -> Component: for label in c.get_labels(): if label.text.startswith("opt"): port_name = label.text + print(label.position) port = gf.Port( name=port_name, midpoint=label.position, @@ -58,10 +71,19 @@ def add_ports(component: Component) -> Component: ) if port_name not in c.ports: c.add_port(port) + return c -add_ports_renamed = gf.compose(gf.port.auto_rename_ports, add_ports) +# gratings have a 2nm square that is sticking out 1nm +add_pins_gratings = gf.partial(add_pins_bbox_siepic, padding=-1e-3) + +add_ports_renamed = gf.compose( + add_pins_bbox_siepic, gf.port.auto_rename_ports, remove_pins, add_ports +) +add_ports_renamed_gratings = gf.compose( + add_pins_gratings, gf.port.auto_rename_ports, remove_pins, add_ports +) import_gds = gf.partial(gf.import_gds, gdsdir=PATH.gds, decorator=add_ports_renamed) @@ -69,5 +91,5 @@ def add_ports(component: Component) -> Component: if __name__ == "__main__": gdsname = "ebeam_y_1550.gds" c = import_gds(gdsname) - print(c.ports) - c.show() + # print(c.ports) + c.show(show_ports=False) diff --git a/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_92fd2590.gds b/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_92fd2590.gds new file mode 100644 index 00000000..3261ca2f Binary files /dev/null and b/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_92fd2590.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_f15cbd7a.gds b/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_f15cbd7a.gds new file mode 100644 index 00000000..40c1430b Binary files /dev/null and b/ubcpdk/tests/test_components.gds/gds_ref/bend_euler_f15cbd7a.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_adiabatic_te1550.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_adiabatic_te1550.gds index 41acd760..0b1e0396 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_adiabatic_te1550.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_adiabatic_te1550.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_te1550.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_te1550.gds index 63de1bb8..4da91baf 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_te1550.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_te1550.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_tm1550.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_tm1550.gds index 6b3b027e..35367c47 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_tm1550.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_bdc_tm1550.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_crossing4.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_crossing4.gds index 1ef709a7..09d28f13 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_crossing4.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_crossing4.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_1550.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_1550.gds index dfe0cc8c..a120b683 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_1550.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_1550.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_adiabatic.gds b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_adiabatic.gds index 09e0379d..2dd53d35 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_adiabatic.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ebeam_y_adiabatic.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/ring_single_dut_9c01015b.gds b/ubcpdk/tests/test_components.gds/gds_ref/ring_single_dut_9c01015b.gds index b92802cb..ae625885 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/ring_single_dut_9c01015b.gds and b/ubcpdk/tests/test_components.gds/gds_ref/ring_single_dut_9c01015b.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/rotate_f258530e.gds b/ubcpdk/tests/test_components.gds/gds_ref/rotate_f258530e.gds index aa1e793c..c40163fd 100644 Binary files a/ubcpdk/tests/test_components.gds/gds_ref/rotate_f258530e.gds and b/ubcpdk/tests/test_components.gds/gds_ref/rotate_f258530e.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_0714f57c.gds b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_0714f57c.gds new file mode 100644 index 00000000..0440ab7c Binary files /dev/null and b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_0714f57c.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_74b4847f.gds b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_74b4847f.gds new file mode 100644 index 00000000..d149b43d Binary files /dev/null and b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_74b4847f.gds differ diff --git a/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_83238d66.gds b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_83238d66.gds new file mode 100644 index 00000000..185ed324 Binary files /dev/null and b/ubcpdk/tests/test_components.gds/gds_ref/straight_87bde41b_strai_83238d66.gds differ diff --git a/ubcpdk/tests/test_components/test_pdk_settings_add_fiber_array_.yml b/ubcpdk/tests/test_components/test_pdk_settings_add_fiber_array_.yml index ceb3c73a..c5f3ff13 100644 --- a/ubcpdk/tests/test_components/test_pdk_settings_add_fiber_array_.yml +++ b/ubcpdk/tests/test_components/test_pdk_settings_add_fiber_array_.yml @@ -4,7 +4,8 @@ settings: changed: bend: decorator: - function: add_pins + - function: add_bbox_siepic + - function: add_pins_siepic function: bend_euler component: function: straight @@ -12,7 +13,10 @@ settings: grating_coupler: decorator: - - function: add_ports + - function: remove_pins - function: auto_rename_ports + - function: add_pins_siepic_of_add_bbox_siepic + padding: -0.001 - angle: 180 function: rotate function: import_gds @@ -101,7 +105,8 @@ settings: full: bend: decorator: - function: add_pins + - function: add_bbox_siepic + - function: add_pins_siepic function: bend_euler component: function: straight @@ -116,7 +121,10 @@ settings: grating_coupler: decorator: - - function: add_ports + - function: remove_pins - function: auto_rename_ports + - function: add_pins_siepic_of_add_bbox_siepic + padding: -0.001 - angle: 180 function: rotate function: import_gds @@ -138,7 +146,7 @@ settings: info: {} info_version: 2 module: gdsfactory.routing.add_fiber_array - name: straight_87bde41b_strai_326a6368 + name: straight_87bde41b_strai_c1713dff default: component: function: straight @@ -150,7 +158,10 @@ settings: grating_coupler: decorator: - - function: add_ports + - function: remove_pins - function: auto_rename_ports + - function: add_pins_siepic_of_add_bbox_siepic + padding: -0.001 - angle: 180 function: rotate function: import_gds @@ -171,7 +182,10 @@ settings: grating_coupler: decorator: - - function: add_ports + - function: remove_pins - function: auto_rename_ports + - function: add_pins_siepic_of_add_bbox_siepic + padding: -0.001 - angle: 180 function: rotate function: import_gds @@ -185,5 +199,5 @@ settings: info: {} info_version: 2 module: ubcpdk.components.add_fiber_array - name: straight_87bde41b_strai_f2d83180 + name: straight_87bde41b_strai_83238d66 version: 0.0.1 diff --git a/ubcpdk/tests/test_components/test_pdk_settings_bend_euler_.yml b/ubcpdk/tests/test_components/test_pdk_settings_bend_euler_.yml new file mode 100644 index 00000000..19e365cc --- /dev/null +++ b/ubcpdk/tests/test_components/test_pdk_settings_bend_euler_.yml @@ -0,0 +1,37 @@ +settings: + changed: + decorator: + - function: add_bbox_siepic + - function: add_pins_siepic + child: null + default: + angle: 90 + cross_section: + function: cross_section + direction: ccw + npoints: 720 + p: 0.5 + with_arc_floorplan: true + with_cladding_box: true + full: + angle: 90 + cross_section: + function: cross_section + decorator: + - function: add_bbox_siepic + - function: add_pins_siepic + direction: ccw + npoints: 720 + p: 0.5 + with_arc_floorplan: true + with_cladding_box: true + function_name: bend_euler + info: + dy: 10.0 + length: 16.637 + radius: 10.0 + radius_min: 7.061 + info_version: 2 + module: gdsfactory.components.bend_euler + name: bend_euler_92fd2590 +version: 0.0.1