Skip to content

Latest commit

 

History

History
3833 lines (2041 loc) · 85.8 KB

components.rst

File metadata and controls

3833 lines (2041 loc) · 85.8 KB

Generic PDK

Parametric Cells for the Generic PDK.

Consider them a foundation from which you can draw inspiration. Feel free to modify their cross-sections and layers to tailor a unique PDK suited for any foundry of your choice.

By doing so, you'll possess a versatile, retargetable PDK, empowering you to design your circuits with speed and flexibility.

C

.. autofunction:: gdsfactory.components.C

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.C(width=1.0, size=[10.0, 20.0], layer='WG')
  c.plot()



L

.. autofunction:: gdsfactory.components.L

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.L(width=1, size=[10, 20], layer='MTOP', port_type='electrical')
  c.plot()



add_fiber_array_optical_south_electrical_north

.. autofunction:: gdsfactory.components.add_fiber_array_optical_south_electrical_north

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_fiber_array_optical_south_electrical_north(with_loopback=True, pad_spacing=100.0, fiber_spacing=127.0, pad_gc_spacing=250.0, electrical_port_orientation=90, xs_metal='xs_metal_routing')
  c.plot()



add_fiducials

.. autofunction:: gdsfactory.components.add_fiducials

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_fiducials(gap=50, left='cross', right='cross', offset=[0, 0])
  c.plot()



add_fiducials_offsets

.. autofunction:: gdsfactory.components.add_fiducials_offsets

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_fiducials_offsets(fiducial='cross', offsets=[[0, 100], [0, -100]])
  c.plot()



add_frame

.. autofunction:: gdsfactory.components.add_frame

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_frame(width=10.0, spacing=10.0, layer='WG')
  c.plot()



add_grating_couplers

.. autofunction:: gdsfactory.components.add_grating_couplers

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_grating_couplers(gc_port_name='o1')
  c.plot()



add_grating_couplers_fiber_array

.. autofunction:: gdsfactory.components.add_grating_couplers_fiber_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_grating_couplers_fiber_array(grating_separation=127.0, gc_port_name='o1', gc_rotation=-90, straight_separation=5.0, with_loopback=False, cross_section='xs_sc', loopback_yspacing=4.0)
  c.plot()



add_grating_couplers_with_loopback_fiber_array

.. autofunction:: gdsfactory.components.add_grating_couplers_with_loopback_fiber_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_grating_couplers_with_loopback_fiber_array(grating_separation=127.0, gc_port_name='o1', gc_rotation=-90, straight_separation=5.0, with_loopback=True, cross_section='xs_sc', loopback_yspacing=4.0)
  c.plot()



add_grating_couplers_with_loopback_fiber_single

.. autofunction:: gdsfactory.components.add_grating_couplers_with_loopback_fiber_single

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_grating_couplers_with_loopback_fiber_single(component='spiral_inner_io_fiber_single', gc_port_name='o1', with_loopback=True, loopback_xspacing=5.0, rotation=90)
  c.plot()



add_trenches

.. autofunction:: gdsfactory.components.add_trenches

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_trenches(cross_section='xs_rc_with_trenches', top=True, bot=True, right=False, left=False)
  c.plot()



add_trenches90

.. autofunction:: gdsfactory.components.add_trenches90

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.add_trenches90(cross_section='xs_rc_with_trenches', top=False, bot=True, right=True, left=False)
  c.plot()



align_wafer

.. autofunction:: gdsfactory.components.align_wafer

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.align_wafer(width=10.0, spacing=10.0, cross_length=80.0, layer='WG', square_corner='bottom_left')
  c.plot()



array

.. autofunction:: gdsfactory.components.array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.array(component='pad', spacing=[150.0, 150.0], columns=6, rows=1, add_ports=True)
  c.plot()



array_with_fanout

.. autofunction:: gdsfactory.components.array_with_fanout

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.array_with_fanout(component='pad', columns=3, pitch=150.0, waveguide_pitch=10.0, start_straight_length=5.0, end_straight_length=40.0, component_port_name='e4', bend='bend_euler', cross_section='xs_sc')
  c.plot()



array_with_fanout_2d

.. autofunction:: gdsfactory.components.array_with_fanout_2d

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.array_with_fanout_2d(pitch=150.0, columns=3, rows=2)
  c.plot()



array_with_via

.. autofunction:: gdsfactory.components.array_with_via

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.array_with_via(columns=3, spacing=150.0, via_spacing=10.0, straight_length=60.0, via_stack_dy=0, port_orientation=180)
  c.plot()



array_with_via_2d

.. autofunction:: gdsfactory.components.array_with_via_2d

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.array_with_via_2d(spacing=[150.0, 150.0], columns=3, rows=2)
  c.plot()



awg

.. autofunction:: gdsfactory.components.awg

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.awg(arms=10, outputs=3, fpr_spacing=50.0)
  c.plot()



bbox

.. autofunction:: gdsfactory.components.bbox

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.bbox(bbox=[[-1.0, -1.0], [3.0, 4.0]], layer=[1, 0], top=0, bottom=0, left=0, right=0)
  c.plot()



bend_circular

.. autofunction:: gdsfactory.components.bend_circular

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.bend_circular(angle=90.0, cross_section='xs_sc')
  c.plot()



bend_circular_heater

.. autofunction:: gdsfactory.components.bend_circular_heater

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.bend_circular_heater(angle=90, heater_to_wg_distance=1.2, heater_width=0.5, layer_heater='HEATER', cross_section='xs_sc')
  c.plot()



bend_euler

.. autofunction:: gdsfactory.components.bend_euler

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.bend_euler(angle=90.0, p=0.5, with_arc_floorplan=True, direction='ccw', cross_section='xs_sc')
  c.plot()



bend_euler_s

.. autofunction:: gdsfactory.components.bend_euler_s

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.bend_euler_s()
  c.plot()



bend_euler_trenches

.. autofunction:: gdsfactory.components.bend_euler_trenches

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.bend_euler_trenches(cross_section='xs_rc_with_trenches', top=False, bot=True, right=True, left=False)
  c.plot()



bend_s

.. autofunction:: gdsfactory.components.bend_s

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.bend_s(size=[11.0, 1.8], npoints=99, cross_section='xs_sc')
  c.plot()



bend_straight_bend

.. autofunction:: gdsfactory.components.bend_straight_bend

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.bend_straight_bend(straight_length=10.0, angle=90, p=0.5, with_arc_floorplan=True, npoints=720, direction='ccw')
  c.plot()



bezier

.. autofunction:: gdsfactory.components.bezier

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.bezier(control_points=[[0.0, 0.0], [5.0, 0.0], [5.0, 1.8], [10.0, 1.8]], npoints=201, with_manhattan_facing_angles=True, cross_section='xs_sc')
  c.plot()



cavity

.. autofunction:: gdsfactory.components.cavity

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cavity(coupler='coupler', length=0.1, gap=0.2)
  c.plot()



cdc

.. autofunction:: gdsfactory.components.cdc

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cdc(length=30.0, gap=0.5, period=0.22, dc=0.5, dx=10.0, dy=1.8, width_top=2.0, width_bot=0.75, fins=False, fin_size=[0.2, 0.05])
  c.plot()



cdsem_all

.. autofunction:: gdsfactory.components.cdsem_all

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cdsem_all(widths=[0.4, 0.45, 0.5, 0.6, 0.8, 1.0], dense_lines_width=0.3, dense_lines_width_difference=0.02, dense_lines_gap=0.3, dense_lines_labels=['DL', 'DM', 'DH'], straight='straight', bend90='bend_circular', cross_section='xs_sc')
  c.plot()



cdsem_bend180

.. autofunction:: gdsfactory.components.cdsem_bend180

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cdsem_bend180(width=0.5, radius=10.0, wg_length=420.0, straight='straight', bend90='bend_circular', cross_section='xs_sc')
  c.plot()



cdsem_coupler

.. autofunction:: gdsfactory.components.cdsem_coupler

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cdsem_coupler(length=420.0, gaps=[0.15, 0.2, 0.25], cross_section='xs_sc', spacing=7.0)
  c.plot()



cdsem_straight

.. autofunction:: gdsfactory.components.cdsem_straight

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cdsem_straight(widths=[0.4, 0.45, 0.5, 0.6, 0.8, 1.0], length=420.0, cross_section='xs_sc', spacing=7.0)
  c.plot()



cdsem_straight_density

.. autofunction:: gdsfactory.components.cdsem_straight_density

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cdsem_straight_density(widths=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], gaps=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3], length=420.0, label='', cross_section='xs_sc')
  c.plot()



circle

.. autofunction:: gdsfactory.components.circle

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.circle(radius=10.0, angle_resolution=2.5, layer='WG')
  c.plot()



coh_rx_dual_pol

.. autofunction:: gdsfactory.components.coh_rx_dual_pol

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coh_rx_dual_pol(cross_section='xs_sc', lo_splitter='mmi1x2', single_pol_rx_spacing=50.0, splitter_coh_rx_spacing=40.0)
  c.plot()



coh_rx_single_pol

.. autofunction:: gdsfactory.components.coh_rx_single_pol

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coh_rx_single_pol(bend='bend_euler', cross_section='xs_sc', det_spacing=[60.0, 50.0], with_pads=True, pad_det_spacing=80.0, in_wg_length=20.0)
  c.plot()



coh_tx_dual_pol

.. autofunction:: gdsfactory.components.coh_tx_dual_pol

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coh_tx_dual_pol(splitter='mmi1x2', spol_coh_tx='coh_tx_single_pol', yspacing=10.0, xspacing=40.0, cross_section='xs_sc')
  c.plot()



coh_tx_single_pol

.. autofunction:: gdsfactory.components.coh_tx_single_pol

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coh_tx_single_pol(balanced_phase_shifters=False, mzm_y_spacing=50.0, phase_shifter='straight_pin', phase_shifter_length=100.0, mzm_ps_spacing=40.0, splitter='mmi1x2', mzm_length=200.0, with_pads=False, xspacing=40.0, pad_array='pad_array', cross_section='xs_sc')
  c.plot()



compass

.. autofunction:: gdsfactory.components.compass

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.compass(size=[4.0, 2.0], layer='WG', port_type='electrical', port_inclusion=0.0, port_orientations=[180, 90, 0, -90])
  c.plot()



compensation_path

.. autofunction:: gdsfactory.components.compensation_path

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.compensation_path(direction='top', cross_section='xs_sc')
  c.plot()



component_lattice

.. autofunction:: gdsfactory.components.component_lattice



component_lattice_generic

.. autofunction:: gdsfactory.components.component_lattice_generic

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.component_lattice_generic()
  c.plot()



component_sequence

.. autofunction:: gdsfactory.components.component_sequence



copy_layers

.. autofunction:: gdsfactory.components.copy_layers

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.copy_layers(layers=[[1, 0], [2, 0]])
  c.plot()



coupler

.. autofunction:: gdsfactory.components.coupler

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler(gap=0.236, length=20.0, dy=4.0, dx=10.0, cross_section='xs_sc')
  c.plot()



coupler90

.. autofunction:: gdsfactory.components.coupler90

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler90(gap=0.2, radius=10.0, cross_section='xs_sc')
  c.plot()



coupler90bend

.. autofunction:: gdsfactory.components.coupler90bend

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler90bend(radius=10.0, gap=0.2, cross_section_inner='xs_sc', cross_section_outer='xs_sc')
  c.plot()



coupler90circular

.. autofunction:: gdsfactory.components.coupler90circular

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler90circular(gap=0.2, radius=10.0, cross_section='xs_sc')
  c.plot()



coupler_adiabatic

.. autofunction:: gdsfactory.components.coupler_adiabatic

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_adiabatic(length1=20.0, length2=50.0, length3=30.0, wg_sep=1.0, input_wg_sep=3.0, output_wg_sep=3.0, dw=0.1, cross_section='xs_sc')
  c.plot()



coupler_asymmetric

.. autofunction:: gdsfactory.components.coupler_asymmetric

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_asymmetric(gap=0.234, dy=2.5, dx=10.0, cross_section='xs_sc_no_pins')
  c.plot()



coupler_bend

.. autofunction:: gdsfactory.components.coupler_bend

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_bend(radius=10.0, coupler_gap=0.2, coupling_angle_coverage=120.0, cross_section_inner='xs_sc', cross_section_outer='xs_sc')
  c.plot()



coupler_bent

.. autofunction:: gdsfactory.components.coupler_bent

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_bent(gap=0.2, radius=26, length=8.6, width1=0.4, width2=0.4, length_straight=10, cross_section='xs_sc')
  c.plot()



coupler_broadband

.. autofunction:: gdsfactory.components.coupler_broadband

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_broadband(w_sc=0.5, gap_sc=0.2, w_top=0.6, gap_pc=0.3, legnth_taper=1.0, length_coupler_straight=12.4, lenght_coupler_big_gap=4.7, cross_section='xs_sc', radius=10.0)
  c.plot()



coupler_full

.. autofunction:: gdsfactory.components.coupler_full

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_full(coupling_length=40.0, dx=10.0, dy=4.8, gap=0.5, dw=0.1, cross_section='xs_sc')
  c.plot()



coupler_ring

.. autofunction:: gdsfactory.components.coupler_ring

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_ring(gap=0.2, radius=5.0, length_x=4.0, cross_section='xs_sc', length_extension=3)
  c.plot()



coupler_ring_point

.. autofunction:: gdsfactory.components.coupler_ring_point

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_ring_point()
  c.plot()



coupler_straight

.. autofunction:: gdsfactory.components.coupler_straight

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_straight(length=10.0, gap=0.27, cross_section='xs_sc_no_pins')
  c.plot()



coupler_straight_asymmetric

.. autofunction:: gdsfactory.components.coupler_straight_asymmetric

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_straight_asymmetric(length=10.0, gap=0.27, width_top=0.5, width_bot=1, cross_section='xs_sc')
  c.plot()



coupler_symmetric

.. autofunction:: gdsfactory.components.coupler_symmetric

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_symmetric(gap=0.234, dy=4.0, dx=10.0, cross_section='xs_sc_no_pins')
  c.plot()



coupler_trenches

.. autofunction:: gdsfactory.components.coupler_trenches

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.coupler_trenches(cross_section='xs_rc_with_trenches', top=True, bot=True, right=False, left=False)
  c.plot()



cross

.. autofunction:: gdsfactory.components.cross

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cross(length=10.0, width=3.0, layer='WG')
  c.plot()



crossing

.. autofunction:: gdsfactory.components.crossing

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.crossing(cross_section='xs_sc')
  c.plot()



crossing45

.. autofunction:: gdsfactory.components.crossing45

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.crossing45(port_spacing=40.0, alpha=0.08, npoints=101, cross_section='xs_sc', cross_section_bends='xs_sc_no_pins')
  c.plot()



crossing_arm

.. autofunction:: gdsfactory.components.crossing_arm

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.crossing_arm(r1=3.0, r2=1.1, w=1.2, L=3.4, layer_slab='SLAB150', cross_section='xs_sc')
  c.plot()



crossing_etched

.. autofunction:: gdsfactory.components.crossing_etched

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.crossing_etched(width=0.5, r1=3.0, r2=1.1, w=1.2, L=3.4, layer_wg='WG', layer_slab='SLAB150')
  c.plot()



crossing_from_taper

.. autofunction:: gdsfactory.components.crossing_from_taper

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.crossing_from_taper()
  c.plot()



cutback_2x2

.. autofunction:: gdsfactory.components.cutback_2x2

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cutback_2x2(cols=4, rows=5, port1='o1', port2='o2', port3='o3', port4='o4', mirror=False, cross_section='xs_sc')
  c.plot()



cutback_bend

.. autofunction:: gdsfactory.components.cutback_bend

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cutback_bend(straight_length=5.0, rows=6, cols=5)
  c.plot()



cutback_bend180

.. autofunction:: gdsfactory.components.cutback_bend180

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cutback_bend180(straight_length=5.0, rows=6, cols=6, spacing=3)
  c.plot()



cutback_bend180circular

.. autofunction:: gdsfactory.components.cutback_bend180circular

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cutback_bend180circular(straight_length=5.0, rows=6, cols=6, spacing=3)
  c.plot()



cutback_bend90

.. autofunction:: gdsfactory.components.cutback_bend90

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cutback_bend90(straight_length=5.0, rows=6, cols=6, spacing=5)
  c.plot()



cutback_bend90circular

.. autofunction:: gdsfactory.components.cutback_bend90circular

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cutback_bend90circular(straight_length=5.0, rows=6, cols=6, spacing=5)
  c.plot()



cutback_component

.. autofunction:: gdsfactory.components.cutback_component

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cutback_component(cols=4, rows=5, port1='o1', port2='o2', mirror=False, mirror1=False, mirror2=False, cross_section='xs_sc')
  c.plot()



cutback_component_mirror

.. autofunction:: gdsfactory.components.cutback_component_mirror

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cutback_component_mirror(cols=4, rows=5, port1='o1', port2='o2', mirror=True, mirror1=False, mirror2=False, cross_section='xs_sc')
  c.plot()



cutback_splitter

.. autofunction:: gdsfactory.components.cutback_splitter

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.cutback_splitter(cols=4, rows=5, port1='o1', port2='o2', port3='o3', mirror=False, cross_section='xs_sc')
  c.plot()



dbr

.. autofunction:: gdsfactory.components.dbr

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.dbr(w1=0.475, w2=0.525, l1=0.159, l2=0.159, n=10, cross_section='xs_sc')
  c.plot()



dbr_tapered

.. autofunction:: gdsfactory.components.dbr_tapered

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.dbr_tapered(length=10.0, period=0.85, dc=0.5, w1=0.4, w2=1.0, taper_length=20.0, fins=False, fin_size=[0.2, 0.05], cross_section='xs_sc')
  c.plot()



delay_snake

.. autofunction:: gdsfactory.components.delay_snake

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.delay_snake(length=1600.0, L0=5.0, n=2, bend='bend_euler', cross_section='xs_sc')
  c.plot()



delay_snake2

.. autofunction:: gdsfactory.components.delay_snake2

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.delay_snake2(length=1600.0, length0=0.0, length2=0.0, n=2, bend180='bend_euler180', cross_section='xs_sc')
  c.plot()



delay_snake3

.. autofunction:: gdsfactory.components.delay_snake3

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.delay_snake3(length=1600.0, length0=0.0, length2=0.0, n=2, cross_section='xs_sc')
  c.plot()



delay_snake_sbend

.. autofunction:: gdsfactory.components.delay_snake_sbend

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.delay_snake_sbend(length=100.0, length1=0.0, length4=0.0, radius=5.0, waveguide_spacing=5.0, bend='bend_euler', sbend='bend_s', sbend_xsize=100.0, cross_section='xs_sc')
  c.plot()



dicing_lane

.. autofunction:: gdsfactory.components.dicing_lane

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.dicing_lane(size=[50, 300], layer_dicing='DICING')
  c.plot()



die

.. autofunction:: gdsfactory.components.die

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.die(size=[10000.0, 10000.0], street_width=100.0, street_length=1000.0, die_name='chip99', text_size=100.0, text_location='SW', layer='FLOORPLAN', bbox_layer='FLOORPLAN', draw_corners=False)
  c.plot()



die_bbox

.. autofunction:: gdsfactory.components.die_bbox

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.die_bbox(street_width=100.0, text_size=100.0, text_anchor='sw', layer='MTOP', padding=10.0)
  c.plot()



die_bbox_frame

.. autofunction:: gdsfactory.components.die_bbox_frame

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.die_bbox_frame(bbox=[[-1.0, -1.0], [3.0, 4.0]], street_width=100.0, street_length=1000.0, text_size=100.0, text_anchor='sw', layer='MTOP', padding=10.0)
  c.plot()



disk

.. autofunction:: gdsfactory.components.disk

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.disk(radius=10.0, gap=0.2, wrap_angle_deg=180.0, parity=1, cross_section='xs_sc')
  c.plot()



disk_heater

.. autofunction:: gdsfactory.components.disk_heater

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.disk_heater(radius=10.0, gap=0.2, wrap_angle_deg=180.0, parity=1, cross_section='xs_sc', heater_layer='HEATER', via_stack='via_stack_heater_mtop', heater_width=5.0, heater_extent=2.0, via_width=10.0, port_orientation=90)
  c.plot()



edge_coupler_array

.. autofunction:: gdsfactory.components.edge_coupler_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.edge_coupler_array(n=5, pitch=127.0, x_reflection=False, text_offset=[10, 20], text_rotation=0, text_mirror=False, angle=0, place_x_by_port=True, space_y_by_port=False, alignment_port='o1')
  c.plot()



edge_coupler_array_with_loopback

.. autofunction:: gdsfactory.components.edge_coupler_array_with_loopback

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.edge_coupler_array_with_loopback(cross_section='xs_sc', radius=30, n=8, pitch=127.0, extension_length=1.0, right_loopback=True, x_reflection=False, text_offset=[0, 0], text_rotation=0, text_mirror=False, angle=0, place_x_by_port=True, space_y_by_port=False, alignment_port='o1')
  c.plot()



edge_coupler_silicon

.. autofunction:: gdsfactory.components.edge_coupler_silicon

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.edge_coupler_silicon(length=100, width1=0.5, width2=0.2, with_two_ports=True, cross_section='xs_sc', port_names=['o1', 'o2'], port_types=['optical', 'optical'])
  c.plot()



ellipse

.. autofunction:: gdsfactory.components.ellipse

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ellipse(radii=[10.0, 5.0], angle_resolution=2.5, layer='WG')
  c.plot()



extend_port

.. autofunction:: gdsfactory.components.extend_port



extend_ports

.. autofunction:: gdsfactory.components.extend_ports

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.extend_ports(length=5.0, port_type='optical', centered=False)
  c.plot()



extend_ports_list

.. autofunction:: gdsfactory.components.extend_ports_list



fiber

.. autofunction:: gdsfactory.components.fiber

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.fiber(core_diameter=10, cladding_diameter=125, layer_core='WG', layer_cladding='WGCLAD')
  c.plot()



fiber_array

.. autofunction:: gdsfactory.components.fiber_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.fiber_array(n=8, pitch=127.0, core_diameter=10, cladding_diameter=125, layer_core='WG', layer_cladding='WGCLAD')
  c.plot()



fiducial_squares

.. autofunction:: gdsfactory.components.fiducial_squares

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.fiducial_squares(layer='WG', size=[5.0, 5.0], offset=0.14)
  c.plot()



ge_detector_straight_si_contacts

.. autofunction:: gdsfactory.components.ge_detector_straight_si_contacts

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ge_detector_straight_si_contacts(length=80.0, via_stack_width=10.0, via_stack_spacing=5.0, via_stack_offset=0.0)
  c.plot()



grating_coupler_array

.. autofunction:: gdsfactory.components.grating_coupler_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_array(pitch=127.0, n=6, port_name='o1', rotation=0, with_loopback=False, cross_section='xs_sc', grating_coupler_spacing=0.0)
  c.plot()



grating_coupler_dual_pol

.. autofunction:: gdsfactory.components.grating_coupler_dual_pol

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_dual_pol(period_x=0.58, period_y=0.58, x_span=11, y_span=11, length_taper=150.0, width_taper=10.0, polarization='dual', wavelength=1.55, base_layer='WG', cross_section='xs_sc')
  c.plot()



grating_coupler_elliptical

.. autofunction:: gdsfactory.components.grating_coupler_elliptical

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_elliptical(polarization='te', taper_length=16.6, taper_angle=40.0, wavelength=1.554, fiber_angle=15.0, grating_line_width=0.343, neff=2.638, nclad=1.443, n_periods=30, big_last_tooth=False, layer_slab='SLAB150', slab_xmin=-1.0, slab_offset=2.0, spiked=True, cross_section='xs_sc')
  c.plot()



grating_coupler_elliptical_arbitrary

.. autofunction:: gdsfactory.components.grating_coupler_elliptical_arbitrary

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_elliptical_arbitrary(gaps=[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1], widths=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], taper_length=16.6, taper_angle=60.0, wavelength=1.554, fiber_angle=15.0, nclad=1.443, layer_slab='SLAB150', taper_to_slab_offset=-3.0, polarization='te', spiked=True, bias_gap=0, cross_section='xs_sc')
  c.plot()



grating_coupler_elliptical_lumerical

.. autofunction:: gdsfactory.components.grating_coupler_elliptical_lumerical

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_elliptical_lumerical(parameters=[-2.429836, 0.1, 0.48007, 0.1, 0.607398, 0.1, 0.449884, 0.1, 0.427412, 0.1, 0.47579, 0.1, 0.502665, 0.100029, 0.510037, 0.1, 0.4944, 0.10796, 0.474006, 0.149727, 0.432728, 0.183953, 0.387202, 0.236018, 0.360322, 0.242618, 0.357704, 0.260664, 0.35261, 0.246682, 0.371749, 0.229208, 0.377696, 0.224653, 0.376544, 0.220418, 0.380476, 0.219236, 0.379887, 0.217004, 0.382917, 0.218278, 0.364132, 0.237291, 0.367683, 0.248651, 0.344151, 0.273357, 0.330623, 0.273504], layer='WG', layer_slab='SLAB150', taper_angle=55, taper_length=12.6, fiber_angle=5, bias_gap=0)
  c.plot()



grating_coupler_elliptical_trenches

.. autofunction:: gdsfactory.components.grating_coupler_elliptical_trenches

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_elliptical_trenches(polarization='te', taper_length=16.6, taper_angle=30.0, trenches_extra_angle=9.0, wavelength=1.53, fiber_angle=15.0, grating_line_width=0.343, neff=2.638, ncladding=1.443, layer_trench='SHALLOW_ETCH', p_start=26, n_periods=30, end_straight_length=0.2, cross_section='xs_sc')
  c.plot()



grating_coupler_elliptical_uniform

.. autofunction:: gdsfactory.components.grating_coupler_elliptical_uniform

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_elliptical_uniform(n_periods=20, period=0.75, fill_factor=0.5)
  c.plot()



grating_coupler_loss_fiber_array

.. autofunction:: gdsfactory.components.grating_coupler_loss_fiber_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_loss_fiber_array(pitch=127.0, port_name='o1', cross_section='xs_sc')
  c.plot()



grating_coupler_loss_fiber_array4

.. autofunction:: gdsfactory.components.grating_coupler_loss_fiber_array4

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_loss_fiber_array4(pitch=127.0)
  c.plot()



grating_coupler_loss_fiber_single

.. autofunction:: gdsfactory.components.grating_coupler_loss_fiber_single

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_loss_fiber_single(cross_section='xs_sc')
  c.plot()



grating_coupler_rectangular

.. autofunction:: gdsfactory.components.grating_coupler_rectangular

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_rectangular(n_periods=20, period=0.75, fill_factor=0.5, width_grating=11.0, length_taper=150.0, polarization='te', wavelength=1.55, slab_xmin=-1.0, slab_offset=1.0, cross_section='xs_sc')
  c.plot()



grating_coupler_rectangular_arbitrary

.. autofunction:: gdsfactory.components.grating_coupler_rectangular_arbitrary

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_rectangular_arbitrary(gaps=[0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2], widths=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], width_grating=11.0, length_taper=150.0, polarization='te', wavelength=1.55, slab_xmin=-1.0, slab_offset=1.0, cross_section='xs_sc')
  c.plot()



grating_coupler_rectangular_arbitrary_slab

.. autofunction:: gdsfactory.components.grating_coupler_rectangular_arbitrary_slab

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_rectangular_arbitrary_slab(gaps=[0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2], widths=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5], width_grating=11.0, length_taper=150.0, polarization='te', wavelength=1.55, layer_slab='SLAB150', slab_offset=2.0, fiber_angle=15, cross_section='xs_sc')
  c.plot()



grating_coupler_tree

.. autofunction:: gdsfactory.components.grating_coupler_tree

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.grating_coupler_tree(n=4, straight_spacing=4.0, with_loopback=False, bend='bend_euler', fanout_length=0.0)
  c.plot()



greek_cross

.. autofunction:: gdsfactory.components.greek_cross

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.greek_cross(length=30, layers=['WG', 'N'], widths=[2.0, 3.0])
  c.plot()



greek_cross_offset_pads

.. autofunction:: gdsfactory.components.greek_cross_offset_pads

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.greek_cross_offset_pads(cross_struct_length=30.0, cross_struct_width=1.0, cross_struct_layers=['WG'], cross_implant_length=30.0, cross_implant_width=2.0, cross_implant_layers=['N'], contact_layers=['WG', 'NPP'], contact_offset=10, contact_buffer=10, pad_width=50)
  c.plot()



greek_cross_with_pads

.. autofunction:: gdsfactory.components.greek_cross_with_pads

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.greek_cross_with_pads(pad_spacing=150.0)
  c.plot()



hexagon

.. autofunction:: gdsfactory.components.hexagon

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.hexagon(sides=6, side_length=10, layer='WG', port_type='placement', snap_to_grid=True)
  c.plot()



hline

.. autofunction:: gdsfactory.components.hline

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.hline(length=10.0, width=0.5, layer='WG', port_type='optical')
  c.plot()



interdigital_capacitor

.. autofunction:: gdsfactory.components.interdigital_capacitor

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.interdigital_capacitor(fingers=4, finger_length=20.0, finger_gap=2.0, thickness=5.0, layer='WG')
  c.plot()



interdigital_capacitor_enclosed

.. autofunction:: gdsfactory.components.interdigital_capacitor_enclosed

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.interdigital_capacitor_enclosed(cpw_dimensions=[10, 6], gap_to_ground=5, gap_layer='DEEPTRENCH', metal_layer='WG')
  c.plot()



litho_calipers

.. autofunction:: gdsfactory.components.litho_calipers

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.litho_calipers(notch_size=[2.0, 5.0], notch_spacing=2.0, num_notches=11, offset_per_notch=0.1, row_spacing=0.0, layer1='WG', layer2='SLAB150')
  c.plot()



litho_ruler

.. autofunction:: gdsfactory.components.litho_ruler

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.litho_ruler(height=2, width=0.5, spacing=2.0, scale=[3, 1, 1, 1, 1, 2, 1, 1, 1, 1], num_marks=21, layer='WG')
  c.plot()



litho_steps

.. autofunction:: gdsfactory.components.litho_steps

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.litho_steps(line_widths=[1.0, 2.0, 4.0, 8.0, 16.0], line_spacing=10.0, height=100.0, layer='WG')
  c.plot()



logo

.. autofunction:: gdsfactory.components.logo

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.logo(text='GDSFACTORY')
  c.plot()



loop_mirror

.. autofunction:: gdsfactory.components.loop_mirror

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.loop_mirror(bend90='bend_euler')
  c.plot()



loss_deembedding_ch12_34

.. autofunction:: gdsfactory.components.loss_deembedding_ch12_34

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.loss_deembedding_ch12_34(pitch=127.0, port_name='o1', cross_section='xs_sc')
  c.plot()



loss_deembedding_ch13_24

.. autofunction:: gdsfactory.components.loss_deembedding_ch13_24

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.loss_deembedding_ch13_24(pitch=127.0, cross_section='xs_sc', port_name='o1')
  c.plot()



loss_deembedding_ch14_23

.. autofunction:: gdsfactory.components.loss_deembedding_ch14_23

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.loss_deembedding_ch14_23(pitch=127.0, cross_section='xs_sc', port_name='o1')
  c.plot()



mmi

.. autofunction:: gdsfactory.components.mmi

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mmi(inputs=1, outputs=4, width_taper=1.0, length_taper=10.0, length_mmi=5.5, width_mmi=5, gap_input_tapers=0.25, gap_output_tapers=0.25, cross_section='xs_sc')
  c.plot()



mmi1x2

.. autofunction:: gdsfactory.components.mmi1x2

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mmi1x2(width_taper=1.0, length_taper=10.0, length_mmi=5.5, width_mmi=2.5, gap_mmi=0.25, cross_section='xs_sc')
  c.plot()



mmi1x2_with_sbend

.. autofunction:: gdsfactory.components.mmi1x2_with_sbend

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mmi1x2_with_sbend(with_sbend=True, cross_section='xs_sc')
  c.plot()



mmi2x2

.. autofunction:: gdsfactory.components.mmi2x2

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mmi2x2(width_taper=1.0, length_taper=10.0, length_mmi=5.5, width_mmi=2.5, gap_mmi=0.25, cross_section='xs_sc')
  c.plot()



mmi2x2_with_sbend

.. autofunction:: gdsfactory.components.mmi2x2_with_sbend

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mmi2x2_with_sbend(with_sbend=True, cross_section='xs_sc')
  c.plot()



mmi_90degree_hybrid

.. autofunction:: gdsfactory.components.mmi_90degree_hybrid

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mmi_90degree_hybrid(width=0.5, width_taper=1.7, length_taper=40.0, length_mmi=175.0, width_mmi=10.0, gap_mmi=0.8, cross_section='xs_sc')
  c.plot()



mode_converter

.. autofunction:: gdsfactory.components.mode_converter

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mode_converter(gap=0.3, length=10, mm_width=1.2, mc_mm_width=1, sm_width=0.5, taper_length=25, cross_section='xs_sc')
  c.plot()



mzi

.. autofunction:: gdsfactory.components.mzi

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzi(delta_length=10.0, length_y=2.0, length_x=0.1, splitter='mmi1x2', with_splitter=True, port_e1_splitter='o2', port_e0_splitter='o3', port_e1_combiner='o2', port_e0_combiner='o3', nbends=2, cross_section='xs_sc', mirror_bot=False, add_optical_ports_arms=False, add_electrical_ports_bot=True)
  c.plot()



mzi1x2_2x2

.. autofunction:: gdsfactory.components.mzi1x2_2x2

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzi1x2_2x2(delta_length=10.0, length_y=2.0, length_x=0.1, splitter='mmi1x2', with_splitter=True, port_e1_splitter='o2', port_e0_splitter='o3', port_e1_combiner='o3', port_e0_combiner='o4', nbends=2, cross_section='xs_sc', mirror_bot=False, add_optical_ports_arms=False, add_electrical_ports_bot=True)
  c.plot()



mzi2x2_2x2_phase_shifter

.. autofunction:: gdsfactory.components.mzi2x2_2x2_phase_shifter

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzi2x2_2x2_phase_shifter(delta_length=10.0, length_y=2.0, length_x=200, straight_x_top='straight_heater_metal', with_splitter=True, port_e1_splitter='o3', port_e0_splitter='o4', port_e1_combiner='o3', port_e0_combiner='o4', nbends=2, cross_section='xs_sc', mirror_bot=False, add_optical_ports_arms=False, add_electrical_ports_bot=True)
  c.plot()



mzi_arm

.. autofunction:: gdsfactory.components.mzi_arm

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzi_arm(length_y_left=0.8, length_y_right=0.8, length_x=0.1)
  c.plot()



mzi_lattice

.. autofunction:: gdsfactory.components.mzi_lattice

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzi_lattice(coupler_lengths=[10.0, 20.0], coupler_gaps=[0.2, 0.3], delta_lengths=[10.0])
  c.plot()



mzi_lattice_mmi

.. autofunction:: gdsfactory.components.mzi_lattice_mmi

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzi_lattice_mmi(coupler_widths=[None, None], coupler_widths_tapers=[1.0, 1.0], coupler_lengths_tapers=[10.0, 10.0], coupler_lengths_mmis=[5.5, 5.5], coupler_widths_mmis=[2.5, 2.5], coupler_gaps_mmis=[0.25, 0.25], taper_functions_mmis=[{'function': 'taper'}, {'function': 'taper'}], cross_sections_mmis=['xs_sc', 'xs_sc'], delta_lengths=[10.0])
  c.plot()



mzi_pads_center

.. autofunction:: gdsfactory.components.mzi_pads_center

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzi_pads_center(length_x=500, length_y=40, mzi_sig_top='top_r_e2', mzi_gnd_top='top_l_e2', mzi_sig_bot='bot_l_e2', mzi_gnd_bot='bot_r_e2', pad_sig_bot='e1_1_1', pad_sig_top='e3_1_3', pad_gnd_bot='e4_1_2', pad_gnd_top='e2_1_2', delta_length=40.0, cross_section='xs_sc', cross_section_metal='xs_metal_routing', pad_spacing='pad_spacing')
  c.plot()



mzi_phase_shifter

.. autofunction:: gdsfactory.components.mzi_phase_shifter

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzi_phase_shifter(delta_length=10.0, length_y=2.0, length_x=200, straight_x_top='straight_heater_metal', splitter='mmi1x2', with_splitter=True, port_e1_splitter='o2', port_e0_splitter='o3', port_e1_combiner='o2', port_e0_combiner='o3', nbends=2, cross_section='xs_sc', mirror_bot=False, add_optical_ports_arms=False, add_electrical_ports_bot=True)
  c.plot()



mzit

.. autofunction:: gdsfactory.components.mzit

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzit(w0=0.5, w1=0.45, w2=0.55, dy=2.0, delta_length=10.0, length=1.0, coupler_length1=5.0, coupler_length2=10.0, coupler_gap1=0.2, coupler_gap2=0.3, taper_length=5.0, cross_section='xs_sc')
  c.plot()



mzit_lattice

.. autofunction:: gdsfactory.components.mzit_lattice

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzit_lattice(coupler_lengths=[10.0, 20.0], coupler_gaps=[0.2, 0.3], delta_lengths=[10.0])
  c.plot()



mzm

.. autofunction:: gdsfactory.components.mzm

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.mzm(length_x=500, length_y=2.0, delta_length=0.0, splitter='mmi1x2', combiner='mmi1x2', with_splitter=True, port_e1_splitter='o2', port_e0_splitter='o3', port_e1_combiner='o2', port_e0_combiner='o3', nbends=2, cross_section='xs_sc', mirror_bot=False)
  c.plot()



nxn

.. autofunction:: gdsfactory.components.nxn

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.nxn(west=1, east=4, north=0, south=0, wg_width=0.5, layer='WG', wg_margin=1.0)
  c.plot()



octagon

.. autofunction:: gdsfactory.components.octagon

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.octagon(sides=8, side_length=10, layer='WG', port_type='placement', snap_to_grid=True)
  c.plot()



optimal_90deg

.. autofunction:: gdsfactory.components.optimal_90deg

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.optimal_90deg(width=100, num_pts=15, length_adjust=1, layer=[1, 0])
  c.plot()



optimal_hairpin

.. autofunction:: gdsfactory.components.optimal_hairpin

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.optimal_hairpin(width=0.2, pitch=0.6, length=10, turn_ratio=4, num_pts=50, layer=[1, 0])
  c.plot()



optimal_step

.. autofunction:: gdsfactory.components.optimal_step

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.optimal_step(start_width=10, end_width=22, num_pts=50, width_tol=0.001, anticrowding_factor=1.2, symmetric=False, layer=[1, 0])
  c.plot()



pack_doe

.. autofunction:: gdsfactory.components.pack_doe

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pack_doe(doe='mmi1x2', do_permutations=False)
  c.plot()



pack_doe_grid

.. autofunction:: gdsfactory.components.pack_doe_grid

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pack_doe_grid(doe='mmi1x2', do_permutations=False, with_text=False)
  c.plot()



pad

.. autofunction:: gdsfactory.components.pad

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pad(size=[100.0, 100.0], layer='MTOP', port_inclusion=0)
  c.plot()



pad_array

.. autofunction:: gdsfactory.components.pad_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pad_array(pad='pad', spacing=[150.0, 150.0], columns=6, rows=1, orientation=270)
  c.plot()



pad_array0

.. autofunction:: gdsfactory.components.pad_array0

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pad_array0(pad='pad', spacing=[150.0, 150.0], columns=1, rows=3, orientation=0)
  c.plot()



pad_array180

.. autofunction:: gdsfactory.components.pad_array180

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pad_array180(pad='pad', spacing=[150.0, 150.0], columns=1, rows=3, orientation=180)
  c.plot()



pad_array270

.. autofunction:: gdsfactory.components.pad_array270

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pad_array270(pad='pad', spacing=[150.0, 150.0], columns=6, rows=1, orientation=270)
  c.plot()



pad_array90

.. autofunction:: gdsfactory.components.pad_array90

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pad_array90(pad='pad', spacing=[150.0, 150.0], columns=6, rows=1, orientation=90)
  c.plot()



pad_gsg_open

.. autofunction:: gdsfactory.components.pad_gsg_open

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pad_gsg_open(size=[22, 7], layer_metal='MTOP', metal_spacing=5.0, short=False, pad_spacing=150)
  c.plot()



pad_gsg_short

.. autofunction:: gdsfactory.components.pad_gsg_short

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pad_gsg_short(size=[22, 7], layer_metal='MTOP', metal_spacing=5.0, short=True, pad_spacing=150)
  c.plot()



pad_rectangular

.. autofunction:: gdsfactory.components.pad_rectangular

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pad_rectangular(size='pad_size', layer='MTOP', port_inclusion=0)
  c.plot()



pads_shorted

.. autofunction:: gdsfactory.components.pads_shorted

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pads_shorted(columns=8, pad_spacing=150.0, layer_metal='MTOP', metal_width=10)
  c.plot()



pixel

.. autofunction:: gdsfactory.components.pixel

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.pixel(size=1.0, layer='WG')
  c.plot()



polarization_splitter_rotator

.. autofunction:: gdsfactory.components.polarization_splitter_rotator

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.polarization_splitter_rotator(width_taper_in=[0.54, 0.69, 0.83], length_taper_in=[4.0, 44.0], width_coupler=[0.9, 0.405], length_coupler=7.0, gap=0.15, width_out=0.54, length_out=14.33, dy=5.0, cross_section='xs_sc')
  c.plot()



qrcode

.. autofunction:: gdsfactory.components.qrcode

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.qrcode(data='mask01', psize=1, layer='WG')
  c.plot()



ramp

.. autofunction:: gdsfactory.components.ramp

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ramp(length=10.0, width1=5.0, width2=8.0, layer='WG')
  c.plot()



rectangle

.. autofunction:: gdsfactory.components.rectangle

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.rectangle(size=[4.0, 2.0], layer='WG', centered=False, port_type='electrical', port_orientations=[180, 90, 0, -90], round_corners_east_west=False, round_corners_north_south=False)
  c.plot()



rectangle_with_slits

.. autofunction:: gdsfactory.components.rectangle_with_slits

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.rectangle_with_slits(size=[100.0, 200.0], layer='WG', layer_slit='SLAB150', centered=False, slit_size=[1.0, 1.0], slit_spacing=[20, 20], slit_enclosure=10)
  c.plot()



rectangles

.. autofunction:: gdsfactory.components.rectangles

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.rectangles(size=[4.0, 2.0], offsets=[0, 1], layers=['WG', 'SLAB150'], centered=True)
  c.plot()



rectangular_ring

.. autofunction:: gdsfactory.components.rectangular_ring

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.rectangular_ring(enclosed_size=[4.0, 2.0], width=0.5, layer='WG', centered=False)
  c.plot()



regular_polygon

.. autofunction:: gdsfactory.components.regular_polygon

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.regular_polygon(sides=6, side_length=10, layer='WG', port_type='placement', snap_to_grid=True)
  c.plot()



resistance_meander

.. autofunction:: gdsfactory.components.resistance_meander

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.resistance_meander(pad_size=[50.0, 50.0], num_squares=1000, width=1.0, res_layer='MTOP', pad_layer='MTOP', gnd_layer='MTOP')
  c.plot()



resistance_sheet

.. autofunction:: gdsfactory.components.resistance_sheet

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.resistance_sheet(width=10, layers=['SLAB90', 'NPP'], layer_offsets=[0, 0.2], pad_pitch=100.0, port_orientation1=180, port_orientation2=0)
  c.plot()



ring

.. autofunction:: gdsfactory.components.ring

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring(radius=10.0, width=0.5, angle_resolution=2.5, layer='WG', angle=360)
  c.plot()



ring_crow

.. autofunction:: gdsfactory.components.ring_crow

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_crow()
  c.plot()



ring_crow_couplers

.. autofunction:: gdsfactory.components.ring_crow_couplers

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_crow_couplers()
  c.plot()



ring_double

.. autofunction:: gdsfactory.components.ring_double

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_double(gap=0.2, radius=10.0, length_x=0.01, length_y=0.01, cross_section='xs_sc')
  c.plot()



ring_double_heater

.. autofunction:: gdsfactory.components.ring_double_heater

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_double_heater(gap=0.2, radius=10.0, length_x=1.0, length_y=0.01, cross_section_heater='xs_heater_metal', cross_section_waveguide_heater='xs_sc_heater_metal', cross_section='xs_sc', via_stack_offset=[1, 0])
  c.plot()



ring_double_pn

.. autofunction:: gdsfactory.components.ring_double_pn

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_double_pn(add_gap=0.3, drop_gap=0.3, radius=5.0, doping_angle=85, doped_heater=True, doped_heater_angle_buffer=10, doped_heater_layer='NPP', doped_heater_width=0.5, doped_heater_waveguide_offset=2.175)
  c.plot()



ring_double_trenches

.. autofunction:: gdsfactory.components.ring_double_trenches

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_double_trenches(cross_section='xs_rc_with_trenches', top=True, bot=True, right=False, left=False)
  c.plot()



ring_section_based

.. autofunction:: gdsfactory.components.ring_section_based

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_section_based(gap=0.3, radius=5.0, add_drop=False, cross_sections_sequence='AB', start_angle=10.0, bus_cross_section='xs_sc', ang_res=0.1)
  c.plot()



ring_single

.. autofunction:: gdsfactory.components.ring_single

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_single(gap=0.2, radius=10.0, length_x=4.0, length_y=0.6, cross_section='xs_sc', pass_cross_section_to_bend=True)
  c.plot()



ring_single_array

.. autofunction:: gdsfactory.components.ring_single_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_single_array(spacing=5.0, cross_section='xs_sc')
  c.plot()



ring_single_bend_coupler

.. autofunction:: gdsfactory.components.ring_single_bend_coupler

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_single_bend_coupler(radius=5.0, gap=0.2, coupling_angle_coverage=180.0, length_x=0.6, length_y=0.6, cross_section_inner='xs_sc', cross_section_outer='xs_sc')
  c.plot()



ring_single_dut

.. autofunction:: gdsfactory.components.ring_single_dut

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_single_dut(gap=0.2, length_x=4, length_y=0, radius=5.0, with_component=True, port_name='o1')
  c.plot()



ring_single_heater

.. autofunction:: gdsfactory.components.ring_single_heater

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_single_heater(gap=0.2, radius=10.0, length_x=4.0, length_y=0.6, cross_section_waveguide_heater='xs_sc_heater_metal', cross_section='xs_sc', via_stack_offset=[0, 0])
  c.plot()



ring_single_pn

.. autofunction:: gdsfactory.components.ring_single_pn

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_single_pn(gap=0.3, radius=5.0, doping_angle=250, doped_heater=True, doped_heater_angle_buffer=10, doped_heater_layer='NPP', doped_heater_width=0.5, doped_heater_waveguide_offset=2.175)
  c.plot()



ring_single_trenches

.. autofunction:: gdsfactory.components.ring_single_trenches

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.ring_single_trenches(cross_section='xs_rc_with_trenches', top=True, bot=True, right=False, left=False)
  c.plot()



seal_ring

.. autofunction:: gdsfactory.components.seal_ring

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.seal_ring(bbox=[[-1.0, -1.0], [3.0, 4.0]], width=10, padding=10.0, with_north=True, with_south=True, with_east=True, with_west=True)
  c.plot()



seal_ring_segmented

.. autofunction:: gdsfactory.components.seal_ring_segmented

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.seal_ring_segmented(bbox=[[-1.0, -1.0], [3.0, 4.0]], length_segment=10, width_segment=3, spacing_segment=2, with_north=True, with_south=True, with_east=True, with_west=True, padding=10.0)
  c.plot()



snspd

.. autofunction:: gdsfactory.components.snspd

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.snspd(wire_width=0.2, wire_pitch=0.6, size=[10, 8], turn_ratio=4, terminals_same_side=False, layer=[1, 0])
  c.plot()



spiral_double

.. autofunction:: gdsfactory.components.spiral_double

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_double(min_bend_radius=10.0, separation=2.0, number_of_loops=3, npoints=1000, cross_section='xs_sc')
  c.plot()



spiral_external_io

.. autofunction:: gdsfactory.components.spiral_external_io

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_external_io(N=6, x_inner_length_cutback=300.0, x_inner_offset=0.0, y_straight_inner_top=0.0, xspacing=3.0, yspacing=3.0, cross_section='xs_sc', with_inner_ports=False, y_straight_outer_offset=0.0, inner_loop_spacing_offset=0.0, mirror_straight=False)
  c.plot()



spiral_inner_io

.. autofunction:: gdsfactory.components.spiral_inner_io

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_inner_io(N=6, x_straight_inner_right=150.0, x_straight_inner_left=50.0, y_straight_inner_top=50.0, y_straight_inner_bottom=10.0, grating_spacing=127.0, waveguide_spacing=3.0, cross_section='xs_sc', asymmetric_cross_section=False)
  c.plot()



spiral_inner_io_fiber_array

.. autofunction:: gdsfactory.components.spiral_inner_io_fiber_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_inner_io_fiber_array(N=6, x_straight_inner_right=150.0, x_straight_inner_left=50.0, y_straight_inner_top=50.0, y_straight_inner_bottom=10.0, grating_spacing=127.0, waveguide_spacing=3.0, length=20000.0, cross_section='xs_sc', cross_section_loopback='xs_sc', asymmetric_cross_section=False)
  c.plot()



spiral_inner_io_fiber_single

.. autofunction:: gdsfactory.components.spiral_inner_io_fiber_single

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_inner_io_fiber_single(cross_section='xs_sc', x_straight_inner_right=40.0, x_straight_inner_left=75.0, y_straight_inner_top=10.0, y_straight_inner_bottom=0.0, grating_spacing=200.0)
  c.plot()



spiral_meander

.. autofunction:: gdsfactory.components.spiral_meander

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_meander(length=1000.0, spacing=2.0, heater_width=2.5, extension_length=15.0, via_stack='via_stack_heater_mtop', heater_taper_length=10.0, taper_length=10, n=3)
  c.plot()



spiral_racetrack

.. autofunction:: gdsfactory.components.spiral_racetrack

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_racetrack(min_radius=5.0, straight_length=20.0, spacings=[2, 2, 3, 3, 2, 2], cross_section='xs_sc', with_inner_ports=False, extra_90_deg_bend=False)
  c.plot()



spiral_racetrack_fixed_length

.. autofunction:: gdsfactory.components.spiral_racetrack_fixed_length

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_racetrack_fixed_length(length=1000, in_out_port_spacing=150, n_straight_sections=8, min_radius=5.0, min_spacing=5.0, cross_section='xs_sc', with_inner_ports=False)
  c.plot()



spiral_racetrack_heater_doped

.. autofunction:: gdsfactory.components.spiral_racetrack_heater_doped

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_racetrack_heater_doped(straight_length=30, spacing=2, num=8, waveguide_cross_section='xs_sc', heater_cross_section='xs_npp')
  c.plot()



spiral_racetrack_heater_metal

.. autofunction:: gdsfactory.components.spiral_racetrack_heater_metal

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.spiral_racetrack_heater_metal(straight_length=30, spacing=2, num=8, waveguide_cross_section='xs_sc', heater_cross_section='xs_heater_metal')
  c.plot()



splitter_chain

.. autofunction:: gdsfactory.components.splitter_chain

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.splitter_chain(columns=3)
  c.plot()



splitter_tree

.. autofunction:: gdsfactory.components.splitter_tree

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.splitter_tree(noutputs=4, spacing=[90.0, 50.0], cross_section='xs_sc')
  c.plot()



staircase

.. autofunction:: gdsfactory.components.staircase

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.staircase(length_v=5.0, length_h=5.0, rows=4)
  c.plot()



straight

.. autofunction:: gdsfactory.components.straight

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight(length=10.0, npoints=2, cross_section='xs_sc')
  c.plot()



straight_array

.. autofunction:: gdsfactory.components.straight_array

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_array(n=4, spacing=4.0, length=10.0, cross_section='xs_sc')
  c.plot()



straight_heater_doped_rib

.. autofunction:: gdsfactory.components.straight_heater_doped_rib

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_heater_doped_rib(length=320.0, nsections=3, via_stack_metal_size=[10.0, 10.0], via_stack_size=[10.0, 10.0], heater_width=2.0, heater_gap=0.8, via_stack_gap=0.0, width=0.5, xoffset_tip1=0.2, xoffset_tip2=0.4)
  c.plot()



straight_heater_doped_strip

.. autofunction:: gdsfactory.components.straight_heater_doped_strip

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_heater_doped_strip(length=320.0, nsections=3, via_stack_metal_size=[10.0, 10.0], via_stack_size=[10.0, 10.0], heater_width=2.0, heater_gap=0.8, via_stack_gap=0.0, width=0.5, xoffset_tip1=0.2, xoffset_tip2=0.4)
  c.plot()



straight_heater_meander

.. autofunction:: gdsfactory.components.straight_heater_meander

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_heater_meander(length=300.0, spacing=2.0, heater_width=2.5, extension_length=15.0, layer_heater='HEATER', via_stack='via_stack_heater_mtop', heater_taper_length=10.0, straight_widths=[0.8, 0.9, 0.8], taper_length=10)
  c.plot()



straight_heater_meander_doped

.. autofunction:: gdsfactory.components.straight_heater_meander_doped

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_heater_meander_doped(length=300.0, spacing=2.0, cross_section='xs_sc', heater_width=1.5, extension_length=15.0, layers_doping=['P', 'PP', 'PPP'], radius=5.0, straight_widths=[0.8, 0.9, 0.8], taper_length=10)
  c.plot()



straight_heater_metal

.. autofunction:: gdsfactory.components.straight_heater_metal

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_heater_metal(length=320.0, length_undercut_spacing=6.0, length_undercut=30.0, length_straight=0.1, length_straight_input=15.0, cross_section='xs_sc', cross_section_heater='xs_heater_metal', cross_section_waveguide_heater='xs_sc_heater_metal', cross_section_heater_undercut='xs_sc_heater_metal_undercut', with_undercut=False, via_stack='via_stack_heater_mtop', heater_taper_length=5.0)
  c.plot()



straight_heater_metal_90_90

.. autofunction:: gdsfactory.components.straight_heater_metal_90_90

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_heater_metal_90_90(length=320.0, length_undercut_spacing=6.0, length_undercut=30.0, length_straight=0.1, length_straight_input=15.0, cross_section='xs_sc', cross_section_heater='xs_heater_metal', cross_section_waveguide_heater='xs_sc_heater_metal', cross_section_heater_undercut='xs_sc_heater_metal_undercut', with_undercut=False, via_stack='via_stack_heater_mtop', port_orientation1=90, port_orientation2=90, heater_taper_length=5.0)
  c.plot()



straight_heater_metal_simple

.. autofunction:: gdsfactory.components.straight_heater_metal_simple

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_heater_metal_simple(length=320.0, cross_section_heater='xs_heater_metal', cross_section_waveguide_heater='xs_sc_heater_metal', via_stack='via_stack_heater_mtop', heater_taper_length=5.0)
  c.plot()



straight_heater_metal_undercut

.. autofunction:: gdsfactory.components.straight_heater_metal_undercut

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_heater_metal_undercut(length=320.0, length_undercut_spacing=6.0, length_undercut=30.0, length_straight=0.1, length_straight_input=15.0, cross_section='xs_sc', cross_section_heater='xs_heater_metal', cross_section_waveguide_heater='xs_sc_heater_metal', cross_section_heater_undercut='xs_sc_heater_metal_undercut', with_undercut=True, via_stack='via_stack_heater_mtop', heater_taper_length=5.0)
  c.plot()



straight_heater_metal_undercut_90_90

.. autofunction:: gdsfactory.components.straight_heater_metal_undercut_90_90

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_heater_metal_undercut_90_90(length=320.0, length_undercut_spacing=6.0, length_undercut=30.0, length_straight=0.1, length_straight_input=15.0, cross_section='xs_sc', cross_section_heater='xs_heater_metal', cross_section_waveguide_heater='xs_sc_heater_metal', cross_section_heater_undercut='xs_sc_heater_metal_undercut', with_undercut=False, via_stack='via_stack_heater_mtop', port_orientation1=90, port_orientation2=90, heater_taper_length=5.0)
  c.plot()



straight_pin

.. autofunction:: gdsfactory.components.straight_pin

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_pin(length=500.0, via_stack_width=10.0, via_stack_spacing=2)
  c.plot()



straight_pin_slot

.. autofunction:: gdsfactory.components.straight_pin_slot

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_pin_slot(length=500.0, via_stack_width=10.0, via_stack_spacing=3.0, via_stack_slab_spacing=2.0)
  c.plot()



straight_pn

.. autofunction:: gdsfactory.components.straight_pn

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_pn(length=2000, via_stack_width=10.0, via_stack_spacing=2)
  c.plot()



straight_rib

.. autofunction:: gdsfactory.components.straight_rib

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_rib(length=10.0, npoints=2)
  c.plot()



straight_rib_tapered

.. autofunction:: gdsfactory.components.straight_rib_tapered

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.straight_rib_tapered(length=5.0, port1='o2', port2='o1', port_type='optical', centered=False)
  c.plot()



switch_tree

.. autofunction:: gdsfactory.components.switch_tree

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.switch_tree(noutputs=4, spacing=[500, 100], cross_section='xs_sc')
  c.plot()



taper

.. autofunction:: gdsfactory.components.taper

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper(length=10.0, width1=0.5, with_two_ports=True, cross_section='xs_sc', port_names=['o1', 'o2'], port_types=['optical', 'optical'])
  c.plot()



taper_adiabatic

.. autofunction:: gdsfactory.components.taper_adiabatic

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_adiabatic(width1=0.5, width2=5.0, length=0, alpha=1, wavelength=1.55, npoints=200, cross_section='xs_sc')
  c.plot()



taper_cross_section

.. autofunction:: gdsfactory.components.taper_cross_section

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_cross_section(cross_section2='xs_rc', length=10, npoints=100, linear=False, width_type='sine')
  c.plot()



taper_cross_section_linear

.. autofunction:: gdsfactory.components.taper_cross_section_linear

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_cross_section_linear(cross_section2='xs_rc', length=10, npoints=2, linear=True, width_type='sine')
  c.plot()



taper_cross_section_parabolic

.. autofunction:: gdsfactory.components.taper_cross_section_parabolic

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_cross_section_parabolic(cross_section2='xs_rc', length=10, npoints=101, linear=False, width_type='parabolic')
  c.plot()



taper_cross_section_sine

.. autofunction:: gdsfactory.components.taper_cross_section_sine

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_cross_section_sine(cross_section2='xs_rc', length=10, npoints=101, linear=False, width_type='sine')
  c.plot()



taper_from_csv

.. autofunction:: gdsfactory.components.taper_from_csv

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_from_csv(cross_section='xs_sc')
  c.plot()



taper_parabolic

.. autofunction:: gdsfactory.components.taper_parabolic

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_parabolic(length=20, width1=0.5, width2=5.0, exp=0.5, npoints=100, layer='WG')
  c.plot()



taper_sc_nc

.. autofunction:: gdsfactory.components.taper_sc_nc

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_sc_nc(length=20.0, width1=0.5, width2=0.15, w_slab1=0.15, w_slab2=1.0, layer_wg='WG', layer_slab='WGN', cross_section='xs_sc')
  c.plot()



taper_strip_to_ridge

.. autofunction:: gdsfactory.components.taper_strip_to_ridge

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_strip_to_ridge(length=10.0, width1=0.5, width2=0.5, w_slab1=0.15, w_slab2=6.0, layer_wg='WG', layer_slab='SLAB90', cross_section='xs_sc')
  c.plot()



taper_strip_to_ridge_trenches

.. autofunction:: gdsfactory.components.taper_strip_to_ridge_trenches

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.taper_strip_to_ridge_trenches(length=10.0, width=0.5, slab_offset=3.0, trench_width=2.0, trench_layer='DEEP_ETCH', layer_wg='WG', trench_offset=0.1)
  c.plot()



terminator

.. autofunction:: gdsfactory.components.terminator

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.terminator(length=50, tapered_width=0.2, doping_layers=['NPP'], doping_offset=1.0)
  c.plot()



text

.. autofunction:: gdsfactory.components.text

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.text(text='abcd', size=10.0, position=[0, 0], justify='left', layer='WG')
  c.plot()



text_freetype

.. autofunction:: gdsfactory.components.text_freetype

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.text_freetype(text='abcd', size=10, justify='left', layer='WG')
  c.plot()



text_lines

.. autofunction:: gdsfactory.components.text_lines

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.text_lines(text=['Chip', '01'], size=0.4, layer='WG')
  c.plot()



text_rectangular

.. autofunction:: gdsfactory.components.text_rectangular

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.text_rectangular(text='abcd', size=10.0, position=[0.0, 0.0], justify='left', layer='WG')
  c.plot()



text_rectangular_multi_layer

.. autofunction:: gdsfactory.components.text_rectangular_multi_layer

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.text_rectangular_multi_layer(text='abcd', layers=['WG', 'M1', 'M2', 'MTOP'])
  c.plot()



triangle

.. autofunction:: gdsfactory.components.triangle

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.triangle(x=10, xtop=0, y=20, ybot=0, layer='WG')
  c.plot()



verniers

.. autofunction:: gdsfactory.components.verniers

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.verniers(widths=[0.1, 0.2, 0.3, 0.4, 0.5], gap=0.1, xsize=100.0, layer_label='TEXT')
  c.plot()



version_stamp

.. autofunction:: gdsfactory.components.version_stamp

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.version_stamp(labels=['demo_label'], with_qr_code=False, layer='WG', pixel_size=1, text_size=10)
  c.plot()



via_chain

.. autofunction:: gdsfactory.components.via_chain

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.via_chain(num_vias=100, cols=10, layers_bot=['M1'], layers_top=['M2'], offsets_top=[0], offsets_bot=[0], via_min_enclosure=1.0, min_metal_spacing=1.0, via_xoffset=0.0)
  c.plot()



via_corner

.. autofunction:: gdsfactory.components.via_corner

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.via_corner(cross_section=[[{'function': 'cross_section', 'settings': {'layer': 'M2', 'width': 10.0, 'port_names': ['e1', 'e2'], 'port_types': ['electrical', 'electrical'], 'radius': None, 'min_length': 5, 'gap': 5}, 'module': 'gdsfactory.cross_section'}, [0, 180]], [{'function': 'cross_section', 'settings': {'layer': 'M3', 'width': 10.0, 'port_names': ['e1', 'e2'], 'port_types': ['electrical', 'electrical'], 'radius': None, 'min_length': 5, 'gap': 5}, 'module': 'gdsfactory.cross_section'}, [90, 270]]], layers_labels=['m2', 'm3'])
  c.plot()



via_cutback

.. autofunction:: gdsfactory.components.via_cutback

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.via_cutback(num_vias=200.0, wire_width=10.0, via_width=5.0, via_spacing=30.0, min_pad_spacing=10.0, pad_size=[100, 100], layer1='HEATER', layer2='M1', via_layer='VIAC', wire_pad_inclusion=2.0)
  c.plot()



via_stack

.. autofunction:: gdsfactory.components.via_stack

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.via_stack(size=[11.0, 11.0], layers=['M1', 'M2', 'MTOP'], correct_size=True, slot_horizontal=False, slot_vertical=False)
  c.plot()



via_stack_corner45

.. autofunction:: gdsfactory.components.via_stack_corner45

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.via_stack_corner45(width=10, layers=['M1', 'M2', 'MTOP'], correct_size=True)
  c.plot()



via_stack_corner45_extended

.. autofunction:: gdsfactory.components.via_stack_corner45_extended

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.via_stack_corner45_extended(width=3, length=10)
  c.plot()



via_stack_from_rules

.. autofunction:: gdsfactory.components.via_stack_from_rules

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.via_stack_from_rules(size=[1.2, 1.2], layers=['M1', 'M2', 'MTOP'], via_min_size=[[0.2, 0.2], [0.2, 0.2]], via_min_gap=[[0.1, 0.1], [0.1, 0.1]], via_min_enclosure=[0.15, 0.25])
  c.plot()



via_stack_slot

.. autofunction:: gdsfactory.components.via_stack_slot

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.via_stack_slot(size=[11.0, 11.0], layers=['M1', 'M2'], layer_offsets=[0, 1.0], enclosure=1.0, ysize=0.5, yspacing=2.0)
  c.plot()



via_stack_with_offset

.. autofunction:: gdsfactory.components.via_stack_with_offset

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.via_stack_with_offset(layers=['PPP', 'M1'], size=[10, 10])
  c.plot()



wafer

.. autofunction:: gdsfactory.components.wafer

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.wafer(cols=[2, 6, 6, 8, 8, 6, 6, 2], die_name_col_row=False)
  c.plot()



wire_corner

.. autofunction:: gdsfactory.components.wire_corner

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.wire_corner(cross_section='xs_metal_routing')
  c.plot()



wire_corner45

.. autofunction:: gdsfactory.components.wire_corner45

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.wire_corner45(cross_section='xs_metal_routing', radius=10, with_corner90_ports=True)
  c.plot()



wire_sbend

.. autofunction:: gdsfactory.components.wire_sbend

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.wire_sbend(dx=20.0, dy=10.0)
  c.plot()



wire_straight

.. autofunction:: gdsfactory.components.wire_straight

.. plot::
  :include-source:

  import gdsfactory as gf

  c = gf.components.wire_straight(length=10.0, npoints=2, cross_section='xs_metal_routing')
  c.plot()