[docs]@gf.cell_with_childdefadd_electrical_pads_top(component:ComponentSpec=_wire_long,direction:str="top",spacing:Float2=(0.0,100.0),pad_array:ComponentSpec=pad_array_function,select_ports:Callable=select_ports_electrical,port_names:Strs|None=None,layer:LayerSpec="MTOP",**kwargs,)->Component:"""Returns new component with electrical ports connected to top pad array. Args: component: to route. direction: sets direction of the array (top or right). spacing: component to pad spacing. pad_array: function for pad_array. select_ports: function to select electrical ports. port_names: optional port names. Overrides select_ports. layer: for the routes. Keyword Args: ports: Dict[str, Port] a port dict {port name: port}. prefix: select ports with port name prefix. suffix: select ports with port name suffix. orientation: select ports with orientation in degrees. width: select ports with port width. layers_excluded: List of layers to exclude. port_type: select ports with port type (optical, electrical, vertical_te). clockwise: if True, sort ports clockwise, False: counter-clockwise. .. plot:: :include-source: import gdsfactory as gf c = gf.components.wire_straight(length=200.) cc = gf.routing.add_electrical_pads_top(component=c, spacing=(-150, 30)) cc.plot() """c=Component()component=gf.get_component(component)ref=c<<componentports_electrical=([ref[port_name]forport_nameinport_names]ifport_nameselselist(select_ports(ref.ports,**kwargs).values()))ifdirection=="top":pads=c<<gf.get_component(pad_array,columns=len(ports_electrical),rows=1,orientation=270)elifdirection=="right":pads=c<<gf.get_component(pad_array,columns=1,rows=len(ports_electrical),orientation=270)pads.x=ref.x+spacing[0]pads.ymin=ref.ymax+spacing[1]ports_pads=list(pads.ports.values())ports_pads=gf.routing.sort_ports.sort_ports_x(ports_pads)ports_component=gf.routing.sort_ports.sort_ports_x(ports_electrical)forp1,p2inzip(ports_component,ports_pads):_=c<<route_quad(p1,p2,layer=layer)c.add_ports(ref.ports)# remove electrical portsforportinports_electrical:c.ports.pop(port.name)c.add_ports(pads.ports)c.copy_child_info(component)c.auto_rename_ports(prefix_electrical=f"elec-{component.name}-")returnc
if__name__=="__main__":importgdsfactoryasgf# c = gf.components.straight_heater_metal()# c = gf.components.mzi_phase_shifter_top_heater_metal()# cc = gf.routing.add_electrical_pads_top(component=c, spacing=(-150, 30))c=add_electrical_pads_top()c.show(show_ports=True)