def test_components_ports( gdspath: Path, num_regression: NumericRegressionFixture ) -> None: c = import_gds(gdspath) add_ports_from_markers_center(c) auto_rename_ports(c) if num_regression: num_regression.check(c.get_ports_array())
def _demo_electrical() -> None: """Demo. See equivalent test in tests/import_gds_markers.py""" gdspath = CONFIG["gdsdir"] / "mzi2x2.gds" c = import_gds(gdspath) add_ports_from_markers_center(c) auto_rename_ports(c) c.show() for p in c.ports.values(): print(p)
def _demo_optical() -> None: """Demo. See equivalent test in tests/import_gds_markers.py""" # c = gf.components.mmi1x2() # for p in c.ports.values(): # print(p) # c.show() gdspath = CONFIG["gdsdir"] / "mmi1x2.gds" c = import_gds(gdspath) add_ports_from_markers_center(c) auto_rename_ports(c)
def bend_s(size: Float2 = (10.0, 2.0), nb_points: int = 99, with_cladding_box: bool = True, cross_section: CrossSectionFactory = strip, **kwargs) -> Component: """S bend with bezier curve stores min_bend_radius property in self.info['min_bend_radius'] min_bend_radius depends on height and length Args: size: in x and y direction nb_points: number of points with_cladding_box: square bounding box to avoid DRC errors cross_section: function kwargs: cross_section settings """ dx, dy = size x = cross_section(**kwargs) width = x.info["width"] layer = x.info["layer"] c = Component() bend = bezier( width=width, control_points=[(0, 0), (dx / 2, 0), (dx / 2, dy), (dx, dy)], npoints=nb_points, layer=layer, ) bend_ref = c << bend c.add_ports(bend_ref.ports) c.copy_child_info(bend) c.info.start_angle = bend.info.start_angle c.info.end_angle = bend.info.end_angle c.info.length = bend.info.length c.info.min_bend_radius = bend.info.min_bend_radius if with_cladding_box and x.info["layers_cladding"]: layers_cladding = x.info["layers_cladding"] cladding_offset = x.info["cladding_offset"] points = get_padding_points( component=c, default=0, bottom=cladding_offset, top=cladding_offset, ) for layer in layers_cladding or []: c.add_polygon(points, layer=layer) auto_rename_ports(c) return c
def test_components_ports( gdspath: Path, data_regression: DataRegressionFixture) -> gf.Component: c = gf.import_gds(gdspath) add_ports_from_markers_center(c) auto_rename_ports(c) data_regression.check(c.to_dict())
from pathlib import Path import pytest from pytest_regressions.data_regression import DataRegressionFixture import gdsfactory as gf from gdsfactory.add_ports import add_ports_from_markers_center from gdsfactory.port import auto_rename_ports # gdspaths = [gf.CONFIG["gdsdir"] / name for name in ["mmi1x2.gds", "mzi2x2.gds"]] gdspaths = [gf.CONFIG["gdsdir"] / name for name in ["mzi2x2.gds"]] @pytest.mark.parametrize("gdspath", gdspaths) def test_components_ports( gdspath: Path, data_regression: DataRegressionFixture) -> gf.Component: c = gf.import_gds(gdspath) add_ports_from_markers_center(c) auto_rename_ports(c) data_regression.check(c.to_dict()) if __name__ == "__main__": c = gf.import_gds(gdspaths[0]) add_ports_from_markers_center(c) auto_rename_ports(c) print(c.ports.keys()) print(c.name)
def array_with_fanout( component: ComponentOrFactory = pad, columns: int = 3, pitch: float = 150.0, waveguide_pitch: float = 10.0, start_straight_length: float = 5.0, end_straight_length: float = 40.0, radius: float = 5.0, component_port_name: str = "e4", bend: ComponentFactory = bend_euler, bend_port_name1: Optional[str] = None, bend_port_name2: Optional[str] = None, cross_section: CrossSectionFactory = strip, **kwargs, ) -> Component: """Returns an array of components in X axis with fanout waveguides facing west Args: component: to replicate. columns: number of components. pitch: for waveguides. waveguide_pitch: for output waveguides. start_straight_length: length of the start of the straight end_straight_length: lenght of the straight at the end radius: bend radius component_port_name: bend: bend_port_name1: bend_port_name2: cross_section: cross_section definition kwargs: cross_section settings """ c = Component() component = component() if callable(component) else component bend = bend(radius=radius, cross_section=cross_section, **kwargs) bend_ports = bend.get_ports_list() bend_ports = sort_ports_x(bend_ports) bend_ports.reverse() bend_port_name1 = bend_port_name1 or bend_ports[0].name bend_port_name2 = bend_port_name2 or bend_ports[1].name for col in range(columns): ref = component.ref() ref.x = col * pitch c.add(ref) ylength = col * waveguide_pitch + start_straight_length xlength = col * pitch + end_straight_length straight_ref = c << straight( length=ylength, cross_section=cross_section, **kwargs) port_s1, port_s2 = straight_ref.get_ports_list() straight_ref.connect(port_s2.name, ref.ports[component_port_name]) bend_ref = c.add_ref(bend) bend_ref.connect(bend_port_name1, straight_ref.ports[port_s1.name]) straightx_ref = c << straight( length=xlength, cross_section=cross_section, **kwargs) straightx_ref.connect(port_s2.name, bend_ref.ports[bend_port_name2]) c.add_port(f"W_{col}", port=straightx_ref.ports[port_s1.name]) auto_rename_ports(c) return c
def auto_rename_ports(self, **kwargs) -> None: auto_rename_ports(self, **kwargs)