import gdsfactory as gf

c = gf.Component()
dummy = gf.components.nxn(north=2, south=2, west=2, east=2)
sides = ["north", "south", "east", "west"]
d = 100
positions = [(0, 0), (d, 0), (d, d), (0, d)]

for pos, side in zip(positions, sides):
    dummy_ref = c << dummy
    dummy_ref.move(pos)
    routes, ports = gf.routing.route_ports_to_side(
        component=c, side=side, ports=dummy_ref.ports, cross_section="strip"
    )

    for i, p in enumerate(ports):
        c.add_port(name=f"{side[0]}{i}", port=p)

c.plot()