def test_grid(): import gdsfactory as gf components = [gf.components.rectangle(size=(i, i)) for i in range(1, 10)] c = grid(components) difftest(c) return c
def test_facing_ports( data_regression: DataRegressionFixture, check: bool = True, ): dy = 200.0 xs1 = [-500, -300, -100, -90, -80, -55, -35, 200, 210, 240, 500, 650] pitch = 10.0 N = len(xs1) xs2 = [-20 + i * pitch for i in range(N // 2)] xs2 += [400 + i * pitch for i in range(N // 2)] a1 = 90 a2 = a1 + 180 ports1 = [Port(f"top_{i}", (xs1[i], 0), 0.5, a1) for i in range(N)] ports2 = [Port(f"bottom_{i}", (xs2[i], dy), 0.5, a2) for i in range(N)] c = gf.Component("test_facing_ports") routes = get_bundle(ports1, ports2) lengths = {} for i, route in enumerate(routes): c.add(route.references) lengths[i] = route.length if check: data_regression.check(lengths) difftest(c) return c
def test_components(yaml_index: int, data_regression: DataRegressionFixture, check: bool = True) -> None: yaml = yaml_list[yaml_index] c = gf.read.from_yaml(yaml) difftest(c) if check: data_regression.check(c.to_dict())
def test_get_routes_straight(check: bool = True): c = gf.Component("get_routes_straight") pad_array = gf.components.pad_array() c1 = c << pad_array c2 = c << pad_array c2.ymax = -200 routes = get_routes_straight(ports=c1.get_ports_list(), length=200) c.add(routes.references) if check: difftest(c) return c
def test_get_route_auto_widen() -> gf.Component: c = gf.Component("test_get_route_auto_widen") route = gf.routing.get_route_from_waypoints( [(0, 0), (300, 0), (300, 300), (-600, 300), (-600, -300)], cross_section=xs_pin_m1, bend=gf.partial(gf.c.bend_euler, cross_section=xs_pin), taper=taper_pin, radius=30, ) c.add(route.references) difftest(c) return c
def test_get_bundle_u_indirect(data_regression: DataRegressionFixture, angle, check: bool = True, dy=-200): xs1 = [-100, -90, -80, -55, -35] + [200, 210, 240] axis = "X" if angle in [0, 180] else "Y" pitch = 10.0 N = len(xs1) xs2 = [50 + i * pitch for i in range(N)] a1 = angle a2 = a1 + 180 if axis == "X": ports1 = [ Port("top_{}".format(i), (0, xs1[i]), 0.5, a1) for i in range(N) ] ports2 = [ Port("bottom_{}".format(i), (dy, xs2[i]), 0.5, a2) for i in range(N) ] else: ports1 = [ Port("top_{}".format(i), (xs1[i], 0), 0.5, a1) for i in range(N) ] ports2 = [ Port("bottom_{}".format(i), (xs2[i], dy), 0.5, a2) for i in range(N) ] c = gf.Component(f"test_get_bundle_u_indirect_{angle}_{dy}") routes = get_bundle(ports1, ports2, bend=gf.components.bend_circular) lengths = {} for i, route in enumerate(routes): c.add(route.references) lengths[i] = route.length if check: data_regression.check(lengths) difftest(c) return c
def test_get_routes_bend180(): c = gf.Component("get_routes_bend180") pad_array = gf.components.pad_array(orientation=270) c1 = c << pad_array c2 = c << pad_array c2.rotate(90) c2.movex(1000) c2.ymax = -200 routes_bend180 = get_routes_bend180( ports=c2.get_ports_list(), radius=75 / 2, ) c.add(routes_bend180.references) routes = gf.routing.get_bundle( ports1=c1.get_ports_list(), ports2=routes_bend180.ports, ) for route in routes: c.add(route.references) difftest(c) return c
def test_get_bundle_udirect(data_regression: DataRegressionFixture, check: bool = True, dy=200, angle=270): xs1 = [-100, -90, -80, -55, -35, 24, 0] + [200, 210, 240] axis = "X" if angle in [0, 180] else "Y" pitch = 10.0 N = len(xs1) xs2 = [70 + i * pitch for i in range(N)] if axis == "X": ports1 = [Port(f"top_{i}", (0, xs1[i]), 0.5, angle) for i in range(N)] ports2 = [ Port(f"bottom_{i}", (dy, xs2[i]), 0.5, angle) for i in range(N) ] else: ports1 = [Port(f"top_{i}", (xs1[i], 0), 0.5, angle) for i in range(N)] ports2 = [ Port(f"bottom_{i}", (xs2[i], dy), 0.5, angle) for i in range(N) ] c = gf.Component(name="test_get_bundle_udirect") routes = get_bundle(ports1, ports2, bend=gf.components.bend_circular) lengths = {} for i, route in enumerate(routes): c.add(route.references) lengths[i] = route.length if check: data_regression.check(lengths) difftest(c) return c
def test_get_bundle(data_regression: DataRegressionFixture, check: bool = True): xs_top = [-100, -90, -80, 0, 10, 20, 40, 50, 80, 90, 100, 105, 110, 115] pitch = 127.0 N = len(xs_top) xs_bottom = [(i - N / 2) * pitch for i in range(N)] top_ports = [Port(f"top_{i}", (xs_top[i], 0), 0.5, 270) for i in range(N)] bottom_ports = [ Port(f"bottom_{i}", (xs_bottom[i], -400), 0.5, 90) for i in range(N) ] c = gf.Component("test_get_bundle") routes = get_bundle(top_ports, bottom_ports) lengths = {} for i, route in enumerate(routes): c.add(route.references) lengths[i] = route.length if check: data_regression.check(lengths) difftest(c) return c
def test_gds(component_name: str) -> None: """Avoid regressions in GDS geometry shapes and layers.""" component = factory[component_name]() test_name = f"fabc_{component_name}" difftest(component, test_name=test_name, dirpath=dirpath)
@pytest.fixture(params=component_names, scope="function") def component_name(request) -> str: return request.param def test_gds(component_name: str) -> None: """Avoid regressions in GDS geometry shapes and layers.""" component = factory[component_name]() test_name = f"fabc_{component_name}" difftest(component, test_name=test_name, dirpath=dirpath) def test_settings(component_name: str, data_regression: DataRegressionFixture) -> None: """Avoid regressions when exporting settings.""" component = factory[component_name]() data_regression.check(component.to_dict) def test_assert_ports_on_grid(component_name: str): component = factory[component_name]() component.assert_ports_on_grid() if __name__ == "__main__": print(component_names) c = factory[component_names[0]]() difftest(c, test_name=f"fabc_{component_names[0]}")
def test_gds(container_type: str) -> None: """Avoid regressions in GDS geometry shapes and layers.""" c = container_factory[container_type](component=component) difftest(c)
def test_gdsdiff() -> None: c1 = gf.components.straight(length=5.0) c2 = gf.components.straight(length=6.0) c = gdsdiff(c1, c2) difftest(c)
def test_gds(component_name: str) -> None: """Avoid regressions in GDS names, shapes and layers. Runs XOR and computes the area.""" component = factory[component_name]() test_name = f"fabc_{component_name}" difftest(component, test_name=test_name, dirpath=dirpath)
def test_connect_corner(config: str, data_regression: DataRegressionFixture, check: bool = True, N=6) -> Component: d = 10.0 sep = 5.0 c = Component(name=f"test_connect_corner_{config}") if config in ["A", "B"]: a = 100.0 ports_A_TR = [ Port("A_TR_{}".format(i), (d, a / 2 + i * sep), 0.5, 0) for i in range(N) ] ports_A_TL = [ Port("A_TL_{}".format(i), (-d, a / 2 + i * sep), 0.5, 180) for i in range(N) ] ports_A_BR = [ Port("A_BR_{}".format(i), (d, -a / 2 - i * sep), 0.5, 0) for i in range(N) ] ports_A_BL = [ Port("A_BL_{}".format(i), (-d, -a / 2 - i * sep), 0.5, 180) for i in range(N) ] ports_A = [ports_A_TR, ports_A_TL, ports_A_BR, ports_A_BL] ports_B_TR = [ Port("B_TR_{}".format(i), (a / 2 + i * sep, d), 0.5, 90) for i in range(N) ] ports_B_TL = [ Port("B_TL_{}".format(i), (-a / 2 - i * sep, d), 0.5, 90) for i in range(N) ] ports_B_BR = [ Port("B_BR_{}".format(i), (a / 2 + i * sep, -d), 0.5, 270) for i in range(N) ] ports_B_BL = [ Port("B_BL_{}".format(i), (-a / 2 - i * sep, -d), 0.5, 270) for i in range(N) ] ports_B = [ports_B_TR, ports_B_TL, ports_B_BR, ports_B_BL] elif config in ["C", "D"]: a = N * sep + 2 * d ports_A_TR = [ Port("A_TR_{}".format(i), (a, d + i * sep), 0.5, 0) for i in range(N) ] ports_A_TL = [ Port("A_TL_{}".format(i), (-a, d + i * sep), 0.5, 180) for i in range(N) ] ports_A_BR = [ Port("A_BR_{}".format(i), (a, -d - i * sep), 0.5, 0) for i in range(N) ] ports_A_BL = [ Port("A_BL_{}".format(i), (-a, -d - i * sep), 0.5, 180) for i in range(N) ] ports_A = [ports_A_TR, ports_A_TL, ports_A_BR, ports_A_BL] ports_B_TR = [ Port("B_TR_{}".format(i), (d + i * sep, a), 0.5, 90) for i in range(N) ] ports_B_TL = [ Port("B_TL_{}".format(i), (-d - i * sep, a), 0.5, 90) for i in range(N) ] ports_B_BR = [ Port("B_BR_{}".format(i), (d + i * sep, -a), 0.5, 270) for i in range(N) ] ports_B_BL = [ Port("B_BL_{}".format(i), (-d - i * sep, -a), 0.5, 270) for i in range(N) ] ports_B = [ports_B_TR, ports_B_TL, ports_B_BR, ports_B_BL] lengths = {} i = 0 if config in ["A", "C"]: for ports1, ports2 in zip(ports_A, ports_B): routes = get_bundle(ports1, ports2) for route in routes: c.add(route.references) lengths[i] = route.length i += 1 elif config in ["B", "D"]: for ports1, ports2 in zip(ports_A, ports_B): routes = get_bundle(ports2, ports1) for route in routes: c.add(route.references) lengths[i] = route.length i += 1 if check: data_regression.check(lengths) difftest(c) return c
def test_waveguide(): c = gf.components.straight(cross_section=fab_a_metal) difftest(c)
def test_gds(yaml_key: str, data_regression: DataRegressionFixture) -> None: """Avoid regressions in GDS geometry shapes and layers.""" yaml_string = yaml_strings[yaml_key] c = from_yaml(yaml_string) difftest(c)
def test_gds(component: Component) -> None: """Avoid regressions in GDS geometry shapes and layers.""" difftest(component)
def test_sample_route_sides() -> None: """Avoid regressions in GDS geometry shapes and layers.""" c = _sample_route_sides() difftest(c) return c
def test_offset() -> None: c = gf.components.ring() co = offset(c, distance=0.5) difftest(co)
def test_add_loopback() -> Component: c = straight_with_loopback() difftest(c) return c