diff --git a/.github/write_components_plot.py b/.github/write_components_plot.py
index 111ec7a..b2dff03 100644
--- a/.github/write_components_plot.py
+++ b/.github/write_components_plot.py
@@ -1,7 +1,7 @@
import inspect
-from cspdk import _cells as cells
-from cspdk.config import PATH
+from cspdk.si220 import _cells as cells
+from cspdk.si220.config import PATH
filepath = PATH.repo / "docs" / "cells.rst"
@@ -15,10 +15,7 @@
f.write(
"""
-Here are the components available in the PDK
-
-
-Cells
+Cells Si220
=============================
"""
)
@@ -43,7 +40,7 @@
{name}
----------------------------------------------------
-.. autofunction:: cspdk.cells.{name}
+.. autofunction:: cspdk.si220.cells.{name}
"""
)
@@ -54,14 +51,14 @@
{name}
----------------------------------------------------
-.. autofunction:: cspdk.cells.{name}
+.. autofunction:: cspdk.si220.cells.{name}
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.{name}({kwargs})
+ c = cspdk.si220.cells.{name}({kwargs})
c.plot()
"""
diff --git a/cspdk/__init__.py b/cspdk/__init__.py
index 4ee87eb..49e0fc1 100644
--- a/cspdk/__init__.py
+++ b/cspdk/__init__.py
@@ -1,42 +1 @@
-from gdsfactory.cross_section import get_cross_sections
-from gdsfactory.get_factories import get_cells
-from gdsfactory.pdk import Pdk
-
-from cspdk import cells, config, tech
-from cspdk.cells import _bend, _straight, _taper
-from cspdk.config import PATH
-from cspdk.models import get_models
-from cspdk.tech import LAYER, LAYER_STACK, LAYER_VIEWS, routing_strategies
-
-_models = get_models()
-_cells = get_cells(cells)
-_cells.update(
- {
- "_straight": _straight,
- "_bend": _bend,
- "_taper": _taper,
- }
-)
-_cross_sections = get_cross_sections(tech)
-PDK = Pdk(
- name="cornerstone",
- cells=_cells,
- cross_sections=_cross_sections,
- layers=dict(LAYER),
- layer_stack=LAYER_STACK,
- layer_views=LAYER_VIEWS,
- models=_models,
- routing_strategies=routing_strategies,
-)
-PDK.activate()
-
-__all__ = [
- "LAYER",
- "LAYER_STACK",
- "LAYER_VIEWS",
- "PATH",
- "cells",
- "config",
- "tech",
-]
__version__ = "0.7.0"
diff --git a/cspdk/si220/__init__.py b/cspdk/si220/__init__.py
new file mode 100644
index 0000000..4e17f47
--- /dev/null
+++ b/cspdk/si220/__init__.py
@@ -0,0 +1,41 @@
+from gdsfactory.cross_section import get_cross_sections
+from gdsfactory.get_factories import get_cells
+from gdsfactory.pdk import Pdk
+
+from cspdk.si220 import cells, config, tech
+from cspdk.si220.cells import _bend, _straight, _taper
+from cspdk.si220.config import PATH
+from cspdk.si220.models import get_models
+from cspdk.si220.tech import LAYER, LAYER_STACK, LAYER_VIEWS, routing_strategies
+
+_models = get_models()
+_cells = get_cells(cells)
+_cells.update(
+ {
+ "_straight": _straight,
+ "_bend": _bend,
+ "_taper": _taper,
+ }
+)
+_cross_sections = get_cross_sections(tech)
+PDK = Pdk(
+ name="cornerstone_si220",
+ cells=_cells,
+ cross_sections=_cross_sections,
+ layers=dict(LAYER),
+ layer_stack=LAYER_STACK,
+ layer_views=LAYER_VIEWS,
+ models=_models,
+ routing_strategies=routing_strategies,
+)
+PDK.activate()
+
+__all__ = [
+ "LAYER",
+ "LAYER_STACK",
+ "LAYER_VIEWS",
+ "PATH",
+ "cells",
+ "config",
+ "tech",
+]
diff --git a/cspdk/cells.py b/cspdk/si220/cells.py
similarity index 78%
rename from cspdk/cells.py
rename to cspdk/si220/cells.py
index 6f073fc..c05d854 100644
--- a/cspdk/cells.py
+++ b/cspdk/si220/cells.py
@@ -4,8 +4,8 @@
import gdsfactory as gf
from gdsfactory.typings import ComponentSpec, CrossSectionSpec, LayerSpec
-from cspdk.config import PATH
-from cspdk.tech import LAYER, xs_nc, xs_no, xs_rc, xs_ro, xs_sc, xs_so
+from cspdk.si220.config import PATH
+from cspdk.si220.tech import LAYER, xs_rc, xs_ro, xs_sc, xs_so
################
# Straights
@@ -95,42 +95,6 @@ def straight_ro(length: float = 10.0, **kwargs) -> gf.Component:
)
-@gf.cell
-def straight_nc(length: float = 10.0, **kwargs) -> gf.Component:
- """Straight waveguide in nitride, c-band.
-
- Args:
- length (float, optional): The length of the waveguide. Defaults to 10.0.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_nc"
- return _straight(
- length=length,
- **kwargs,
- )
-
-
-@gf.cell
-def straight_no(length: float = 10.0, **kwargs) -> gf.Component:
- """Straight waveguide in nitride, o-band.
-
- Args:
- length (float, optional): The length of the waveguide. Defaults to 10.0.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_no"
- return _straight(
- length=length,
- **kwargs,
- )
-
-
################
# Bends
################
@@ -286,50 +250,6 @@ def bend_ro(
)
-@gf.cell
-def bend_nc(
- radius: float = _float(xs_nc.radius), angle: float = 90.0, **kwargs
-) -> gf.Component:
- """An euler bend in nitride, c-band.
-
- Args:
- radius (float, optional): the radius of the bend. Defaults to the PDK's default value for that cross-section.
- angle (float, optional): the angle of the bend. Defaults to 90.0.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_nc"
- return _bend(
- radius=radius,
- angle=angle,
- **kwargs,
- )
-
-
-@gf.cell
-def bend_no(
- radius: float = _float(xs_no.radius), angle: float = 90.0, **kwargs
-) -> gf.Component:
- """An euler bend in nitride, o-band.
-
- Args:
- radius (float, optional): the radius of the bend. Defaults to the PDK's default value for that cross-section.
- angle (float, optional): the angle of the bend. Defaults to 90.0.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_no"
- return _bend(
- radius=radius,
- angle=angle,
- **kwargs,
- )
-
-
################
# Transitions
################
@@ -450,54 +370,6 @@ def taper_ro(
return _taper(length=length, width1=width1, width2=width2, port=port, **kwargs)
-@gf.cell
-def taper_nc(
- length: float = 10.0,
- width1: float = 0.5,
- width2: float | None = None,
- port: gf.Port | None = None,
- **kwargs,
-) -> gf.Component:
- """A width taper in nitride, c-band.
-
- Args:
- length (float, optional): the length of the taper, in um. Defaults to 10.0.
- width1 (float, optional): the width of the taper input, in um. Defaults to 0.5.
- width2 (float | None, optional): the width of the taper output, in um. Defaults to None.
- port (gf.Port | None, optional): if given, starts from the port's width and transitions to width1. Defaults to None.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_nc"
- return _taper(length=length, width1=width1, width2=width2, port=port, **kwargs)
-
-
-@gf.cell
-def taper_no(
- length: float = 10.0,
- width1: float = 0.5,
- width2: float | None = None,
- port: gf.Port | None = None,
- **kwargs,
-) -> gf.Component:
- """A width taper in nitride, o-band.
-
- Args:
- length (float, optional): the length of the taper, in um. Defaults to 10.0.
- width1 (float, optional): the width of the taper input, in um. Defaults to 0.5.
- width2 (float | None, optional): the width of the taper output, in um. Defaults to None.
- port (gf.Port | None, optional): if given, starts from the port's width and transitions to width1. Defaults to None.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_no"
- return _taper(length=length, width1=width1, width2=width2, port=port, **kwargs)
-
-
@gf.cell
def _taper_cross_section(
length: float = 10,
@@ -746,92 +618,6 @@ def mmi2x2_so(**kwargs) -> gf.Component:
)
-################
-# Nitride MMIs oband
-################
-
-
-@gf.cell
-def mmi1x2_no(**kwargs) -> gf.Component:
- """A 1x2 MMI in nitride, o-band.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_no"
- return _mmi1x2(
- width_mmi=12.0,
- length_taper=50.0,
- width_taper=5.5,
- gap_mmi=0.4,
- length_mmi=42.0,
- **kwargs,
- )
-
-
-@gf.cell
-def mmi2x2_no(**kwargs) -> gf.Component:
- """A 2x2 MMI in nitride, o-band.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_no"
- return _mmi2x2(
- width_mmi=12.0,
- length_taper=50.0,
- width_taper=5.5,
- gap_mmi=0.4,
- length_mmi=126.0,
- **kwargs,
- )
-
-
-################
-# Nitride MMIs cband
-################
-
-
-@gf.cell
-def mmi1x2_nc(**kwargs) -> gf.Component:
- """A 1x2 MMI in nitride, c-band.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_nc"
- return _mmi1x2(
- width_mmi=12.0,
- length_taper=50.0,
- width_taper=5.5,
- gap_mmi=0.4,
- length_mmi=64.7,
- **kwargs,
- )
-
-
-@gf.cell
-def mmi2x2_nc(**kwargs) -> gf.Component:
- """A 2x2 MMI in nitride, c-band.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_nc"
- return _mmi2x2(
- width_mmi=12.0,
- length_taper=50.0,
- width_taper=5.5,
- gap_mmi=0.4,
- length_mmi=232.0,
- **kwargs,
- )
-
-
##############################
# Evanescent couplers
##############################
@@ -1010,66 +796,6 @@ def coupler_ro(
)
-@gf.cell
-def coupler_nc(
- gap: float = 0.4,
- length: float = 20.0,
- dx: float = 10.0,
- dy: float = 4.0,
- **kwargs,
-) -> gf.Component:
- """A symmetric coupler in nitride, c-band.
-
- Args:
- gap (float, optional): the coupling gap, in um. Defaults to 0.4.
- length (float, optional): the length of the coupling section, in um. Defaults to 20.0.
- dx (float, optional): the port-to-port horizontal spacing. Defaults to 10.0.
- dy (float, optional): the port-to-port vertical spacing. Defaults to 4.0.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_nc"
- return _coupler(
- gap=gap,
- length=length,
- dx=dx,
- dy=dy,
- **kwargs,
- )
-
-
-@gf.cell
-def coupler_no(
- gap: float = 0.4,
- length: float = 20.0,
- dx: float = 10.0,
- dy: float = 4.0,
- **kwargs,
-) -> gf.Component:
- """A symmetric coupler in nitride, o-band.
-
- Args:
- gap (float, optional): the coupling gap, in um. Defaults to 0.4.
- length (float, optional): the length of the coupling section, in um. Defaults to 20.0.
- dx (float, optional): the port-to-port horizontal spacing. Defaults to 10.0.
- dy (float, optional): the port-to-port vertical spacing. Defaults to 4.0.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_no"
- return _coupler(
- gap=gap,
- length=length,
- dx=dx,
- dy=dy,
- **kwargs,
- )
-
-
##############################
# grating couplers Rectangular
##############################
@@ -1168,42 +894,6 @@ def gc_rectangular_rc() -> gf.Component:
)
-@gf.cell
-def gc_rectangular_nc() -> gf.Component:
- """A rectangular grating coupler in nitride, c-band.
-
- Returns:
- gf.Component: the component
- """
- return _gc_rectangular(
- period=0.66,
- cross_section="xs_nc",
- length_taper=200,
- fiber_angle=20,
- layer_grating=LAYER.NITRIDE_ETCH,
- layer_slab=LAYER.NITRIDE,
- slab_offset=0,
- )
-
-
-@gf.cell
-def gc_rectangular_no() -> gf.Component:
- """A rectangular grating coupler in nitride, o-band.
-
- Returns:
- gf.Component: the component
- """
- return _gc_rectangular(
- period=0.964,
- cross_section="xs_no",
- length_taper=200,
- fiber_angle=20,
- layer_grating=LAYER.NITRIDE_ETCH,
- layer_slab=LAYER.NITRIDE,
- slab_offset=0,
- )
-
-
##############################
# grating couplers elliptical
##############################
@@ -1479,74 +1169,6 @@ def mzi_ro(
)
-@gf.cell
-def mzi_nc(
- delta_length: float = 10.0,
- length_y: float = 2.0,
- length_x: float = 0.1,
- add_electrical_ports_bot: bool = True,
- **kwargs,
-) -> gf.Component:
- """A Mach-Zehnder Interferometer (MZI) in nitride, c-band.
-
- Args:
- delta_length (float, optional): the length differential between the two arms. Defaults to 10.0.
- length_y (float, optional): the common vertical length, in um. Defaults to 2.0.
- length_x (float, optional): the common horizontal length, in um. Defaults to 0.1.
- add_electrical_ports_bot (bool, optional): if true, adds electrical ports to the bottom. Defaults to True.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_nc"
- return _mzi(
- delta_length=delta_length,
- length_y=length_y,
- length_x=length_x,
- add_electrical_ports_bot=add_electrical_ports_bot,
- straight=straight_nc,
- bend=bend_nc,
- combiner=mmi1x2_nc,
- splitter=mmi1x2_nc,
- **kwargs,
- )
-
-
-@gf.cell
-def mzi_no(
- delta_length: float = 10.0,
- length_y: float = 2.0,
- length_x: float = 0.1,
- add_electrical_ports_bot: bool = True,
- **kwargs,
-) -> gf.Component:
- """A Mach-Zehnder Interferometer (MZI) in nitride, o-band.
-
- Args:
- delta_length (float, optional): the length differential between the two arms. Defaults to 10.0.
- length_y (float, optional): the common vertical length, in um. Defaults to 2.0.
- length_x (float, optional): the common horizontal length, in um. Defaults to 0.1.
- add_electrical_ports_bot (bool, optional): if true, adds electrical ports to the bottom. Defaults to True.
-
- Returns:
- gf.Component: the component
- """
- if "cross_section" not in kwargs:
- kwargs["cross_section"] = "xs_no"
- return _mzi(
- delta_length=delta_length,
- length_y=length_y,
- length_x=length_x,
- add_electrical_ports_bot=add_electrical_ports_bot,
- bend=bend_no,
- straight=straight_no,
- combiner=mmi1x2_no,
- splitter=mmi1x2_no,
- **kwargs,
- )
-
-
################
# Packaging
################
@@ -1628,8 +1250,8 @@ def grating_coupler_array(
with_loopback: bool = False,
bend: ComponentSpec = _bend,
grating_coupler_spacing: float = 0.0,
- grating_coupler: ComponentSpec = gc_rectangular_nc,
- cross_section: CrossSectionSpec = "xs_nc",
+ grating_coupler: ComponentSpec = gc_rectangular_sc,
+ cross_section: CrossSectionSpec = "xs_sc",
) -> gf.Component:
"""An array of grating couplers.
@@ -1641,8 +1263,8 @@ def grating_coupler_array(
with_loopback (bool, optional): if True, adds a loopback. Defaults to False.
bend (ComponentSpec, optional): the bend to be used for the loopback. Defaults to _bend.
grating_coupler_spacing (float, optional): the spacing to be used in the loopback. Defaults to 0.0.
- grating_coupler (ComponentSpec, optional): the grating coupler component to use. Defaults to gc_rectangular_nc.
- cross_section (CrossSectionSpec, optional): the cross section to be used for routing in the loopback. Defaults to "xs_nc".
+ grating_coupler (ComponentSpec, optional): the grating coupler component to use.
+ cross_section (CrossSectionSpec, optional): the cross section to be used for routing in the loopback.
Returns:
gf.Component: the component
@@ -1667,8 +1289,8 @@ def _die(
npads: int = 31,
grating_pitch: float = 250.0,
pad_pitch: float = 300.0,
- grating_coupler: ComponentSpec = gc_rectangular_nc,
- cross_section: CrossSectionSpec = "xs_nc",
+ grating_coupler: ComponentSpec = gc_rectangular_sc,
+ cross_section: CrossSectionSpec = "xs_sc",
pad: ComponentSpec = pad,
) -> gf.Component:
c = gf.Component()
@@ -1726,32 +1348,6 @@ def _die(
return c
-@gf.cell
-def die_nc() -> gf.Component:
- """The standard die template for nitride, c-band. This has 24 grating couplers, split evenly between the left and right sides of the chip and 62 electrical pads split between the top and bottom.
-
- Returns:
- gf.Component: the component
- """
- return _die(
- grating_coupler=gc_rectangular_nc,
- cross_section="xs_nc",
- )
-
-
-@gf.cell
-def die_no() -> gf.Component:
- """The standard die template for nitride, o-band. This has 24 grating couplers, split evenly between the left and right sides of the chip and 62 electrical pads split between the top and bottom.
-
- Returns:
- gf.Component: the component
- """
- return _die(
- grating_coupler=gc_rectangular_no,
- cross_section="xs_no",
- )
-
-
@gf.cell
def die_sc() -> gf.Component:
"""The standard die template for strip, c-band. This has 24 grating couplers, split evenly between the left and right sides of the chip and 62 electrical pads split between the top and bottom.
diff --git a/cspdk/config.py b/cspdk/si220/config.py
similarity index 94%
rename from cspdk/config.py
rename to cspdk/si220/config.py
index 0ef3f98..f3f88c7 100644
--- a/cspdk/config.py
+++ b/cspdk/si220/config.py
@@ -7,7 +7,7 @@
cwd = pathlib.Path.cwd()
cwd_config = cwd / "config.yml"
module = pathlib.Path(__file__).parent.absolute()
-repo = module.parent
+repo = module.parent.parent
class Path:
diff --git a/cspdk/gds/CORNERSTONE MPW SOI 220nm GDSII Template.gds b/cspdk/si220/gds/CORNERSTONE MPW SOI 220nm GDSII Template.gds
similarity index 100%
rename from cspdk/gds/CORNERSTONE MPW SOI 220nm GDSII Template.gds
rename to cspdk/si220/gds/CORNERSTONE MPW SOI 220nm GDSII Template.gds
diff --git a/cspdk/gds/Cell0_Institution_Name.gds b/cspdk/si220/gds/Cell0_Institution_Name.gds
similarity index 100%
rename from cspdk/gds/Cell0_Institution_Name.gds
rename to cspdk/si220/gds/Cell0_Institution_Name.gds
diff --git a/cspdk/gds/Cell0_SOI220_Full_1550nm_Packaging_Template.gds b/cspdk/si220/gds/Cell0_SOI220_Full_1550nm_Packaging_Template.gds
similarity index 100%
rename from cspdk/gds/Cell0_SOI220_Full_1550nm_Packaging_Template.gds
rename to cspdk/si220/gds/Cell0_SOI220_Full_1550nm_Packaging_Template.gds
diff --git a/cspdk/gds/Cell0_SOI_Full_Institution_Name.gds b/cspdk/si220/gds/Cell0_SOI_Full_Institution_Name.gds
similarity index 100%
rename from cspdk/gds/Cell0_SOI_Full_Institution_Name.gds
rename to cspdk/si220/gds/Cell0_SOI_Full_Institution_Name.gds
diff --git a/cspdk/gds/Cell0_SOI_Half_Institution_Name.gds b/cspdk/si220/gds/Cell0_SOI_Half_Institution_Name.gds
similarity index 100%
rename from cspdk/gds/Cell0_SOI_Half_Institution_Name.gds
rename to cspdk/si220/gds/Cell0_SOI_Half_Institution_Name.gds
diff --git a/cspdk/gds/Flip_Chip_Bonding_Example.gds b/cspdk/si220/gds/Flip_Chip_Bonding_Example.gds
similarity index 100%
rename from cspdk/gds/Flip_Chip_Bonding_Example.gds
rename to cspdk/si220/gds/Flip_Chip_Bonding_Example.gds
diff --git a/cspdk/gds/Heater.gds b/cspdk/si220/gds/Heater.gds
similarity index 100%
rename from cspdk/gds/Heater.gds
rename to cspdk/si220/gds/Heater.gds
diff --git a/cspdk/gds/Layer_Designations.gds b/cspdk/si220/gds/Layer_Designations.gds
similarity index 100%
rename from cspdk/gds/Layer_Designations.gds
rename to cspdk/si220/gds/Layer_Designations.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_RIB_2x1_MMI.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_2x1_MMI.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_RIB_2x1_MMI.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_2x1_MMI.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_RIB_2x2_MMI.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_2x2_MMI.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_RIB_2x2_MMI.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_2x2_MMI.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_RIB_90_Degree_Bend.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_90_Degree_Bend.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_RIB_90_Degree_Bend.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_90_Degree_Bend.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_RIB_Grating_Coupler.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_Grating_Coupler.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_RIB_Grating_Coupler.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_Grating_Coupler.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_RIB_Waveguide.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_Waveguide.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_RIB_Waveguide.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_Waveguide.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_RIB_Waveguide_Crossing.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_Waveguide_Crossing.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_RIB_Waveguide_Crossing.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_RIB_Waveguide_Crossing.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_STRIP_2x1_MMI.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_2x1_MMI.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_STRIP_2x1_MMI.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_2x1_MMI.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_STRIP_2x2_MMI.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_2x2_MMI.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_STRIP_2x2_MMI.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_2x2_MMI.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_STRIP_90_Degree_Bend.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_90_Degree_Bend.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_STRIP_90_Degree_Bend.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_90_Degree_Bend.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_STRIP_Grating_Coupler.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_Grating_Coupler.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_STRIP_Grating_Coupler.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_Grating_Coupler.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_STRIP_Waveguide.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_Waveguide.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_STRIP_Waveguide.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_Waveguide.gds
diff --git a/cspdk/gds/SOI220nm_1310nm_TE_STRIP_Waveguide_Crossing.gds b/cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_Waveguide_Crossing.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1310nm_TE_STRIP_Waveguide_Crossing.gds
rename to cspdk/si220/gds/SOI220nm_1310nm_TE_STRIP_Waveguide_Crossing.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_RIB_2x1_MMI.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_2x1_MMI.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_RIB_2x1_MMI.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_2x1_MMI.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_RIB_2x2_MMI.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_2x2_MMI.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_RIB_2x2_MMI.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_2x2_MMI.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_RIB_90_Degree_Bend.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_90_Degree_Bend.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_RIB_90_Degree_Bend.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_90_Degree_Bend.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_RIB_Grating_Coupler.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_Grating_Coupler.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_RIB_Grating_Coupler.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_Grating_Coupler.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_RIB_Waveguide.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_Waveguide.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_RIB_Waveguide.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_Waveguide.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_RIB_Waveguide_Crossing.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_Waveguide_Crossing.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_RIB_Waveguide_Crossing.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_RIB_Waveguide_Crossing.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_STRIP_2x1_MMI.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_2x1_MMI.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_STRIP_2x1_MMI.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_2x1_MMI.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_STRIP_2x2_MMI.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_2x2_MMI.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_STRIP_2x2_MMI.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_2x2_MMI.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_STRIP_90_Degree_Bend.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_90_Degree_Bend.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_STRIP_90_Degree_Bend.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_90_Degree_Bend.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_STRIP_Waveguide.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_Waveguide.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_STRIP_Waveguide.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_Waveguide.gds
diff --git a/cspdk/gds/SOI220nm_1550nm_TE_STRIP_Waveguide_Crossing.gds b/cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_Waveguide_Crossing.gds
similarity index 100%
rename from cspdk/gds/SOI220nm_1550nm_TE_STRIP_Waveguide_Crossing.gds
rename to cspdk/si220/gds/SOI220nm_1550nm_TE_STRIP_Waveguide_Crossing.gds
diff --git a/cspdk/si220/import_pdk.py b/cspdk/si220/import_pdk.py
new file mode 100644
index 0000000..2e3ad07
--- /dev/null
+++ b/cspdk/si220/import_pdk.py
@@ -0,0 +1,6 @@
+""" From a list of GDS files, generate a script to import the cells from a pdk """
+
+import gdsfactory as gf
+
+if __name__ == "__main__":
+ print(gf.write_cells.get_import_gds_script("gds", module="cspdk.si220.cells"))
diff --git a/cspdk/klayout/d25/Cornerstone.lyd25 b/cspdk/si220/klayout/d25/Cornerstone.lyd25
similarity index 100%
rename from cspdk/klayout/d25/Cornerstone.lyd25
rename to cspdk/si220/klayout/d25/Cornerstone.lyd25
diff --git a/cspdk/si220/klayout/d25/Cornerstone_si220.lyd25 b/cspdk/si220/klayout/d25/Cornerstone_si220.lyd25
new file mode 100644
index 0000000..2796a20
--- /dev/null
+++ b/cspdk/si220/klayout/d25/Cornerstone_si220.lyd25
@@ -0,0 +1,34 @@
+
+
+
+
+ d25
+
+
+
+ false
+ false
+ 0
+
+ true
+ d25_scripts
+ tools_menu.d25.end
+ dsl
+ d25-dsl-xml
+
+
+core = input(3, 0)
+slab = input(5, 0)
+heater = input(39, 0)
+metal = input(41, 0)
+
+
+
+z(core, zstart: 0.0, zstop: 0.2, name: 'core: si 3/0', )
+z(slab, zstart: 0.0, zstop: 0.1, name: 'slab: si 5/0', )
+z(heater, zstart: 1.1, zstop: 1.8, name: 'heater: TiN 39/0', )
+z(metal, zstart: 1.8, zstop: 2.5, name: 'metal: Aluminum 41/0', )
+
+
+
+
diff --git a/cspdk/klayout/layers.lyp b/cspdk/si220/klayout/layers.lyp
similarity index 81%
rename from cspdk/klayout/layers.lyp
rename to cspdk/si220/klayout/layers.lyp
index 811824a..8f5bfae 100644
--- a/cspdk/klayout/layers.lyp
+++ b/cspdk/si220/klayout/layers.lyp
@@ -68,40 +68,6 @@
GRA 6/0
-
- #ffa500
- #ffa500
- 0
- 0
- I3
-
- true
- true
- false
-
- false
- false
- 0
- NITRIDE 203/0
-
-
-
- #0000ff
- #0000ff
- 0
- 0
- I3
-
- true
- true
- true
- 1
- false
- false
- 0
- NITRIDE_ETCH 204/0
-
-
#ebc634
#ebc634
diff --git a/cspdk/klayout/tech.lyt b/cspdk/si220/klayout/tech.lyt
similarity index 99%
rename from cspdk/klayout/tech.lyt
rename to cspdk/si220/klayout/tech.lyt
index 35c2b1b..79e6616 100644
--- a/cspdk/klayout/tech.lyt
+++ b/cspdk/si220/klayout/tech.lyt
@@ -1,6 +1,6 @@
- Cornerstone
+ Cornerstone_si220
0.001
@@ -156,7 +156,7 @@
HEATER,HEATER,PAD
- PAD='41/0'
HEATER='39/0'
+ PAD='41/0'
diff --git a/cspdk/layers.yaml b/cspdk/si220/layers.yaml
similarity index 80%
rename from cspdk/layers.yaml
rename to cspdk/si220/layers.yaml
index 848c959..ef535ea 100644
--- a/cspdk/layers.yaml
+++ b/cspdk/si220/layers.yaml
@@ -25,18 +25,6 @@ LayerViews:
transparent: true
width: 1
color: "blue"
- NITRIDE:
- layer: [203, 0]
- layer_in_name: true
- color: "orange"
- hatch_pattern: coarsely dotted
- NITRIDE_ETCH:
- layer: [204, 0]
- layer_in_name: true
- hatch_pattern: coarsely dotted
- transparent: true
- width: 1
- color: "blue"
HEATER:
layer: [39, 0]
layer_in_name: true
diff --git a/cspdk/models.py b/cspdk/si220/models.py
similarity index 100%
rename from cspdk/models.py
rename to cspdk/si220/models.py
diff --git a/cspdk/samples/circuit_simulations.py b/cspdk/si220/samples/circuit_simulations_sc.py
similarity index 86%
rename from cspdk/samples/circuit_simulations.py
rename to cspdk/si220/samples/circuit_simulations_sc.py
index 4b53482..4f32dbc 100644
--- a/cspdk/samples/circuit_simulations.py
+++ b/cspdk/si220/samples/circuit_simulations_sc.py
@@ -2,11 +2,10 @@
import matplotlib.pyplot as plt
import sax
-import cspdk
-from cspdk import PDK
+from cspdk.si220 import PDK, cells
if __name__ == "__main__":
- c = cspdk.cells.mzi_sc(delta_length=100)
+ c = cells.mzi_sc(delta_length=100)
c.show()
c.plot_netlist()
netlist = c.get_netlist()
diff --git a/cspdk/samples/circuit_simulations_with_routing.py b/cspdk/si220/samples/circuit_simulations_sc_with_routing.py
similarity index 77%
rename from cspdk/samples/circuit_simulations_with_routing.py
rename to cspdk/si220/samples/circuit_simulations_sc_with_routing.py
index 6f40a05..0231f1c 100644
--- a/cspdk/samples/circuit_simulations_with_routing.py
+++ b/cspdk/si220/samples/circuit_simulations_sc_with_routing.py
@@ -3,15 +3,14 @@
import matplotlib.pyplot as plt
import sax
-import cspdk
-from cspdk import PDK
+from cspdk.si220 import PDK, cells, tech
if __name__ == "__main__":
c = gf.Component()
- mzi1 = c << cspdk.cells.mzi_sc(delta_length=10)
- mzi2 = c << cspdk.cells.mzi_sc(delta_length=100)
+ mzi1 = c << cells.mzi_sc(delta_length=10)
+ mzi2 = c << cells.mzi_sc(delta_length=100)
mzi2.move((200, 200))
- route = cspdk.tech.get_route_sc(mzi1.ports["o2"], mzi2.ports["o1"])
+ route = tech.get_route_sc(mzi1.ports["o2"], mzi2.ports["o1"])
c.add(route.references)
c.add_port(name="o1", port=mzi1.ports["o1"])
c.add_port(name="o2", port=mzi2.ports["o2"])
diff --git a/cspdk/samples/component_from_yaml.py b/cspdk/si220/samples/component_from_yaml_sc.py
similarity index 97%
rename from cspdk/samples/component_from_yaml.py
rename to cspdk/si220/samples/component_from_yaml_sc.py
index ee02e5c..edc8c1f 100644
--- a/cspdk/samples/component_from_yaml.py
+++ b/cspdk/si220/samples/component_from_yaml_sc.py
@@ -1,6 +1,6 @@
sample_pads = """
name: pads
-pdk: cspdk
+pdk: cspdk.si220
instances:
bl:
diff --git a/cspdk/samples/get_route.py b/cspdk/si220/samples/get_route_sc.py
similarity index 67%
rename from cspdk/samples/get_route.py
rename to cspdk/si220/samples/get_route_sc.py
index 0473a92..6343354 100644
--- a/cspdk/samples/get_route.py
+++ b/cspdk/si220/samples/get_route_sc.py
@@ -2,15 +2,15 @@
import gdsfactory as gf
-import cspdk
+from cspdk.si220 import cells, tech
if __name__ == "__main__":
c = gf.Component("sample_connect")
- mmi1 = c << cspdk.cells.mmi1x2_nc()
- mmi2 = c << cspdk.cells.mmi1x2_nc()
+ mmi1 = c << cells.mmi1x2_sc()
+ mmi2 = c << cells.mmi1x2_sc()
mmi2.move((500, 50))
- route = cspdk.tech.get_route_nc(
+ route = tech.get_route_sc(
mmi1.ports["o3"],
mmi2.ports["o1"],
)
diff --git a/cspdk/samples/mode_solver_r.py b/cspdk/si220/samples/mode_solver_r.py
similarity index 100%
rename from cspdk/samples/mode_solver_r.py
rename to cspdk/si220/samples/mode_solver_r.py
diff --git a/cspdk/samples/mode_solver_s.py b/cspdk/si220/samples/mode_solver_s.py
similarity index 100%
rename from cspdk/samples/mode_solver_s.py
rename to cspdk/si220/samples/mode_solver_s.py
diff --git a/cspdk/tech.py b/cspdk/si220/tech.py
similarity index 75%
rename from cspdk/tech.py
rename to cspdk/si220/tech.py
index 9005025..a46271c 100644
--- a/cspdk/tech.py
+++ b/cspdk/si220/tech.py
@@ -9,7 +9,7 @@
from gdsfactory.technology import LayerLevel, LayerMap, LayerStack, LayerViews
from gdsfactory.typings import ConnectivitySpec, Layer
-from cspdk.config import PATH
+from cspdk.si220.config import PATH
nm = 1e-3
@@ -22,8 +22,6 @@ class LayerMapCornerstone(LayerMap):
GRA: Layer = (6, 0)
LBL: Layer = (100, 0)
PAD: Layer = (41, 0)
- NITRIDE: Layer = (203, 0)
- NITRIDE_ETCH: Layer = (204, 0)
# labels for gdsfactory
LABEL_SETTINGS: Layer = (100, 0)
@@ -36,7 +34,6 @@ class LayerMapCornerstone(LayerMap):
def get_layer_stack(
thickness_wg: float = 220 * nm,
thickness_slab: float = 100 * nm,
- thickness_nitride: float = 300 * nm,
zmin_heater: float = 1.1,
thickness_heater: float = 700 * nm,
zmin_metal: float = 1.1,
@@ -48,7 +45,7 @@ def get_layer_stack(
Args:
thickness_wg: waveguide thickness in um.
- thickness_nitride: nitride thickness in um.
+ thickness_slab: slab thickness in um.
zmin_heater: TiN heater.
thickness_heater: TiN thickness.
zmin_metal: metal thickness in um.
@@ -75,24 +72,6 @@ def get_layer_stack(
sidewall_angle=10,
width_to_z=0.5,
),
- nitride=LayerLevel(
- layer=LAYER.NITRIDE,
- thickness=thickness_nitride,
- zmin=0.0,
- material="sin",
- info={"mesh_order": 2},
- sidewall_angle=10,
- width_to_z=0.5,
- ),
- nitride_etch=LayerLevel(
- layer=LAYER.NITRIDE_ETCH,
- thickness=thickness_nitride,
- zmin=0.0,
- material="sin",
- info={"mesh_order": 1},
- sidewall_angle=10,
- width_to_z=0.5,
- ),
heater=LayerLevel(
layer=LAYER.HEATER,
thickness=thickness_heater,
@@ -133,10 +112,6 @@ def get_layer_stack(
radius_min=25,
)
xf_ro = partial(xf_rc, width=0.40)
-
-xf_nc = partial(gf.cross_section.strip, layer=LAYER.NITRIDE, width=1.20, radius=25)
-xf_no = partial(gf.cross_section.strip, layer=LAYER.NITRIDE, width=0.95, radius=25)
-
xf_rc_tip = partial(
gf.cross_section.strip,
sections=(gf.Section(width=0.2, layer="SLAB", name="slab"),),
@@ -168,8 +143,6 @@ def get_layer_stack(
xs_rc = xf_rc()
xs_so = xf_so()
xs_ro = xf_ro()
-xs_nc = xf_nc()
-xs_no = xf_no()
xs_rc_tip = xf_rc_tip()
xs_sc_heater_metal = xf_sc_heater_metal()
@@ -194,20 +167,11 @@ def get_layer_stack(
_settings_ro = dict(
straight="straight_ro", cross_section=xs_ro, bend="bend_ro", taper="taper_ro"
)
-_settings_nc = dict(
- straight="straight_nc", cross_section=xs_nc, bend="bend_nc", taper="taper_nc"
-)
-_settings_no = dict(
- straight="straight_no", cross_section=xs_no, bend="bend_no", taper="taper_no"
-)
-
get_route_sc = partial(gf.routing.get_route, **_settings_sc)
get_route_so = partial(gf.routing.get_route, **_settings_so)
get_route_rc = partial(gf.routing.get_route, **_settings_rc)
get_route_ro = partial(gf.routing.get_route, **_settings_ro)
-get_route_nc = partial(gf.routing.get_route, **_settings_nc)
-get_route_no = partial(gf.routing.get_route, **_settings_no)
get_route_from_steps_sc = partial(
gf.routing.get_route_from_steps,
@@ -225,22 +189,11 @@ def get_layer_stack(
gf.routing.get_route_from_steps,
**_settings_ro,
)
-get_route_from_steps_nc = partial(
- gf.routing.get_route_from_steps,
- **_settings_nc,
-)
-get_route_from_steps_no = partial(
- gf.routing.get_route_from_steps,
- **_settings_no,
-)
-
get_bundle_sc = partial(gf.routing.get_bundle, **_settings_sc)
get_bundle_so = partial(gf.routing.get_bundle, **_settings_so)
get_bundle_rc = partial(gf.routing.get_bundle, **_settings_rc)
get_bundle_ro = partial(gf.routing.get_bundle, **_settings_ro)
-get_bundle_nc = partial(gf.routing.get_bundle, **_settings_nc)
-get_bundle_no = partial(gf.routing.get_bundle, **_settings_no)
get_bundle_from_steps_sc = partial(
gf.routing.get_bundle_from_steps,
@@ -258,14 +211,6 @@ def get_layer_stack(
gf.routing.get_bundle_from_steps,
**_settings_ro,
)
-get_bundle_from_steps_nc = partial(
- gf.routing.get_bundle_from_steps,
- **_settings_nc,
-)
-get_bundle_from_steps_no = partial(
- gf.routing.get_bundle_from_steps,
- **_settings_no,
-)
routing_strategies = dict(
@@ -273,26 +218,18 @@ def get_layer_stack(
get_route_so=get_route_so,
get_route_rc=get_route_rc,
get_route_ro=get_route_ro,
- get_route_nc=get_route_nc,
- get_route_no=get_route_no,
get_route_from_steps_sc=get_route_from_steps_sc,
get_route_from_steps_so=get_route_from_steps_so,
get_route_from_steps_rc=get_route_from_steps_rc,
get_route_from_steps_ro=get_route_from_steps_ro,
- get_route_from_steps_nc=get_route_from_steps_nc,
- get_route_from_steps_no=get_route_from_steps_no,
get_bundle_sc=get_bundle_sc,
get_bundle_so=get_bundle_so,
get_bundle_rc=get_bundle_rc,
get_bundle_ro=get_bundle_ro,
- get_bundle_nc=get_bundle_nc,
- get_bundle_no=get_bundle_no,
get_bundle_from_steps_sc=get_bundle_from_steps_sc,
get_bundle_from_steps_so=get_bundle_from_steps_so,
get_bundle_from_steps_rc=get_bundle_from_steps_rc,
get_bundle_from_steps_ro=get_bundle_from_steps_ro,
- get_bundle_from_steps_nc=get_bundle_from_steps_nc,
- get_bundle_from_steps_no=get_bundle_from_steps_no,
)
@@ -305,7 +242,7 @@ def get_layer_stack(
connectivity = cast(list[ConnectivitySpec], [("HEATER", "HEATER", "PAD")])
t = KLayoutTechnology(
- name="Cornerstone",
+ name="Cornerstone_si220",
layer_map=dict(LAYER),
layer_views=LAYER_VIEWS,
layer_stack=LAYER_STACK,
@@ -315,4 +252,3 @@ def get_layer_stack(
if __name__ == "__main__":
print(xs_rc.sections)
- print(type(LAYER.NITRIDE), LAYER.NITRIDE)
diff --git a/cspdk/sin300/__init__.py b/cspdk/sin300/__init__.py
new file mode 100644
index 0000000..17f7cfb
--- /dev/null
+++ b/cspdk/sin300/__init__.py
@@ -0,0 +1,41 @@
+from gdsfactory.cross_section import get_cross_sections
+from gdsfactory.get_factories import get_cells
+from gdsfactory.pdk import Pdk
+
+from cspdk.sin300 import cells, config, tech
+from cspdk.sin300.cells import _bend, _straight, _taper
+from cspdk.sin300.config import PATH
+from cspdk.sin300.models import get_models
+from cspdk.sin300.tech import LAYER, LAYER_STACK, LAYER_VIEWS, routing_strategies
+
+_models = get_models()
+_cells = get_cells(cells)
+_cells.update(
+ {
+ "_straight": _straight,
+ "_bend": _bend,
+ "_taper": _taper,
+ }
+)
+_cross_sections = get_cross_sections(tech)
+PDK = Pdk(
+ name="cornerstone_sin300",
+ cells=_cells,
+ cross_sections=_cross_sections,
+ layers=dict(LAYER),
+ layer_stack=LAYER_STACK,
+ layer_views=LAYER_VIEWS,
+ models=_models,
+ routing_strategies=routing_strategies,
+)
+PDK.activate()
+
+__all__ = [
+ "LAYER",
+ "LAYER_STACK",
+ "LAYER_VIEWS",
+ "PATH",
+ "cells",
+ "config",
+ "tech",
+]
diff --git a/cspdk/sin300/cells.py b/cspdk/sin300/cells.py
new file mode 100644
index 0000000..9b24d2a
--- /dev/null
+++ b/cspdk/sin300/cells.py
@@ -0,0 +1,1003 @@
+from functools import partial
+from typing import Any
+
+import gdsfactory as gf
+from gdsfactory.typings import ComponentSpec, CrossSectionSpec, LayerSpec
+
+from cspdk.sin300.config import PATH
+from cspdk.sin300.tech import LAYER, xs_nc, xs_no
+
+################
+# Straights
+################
+
+
+@gf.cell
+def _straight(
+ length: float = 10.0,
+ cross_section: CrossSectionSpec = "xs_nc",
+) -> gf.Component:
+ return gf.components.straight(
+ length=length,
+ cross_section=cross_section,
+ )
+
+
+@gf.cell
+def straight_nc(length: float = 10.0, **kwargs) -> gf.Component:
+ """Straight waveguide in nitride, c-band.
+
+ Args:
+ length (float, optional): The length of the waveguide. Defaults to 10.0.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_nc"
+ return _straight(
+ length=length,
+ **kwargs,
+ )
+
+
+@gf.cell
+def straight_no(length: float = 10.0, **kwargs) -> gf.Component:
+ """Straight waveguide in nitride, o-band.
+
+ Args:
+ length (float, optional): The length of the waveguide. Defaults to 10.0.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_no"
+ return _straight(
+ length=length,
+ **kwargs,
+ )
+
+
+################
+# Bends
+################
+
+
+@gf.cell
+def bend_s(
+ size: tuple[float, float] = (11.0, 1.8),
+ cross_section: CrossSectionSpec = "xs_nc",
+ **kwargs,
+) -> gf.Component:
+ """An S-bend.
+
+ Args:
+ size (tuple[float, float], optional): The size of the s-bend, in x and y. Defaults to (11.0, 1.8).
+ cross_section (CrossSectionSpec, optional): the bend cross-section. Defaults to "xs_nc" (nitride, c-band).
+
+ Returns:
+ gf.Component: the component
+ """
+ return gf.components.bend_s(
+ size=size,
+ cross_section=cross_section,
+ **kwargs,
+ )
+
+
+@gf.cell
+def _bend(
+ radius: float | None = None,
+ angle: float = 90.0,
+ p: float = 0.5,
+ with_arc_floorplan: bool = True,
+ npoints: int | None = None,
+ direction: str = "ccw",
+ cross_section: CrossSectionSpec = "xs_nc",
+) -> gf.Component:
+ return gf.components.bend_euler(
+ radius=radius,
+ angle=angle,
+ p=p,
+ with_arc_floorplan=with_arc_floorplan,
+ npoints=npoints,
+ direction=direction,
+ cross_section=cross_section,
+ )
+
+
+@gf.cell
+def wire_corner(
+ cross_section: CrossSectionSpec = "xs_metal_routing",
+) -> gf.Component:
+ """The bend equivalent for electrical wires, which is a simple corner.
+
+ Args:
+ cross_section (CrossSectionSpec, optional): the bend cross-section. Defaults to "xs_metal_routing".
+
+ Returns:
+ gf.Component: the component
+ """
+ return gf.components.wire_corner(cross_section=cross_section)
+
+
+def _float(x: Any) -> float:
+ return float(x)
+
+
+@gf.cell
+def bend_nc(
+ radius: float = _float(xs_nc.radius), angle: float = 90.0, **kwargs
+) -> gf.Component:
+ """An euler bend in nitride, c-band.
+
+ Args:
+ radius (float, optional): the radius of the bend. Defaults to the PDK's default value for that cross-section.
+ angle (float, optional): the angle of the bend. Defaults to 90.0.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_nc"
+ return _bend(
+ radius=radius,
+ angle=angle,
+ **kwargs,
+ )
+
+
+@gf.cell
+def bend_no(
+ radius: float = _float(xs_no.radius), angle: float = 90.0, **kwargs
+) -> gf.Component:
+ """An euler bend in nitride, o-band.
+
+ Args:
+ radius (float, optional): the radius of the bend. Defaults to the PDK's default value for that cross-section.
+ angle (float, optional): the angle of the bend. Defaults to 90.0.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_no"
+ return _bend(
+ radius=radius,
+ angle=angle,
+ **kwargs,
+ )
+
+
+################
+# Transitions
+################
+
+
+@gf.cell
+def _taper(
+ length: float = 10.0,
+ width1: float = 0.5,
+ width2: float | None = None,
+ port: gf.Port | None = None,
+ cross_section: CrossSectionSpec = "xs_nc",
+ **kwargs,
+) -> gf.Component:
+ return gf.components.taper(
+ length=length,
+ width1=width1,
+ width2=width2,
+ port=port,
+ cross_section=cross_section,
+ **kwargs,
+ )
+
+
+@gf.cell
+def taper_nc(
+ length: float = 10.0,
+ width1: float = 0.5,
+ width2: float | None = None,
+ port: gf.Port | None = None,
+ **kwargs,
+) -> gf.Component:
+ """A width taper in nitride, c-band.
+
+ Args:
+ length (float, optional): the length of the taper, in um. Defaults to 10.0.
+ width1 (float, optional): the width of the taper input, in um. Defaults to 0.5.
+ width2 (float | None, optional): the width of the taper output, in um. Defaults to None.
+ port (gf.Port | None, optional): if given, starts from the port's width and transitions to width1. Defaults to None.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_nc"
+ return _taper(length=length, width1=width1, width2=width2, port=port, **kwargs)
+
+
+@gf.cell
+def taper_no(
+ length: float = 10.0,
+ width1: float = 0.5,
+ width2: float | None = None,
+ port: gf.Port | None = None,
+ **kwargs,
+) -> gf.Component:
+ """A width taper in nitride, o-band.
+
+ Args:
+ length (float, optional): the length of the taper, in um. Defaults to 10.0.
+ width1 (float, optional): the width of the taper input, in um. Defaults to 0.5.
+ width2 (float | None, optional): the width of the taper output, in um. Defaults to None.
+ port (gf.Port | None, optional): if given, starts from the port's width and transitions to width1. Defaults to None.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_no"
+ return _taper(length=length, width1=width1, width2=width2, port=port, **kwargs)
+
+
+################
+# MMIs
+################
+
+
+@gf.cell
+def _mmi1x2(
+ width_mmi: float = 6.0,
+ width_taper: float = 1.5,
+ length_taper: float = 20.0,
+ cross_section: CrossSectionSpec = "xs_nc",
+ **kwargs,
+) -> gf.Component:
+ return gf.components.mmi1x2(
+ width_mmi=width_mmi,
+ length_taper=length_taper,
+ width_taper=width_taper,
+ cross_section=cross_section,
+ **kwargs,
+ )
+
+
+@gf.cell
+def _mmi2x2(
+ width_mmi: float = 6.0,
+ width_taper: float = 1.5,
+ length_taper: float = 20.0,
+ cross_section: CrossSectionSpec = "xs_nc",
+ **kwargs,
+) -> gf.Component:
+ return gf.components.mmi2x2(
+ width_mmi=width_mmi,
+ length_taper=length_taper,
+ width_taper=width_taper,
+ cross_section=cross_section,
+ **kwargs,
+ )
+
+
+################
+# Nitride MMIs oband
+################
+
+
+@gf.cell
+def mmi1x2_no(**kwargs) -> gf.Component:
+ """A 1x2 MMI in nitride, o-band.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_no"
+ return _mmi1x2(
+ width_mmi=12.0,
+ length_taper=50.0,
+ width_taper=5.5,
+ gap_mmi=0.4,
+ length_mmi=42.0,
+ **kwargs,
+ )
+
+
+@gf.cell
+def mmi2x2_no(**kwargs) -> gf.Component:
+ """A 2x2 MMI in nitride, o-band.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_no"
+ return _mmi2x2(
+ width_mmi=12.0,
+ length_taper=50.0,
+ width_taper=5.5,
+ gap_mmi=0.4,
+ length_mmi=126.0,
+ **kwargs,
+ )
+
+
+################
+# Nitride MMIs cband
+################
+
+
+@gf.cell
+def mmi1x2_nc(**kwargs) -> gf.Component:
+ """A 1x2 MMI in nitride, c-band.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_nc"
+ return _mmi1x2(
+ width_mmi=12.0,
+ length_taper=50.0,
+ width_taper=5.5,
+ gap_mmi=0.4,
+ length_mmi=64.7,
+ **kwargs,
+ )
+
+
+@gf.cell
+def mmi2x2_nc(**kwargs) -> gf.Component:
+ """A 2x2 MMI in nitride, c-band.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_nc"
+ return _mmi2x2(
+ width_mmi=12.0,
+ length_taper=50.0,
+ width_taper=5.5,
+ gap_mmi=0.4,
+ length_mmi=232.0,
+ **kwargs,
+ )
+
+
+##############################
+# Evanescent couplers
+##############################
+
+
+@gf.cell
+def _coupler_symmetric(
+ bend: ComponentSpec = bend_s,
+ gap: float = 0.234,
+ dx: float = 10.0,
+ dy: float = 4.0,
+ cross_section: CrossSectionSpec = "xs_nc",
+) -> gf.Component:
+ return gf.components.coupler_symmetric(
+ bend=bend,
+ gap=gap,
+ dx=dx,
+ dy=dy,
+ cross_section=cross_section,
+ )
+
+
+@gf.cell
+def _coupler_straight(
+ length: float = 10.0,
+ gap: float = 0.4,
+ straight: ComponentSpec = _straight,
+ cross_section: CrossSectionSpec = "xs_nc",
+) -> gf.Component:
+ return gf.components.coupler_straight(
+ length=length,
+ gap=gap,
+ straight=straight,
+ cross_section=cross_section,
+ )
+
+
+@gf.cell
+def _coupler(
+ gap: float = 0.236,
+ length: float = 20.0,
+ coupler_symmetric: ComponentSpec = _coupler_symmetric,
+ coupler_straight: ComponentSpec = _coupler_straight,
+ dx: float = 10.0,
+ dy: float = 4.0,
+ cross_section: CrossSectionSpec = "xs_nc",
+) -> gf.Component:
+ return gf.components.coupler(
+ gap=gap,
+ length=length,
+ coupler_symmetric=coupler_symmetric,
+ coupler_straight=coupler_straight,
+ dx=dx,
+ dy=dy,
+ cross_section=cross_section,
+ )
+
+
+@gf.cell
+def coupler_nc(
+ gap: float = 0.4,
+ length: float = 20.0,
+ dx: float = 10.0,
+ dy: float = 4.0,
+ **kwargs,
+) -> gf.Component:
+ """A symmetric coupler in nitride, c-band.
+
+ Args:
+ gap (float, optional): the coupling gap, in um. Defaults to 0.4.
+ length (float, optional): the length of the coupling section, in um. Defaults to 20.0.
+ dx (float, optional): the port-to-port horizontal spacing. Defaults to 10.0.
+ dy (float, optional): the port-to-port vertical spacing. Defaults to 4.0.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_nc"
+ return _coupler(
+ gap=gap,
+ length=length,
+ dx=dx,
+ dy=dy,
+ **kwargs,
+ )
+
+
+@gf.cell
+def coupler_no(
+ gap: float = 0.4,
+ length: float = 20.0,
+ dx: float = 10.0,
+ dy: float = 4.0,
+ **kwargs,
+) -> gf.Component:
+ """A symmetric coupler in nitride, o-band.
+
+ Args:
+ gap (float, optional): the coupling gap, in um. Defaults to 0.4.
+ length (float, optional): the length of the coupling section, in um. Defaults to 20.0.
+ dx (float, optional): the port-to-port horizontal spacing. Defaults to 10.0.
+ dy (float, optional): the port-to-port vertical spacing. Defaults to 4.0.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_no"
+ return _coupler(
+ gap=gap,
+ length=length,
+ dx=dx,
+ dy=dy,
+ **kwargs,
+ )
+
+
+##############################
+# grating couplers Rectangular
+##############################
+
+
+@gf.cell
+def _gc_rectangular(
+ n_periods: int = 30,
+ fill_factor: float = 0.5,
+ length_taper: float = 350.0,
+ fiber_angle: float = 10.0,
+ layer_grating: LayerSpec = LAYER.GRA,
+ layer_slab: LayerSpec = LAYER.WG,
+ slab_offset: float = 0.0,
+ period: float = 0.75,
+ width_grating: float = 11.0,
+ polarization: str = "te",
+ wavelength: float = 1.55,
+ taper: ComponentSpec = _taper,
+ slab_xmin: float = -1.0,
+ cross_section: CrossSectionSpec = "xs_nc",
+) -> gf.Component:
+ c = gf.components.grating_coupler_rectangular(
+ n_periods=n_periods,
+ fill_factor=fill_factor,
+ length_taper=length_taper,
+ fiber_angle=fiber_angle,
+ layer_grating=layer_grating,
+ layer_slab=layer_slab,
+ slab_offset=slab_offset,
+ period=period,
+ width_grating=width_grating,
+ polarization=polarization,
+ wavelength=wavelength,
+ taper=taper,
+ slab_xmin=slab_xmin,
+ cross_section=cross_section,
+ ).flatten()
+ return c
+
+
+@gf.cell
+def gc_rectangular_nc() -> gf.Component:
+ """A rectangular grating coupler in nitride, c-band.
+
+ Returns:
+ gf.Component: the component
+ """
+ return _gc_rectangular(
+ period=0.66,
+ cross_section="xs_nc",
+ length_taper=200,
+ fiber_angle=20,
+ layer_grating=LAYER.NITRIDE_ETCH,
+ layer_slab=LAYER.NITRIDE,
+ slab_offset=0,
+ )
+
+
+@gf.cell
+def gc_rectangular_no() -> gf.Component:
+ """A rectangular grating coupler in nitride, o-band.
+
+ Returns:
+ gf.Component: the component
+ """
+ return _gc_rectangular(
+ period=0.964,
+ cross_section="xs_no",
+ length_taper=200,
+ fiber_angle=20,
+ layer_grating=LAYER.NITRIDE_ETCH,
+ layer_slab=LAYER.NITRIDE,
+ slab_offset=0,
+ )
+
+
+##############################
+# grating couplers elliptical
+##############################
+
+
+@gf.cell
+def _gc_elliptical(
+ polarization: str = "te",
+ taper_length: float = 16.6,
+ taper_angle: float = 30.0,
+ trenches_extra_angle: float = 9.0,
+ wavelength: float = 1.53,
+ fiber_angle: float = 20.0,
+ grating_line_width: float = 0.343,
+ neff: float = 1.6,
+ ncladding: float = 1.443,
+ layer_trench: LayerSpec = LAYER.GRA,
+ p_start: int = 26,
+ n_periods: int = 30,
+ end_straight_length: float = 0.2,
+ cross_section: CrossSectionSpec = "xs_nc",
+) -> gf.Component:
+ return gf.components.grating_coupler_elliptical_trenches(
+ polarization=polarization,
+ taper_length=taper_length,
+ taper_angle=taper_angle,
+ trenches_extra_angle=trenches_extra_angle,
+ wavelength=wavelength,
+ fiber_angle=fiber_angle,
+ grating_line_width=grating_line_width,
+ neff=neff,
+ ncladding=ncladding,
+ layer_trench=layer_trench,
+ p_start=p_start,
+ n_periods=n_periods,
+ end_straight_length=end_straight_length,
+ cross_section=cross_section,
+ )
+
+
+@gf.cell
+def gc_elliptical_nc(
+ grating_line_width: float = 0.343,
+ fiber_angle: float = 20,
+ wavelength: float = 1.53,
+ neff: float = 1.6,
+ cross_section: CrossSectionSpec = "xs_nc",
+ **kwargs,
+) -> gf.Component:
+ """An elliptical grating coupler in strip, c-band.
+
+ Args:
+ grating_line_width: the grating line width, in um. Defaults to 0.343.
+ fiber_angle: the fiber angle, in degrees. Defaults to 15.
+ wavelength: the center wavelength, in um. Defaults to 1.53.
+ neff: the effective index of the waveguide. Defaults to 1.6.
+ cross_section: the cross-section. Defaults to "xs_nc".
+
+ Returns:
+ gf.Component: the component
+ """
+ return _gc_elliptical(
+ grating_line_width=grating_line_width,
+ fiber_angle=fiber_angle,
+ wavelength=wavelength,
+ cross_section=cross_section,
+ neff=neff,
+ **kwargs,
+ )
+
+
+@gf.cell
+def gc_elliptical_no(
+ grating_line_width: float = 0.343,
+ fiber_angle: float = 20,
+ wavelength: float = 1.31,
+ neff: float = 1.63,
+ cross_section: CrossSectionSpec = "xs_no",
+ **kwargs,
+) -> gf.Component:
+ """An elliptical grating coupler in strip, o-band.
+
+ Args:
+ grating_line_width: the grating line width, in um. Defaults to 0.343.
+ fiber_angle: the fiber angle, in degrees. Defaults to 15.
+ wavelength: the center wavelength, in um. Defaults to 1.31.
+ neff: the effective index of the waveguide. Defaults to 1.63.
+ cross_section: the cross-section. Defaults to "xs_no".
+
+
+ Returns:
+ gf.Component: the component
+ """
+ return _gc_elliptical(
+ grating_line_width=grating_line_width,
+ fiber_angle=fiber_angle,
+ wavelength=wavelength,
+ neff=neff,
+ cross_section=cross_section,
+ **kwargs,
+ )
+
+
+################
+# MZI
+################
+
+
+@gf.cell
+def _mzi(
+ delta_length: float = 10.0,
+ length_y: float = 2.0,
+ length_x: float = 0.1,
+ cross_section: CrossSectionSpec = "xs_nc",
+ add_electrical_ports_bot: bool = True,
+ bend: ComponentSpec = _bend,
+ straight: ComponentSpec = _straight,
+ splitter: ComponentSpec = _mmi1x2,
+ combiner: ComponentSpec = _mmi2x2,
+) -> gf.Component:
+ return gf.components.mzi(
+ delta_length=delta_length,
+ length_y=length_y,
+ length_x=length_x,
+ bend=bend,
+ straight=straight,
+ straight_y=straight,
+ straight_x_top=straight,
+ straight_x_bot=straight,
+ splitter=splitter,
+ combiner=combiner,
+ with_splitter=True,
+ port_e1_splitter="o2",
+ port_e0_splitter="o3",
+ port_e1_combiner="o2",
+ port_e0_combiner="o3",
+ nbends=2,
+ cross_section=cross_section,
+ cross_section_x_top=cross_section,
+ cross_section_x_bot=cross_section,
+ mirror_bot=False,
+ add_optical_ports_arms=False,
+ add_electrical_ports_bot=add_electrical_ports_bot,
+ min_length=0.01,
+ extend_ports_straight_x=None,
+ )
+
+
+@gf.cell
+def mzi_nc(
+ delta_length: float = 10.0,
+ length_y: float = 2.0,
+ length_x: float = 0.1,
+ add_electrical_ports_bot: bool = True,
+ **kwargs,
+) -> gf.Component:
+ """A Mach-Zehnder Interferometer (MZI) in nitride, c-band.
+
+ Args:
+ delta_length (float, optional): the length differential between the two arms. Defaults to 10.0.
+ length_y (float, optional): the common vertical length, in um. Defaults to 2.0.
+ length_x (float, optional): the common horizontal length, in um. Defaults to 0.1.
+ add_electrical_ports_bot (bool, optional): if true, adds electrical ports to the bottom. Defaults to True.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_nc"
+ return _mzi(
+ delta_length=delta_length,
+ length_y=length_y,
+ length_x=length_x,
+ add_electrical_ports_bot=add_electrical_ports_bot,
+ straight=straight_nc,
+ bend=bend_nc,
+ combiner=mmi1x2_nc,
+ splitter=mmi1x2_nc,
+ **kwargs,
+ )
+
+
+@gf.cell
+def mzi_no(
+ delta_length: float = 10.0,
+ length_y: float = 2.0,
+ length_x: float = 0.1,
+ add_electrical_ports_bot: bool = True,
+ **kwargs,
+) -> gf.Component:
+ """A Mach-Zehnder Interferometer (MZI) in nitride, o-band.
+
+ Args:
+ delta_length (float, optional): the length differential between the two arms. Defaults to 10.0.
+ length_y (float, optional): the common vertical length, in um. Defaults to 2.0.
+ length_x (float, optional): the common horizontal length, in um. Defaults to 0.1.
+ add_electrical_ports_bot (bool, optional): if true, adds electrical ports to the bottom. Defaults to True.
+
+ Returns:
+ gf.Component: the component
+ """
+ if "cross_section" not in kwargs:
+ kwargs["cross_section"] = "xs_no"
+ return _mzi(
+ delta_length=delta_length,
+ length_y=length_y,
+ length_x=length_x,
+ add_electrical_ports_bot=add_electrical_ports_bot,
+ bend=bend_no,
+ straight=straight_no,
+ combiner=mmi1x2_no,
+ splitter=mmi1x2_no,
+ **kwargs,
+ )
+
+
+################
+# Packaging
+################
+
+
+@gf.cell
+def pad(
+ size: tuple[float, float] = (100.0, 100.0),
+ layer: LayerSpec = LAYER.PAD,
+ bbox_layers: None = None,
+ bbox_offsets: None = None,
+ port_inclusion: float = 0.0,
+ port_orientation: None = None,
+) -> gf.Component:
+ """An electrical pad.
+
+ Args:
+ size (tuple[float, float], optional): Size of the pad in (x, y). Defaults to (100.0, 100.0).
+ layer (LayerSpec, optional): the layer to draw the pad on. Defaults to LAYER.PAD.
+ bbox_layers (None, optional): if set, draws a box around the pad with the given layers. Defaults to None.
+ bbox_offsets (None, optional): if set, applies an offset to grow the bbox's specified with `bbox_layers`. Defaults to None.
+ port_inclusion (float, optional): if set, insets the port from the edge by the specified amount. Defaults to 0.0.
+ port_orientation (None, optional): if set, gives the port a fixed orientation. Defaults to None.
+
+ Returns:
+ gf.Component: the component
+ """
+ return gf.components.pad(
+ size=size,
+ layer=layer,
+ bbox_layers=bbox_layers,
+ bbox_offsets=bbox_offsets,
+ port_inclusion=port_inclusion,
+ port_orientation=port_orientation,
+ )
+
+
+@gf.cell
+def rectangle(
+ size: tuple[float, float] = (4.0, 2.0),
+ layer: LayerSpec = LAYER.FLOORPLAN,
+ centered: bool = False,
+ port_type: str = "electrical",
+ port_orientations: tuple[float, float, float, float] = (180.0, 90.0, 0.0, -90.0),
+ round_corners_east_west: bool = False,
+ round_corners_north_south: bool = False,
+) -> gf.Component:
+ """A simple rectangle on the given layer.
+
+ Args:
+ size (tuple[float, float], optional): the size of the rectangle in (x, y). Defaults to (4.0, 2.0).
+ layer (LayerSpec, optional): the layer to draw the rectangle on. Defaults to LAYER.FLOORPLAN.
+ centered (bool, optional): if true, the rectangle's origin will be placed at the center (otherwise it will be bottom-left). Defaults to False.
+ port_type (str, optional): the port type for ports automatically added to edges of the rectangle. Defaults to "electrical".
+ port_orientations (tuple[float, float, float, float], optional): orientations of the ports to be automatically added. Defaults to (180.0, 90.0, 0.0, -90.0).
+ round_corners_east_west (bool, optional): if True, circles are added to the east and west edges, forming a horizontal pill shape. Defaults to False.
+ round_corners_north_south (bool, optional): if True, circles are added to the north and south edges, forming a vertical pill shape. Defaults to False.
+
+ Returns:
+ gf.Component: the component
+ """
+ return gf.components.rectangle(
+ size=size,
+ layer=layer,
+ centered=centered,
+ port_type=port_type,
+ port_orientations=port_orientations,
+ round_corners_east_west=round_corners_east_west,
+ round_corners_north_south=round_corners_north_south,
+ )
+
+
+@gf.cell
+def grating_coupler_array(
+ pitch: float = 127.0,
+ n: int = 6,
+ port_name: str = "o1",
+ rotation: float = 0.0,
+ with_loopback: bool = False,
+ bend: ComponentSpec = _bend,
+ grating_coupler_spacing: float = 0.0,
+ grating_coupler: ComponentSpec = gc_rectangular_nc,
+ cross_section: CrossSectionSpec = "xs_nc",
+) -> gf.Component:
+ """An array of grating couplers.
+
+ Args:
+ pitch (float, optional): the center-center pitch between grating couplers. Defaults to 127.0.
+ n (int, optional): the number of grating couplers to place. Defaults to 6.
+ port_name (str, optional): the routing port of the grating coupler to be placed. Defaults to "o1".
+ rotation (float, optional): rotation of the grating couplers, in degrees. Defaults to 0.0.
+ with_loopback (bool, optional): if True, adds a loopback. Defaults to False.
+ bend (ComponentSpec, optional): the bend to be used for the loopback. Defaults to _bend.
+ grating_coupler_spacing (float, optional): the spacing to be used in the loopback. Defaults to 0.0.
+ grating_coupler (ComponentSpec, optional): the grating coupler component to use. Defaults to gc_rectangular_nc.
+ cross_section (CrossSectionSpec, optional): the cross section to be used for routing in the loopback. Defaults to "xs_nc".
+
+ Returns:
+ gf.Component: the component
+ """
+ return gf.components.grating_coupler_array(
+ pitch=pitch,
+ n=n,
+ port_name=port_name,
+ rotation=rotation,
+ with_loopback=with_loopback,
+ bend=bend,
+ grating_coupler_spacing=grating_coupler_spacing,
+ grating_coupler=grating_coupler,
+ cross_section=cross_section,
+ )
+
+
+@gf.cell
+def _die(
+ size: tuple[float, float] = (11470.0, 4900.0),
+ ngratings: int = 14,
+ npads: int = 31,
+ grating_pitch: float = 250.0,
+ pad_pitch: float = 300.0,
+ grating_coupler: ComponentSpec = gc_rectangular_nc,
+ cross_section: CrossSectionSpec = "xs_nc",
+ pad: ComponentSpec = pad,
+) -> gf.Component:
+ c = gf.Component()
+
+ fp = c << rectangle(size=size, layer=LAYER.FLOORPLAN, centered=True)
+
+ # Add optical ports
+ x0 = -4925 + 2.827
+ y0 = 1650
+
+ gca = grating_coupler_array(
+ n=ngratings,
+ pitch=grating_pitch,
+ with_loopback=True,
+ rotation=90,
+ grating_coupler=grating_coupler,
+ cross_section=cross_section,
+ )
+ left = c << gca
+ left.rotate(90)
+ left.xmax = x0
+ left.y = fp.y
+ c.add_ports(left.ports, prefix="W")
+
+ right = c << gca
+ right.rotate(-90)
+ right.xmax = -x0
+ right.y = fp.y
+ c.add_ports(right.ports, prefix="E")
+
+ # Add electrical ports
+ x0 = -4615
+ y0 = 2200
+ pad = pad()
+
+ for i in range(npads):
+ pad_ref = c << pad
+ pad_ref.xmin = x0 + i * pad_pitch
+ pad_ref.ymin = y0
+ c.add_port(
+ name=f"N{i}",
+ port=pad_ref.ports["e4"],
+ )
+
+ for i in range(npads):
+ pad_ref = c << pad
+ pad_ref.xmin = x0 + i * pad_pitch
+ pad_ref.ymax = -y0
+ c.add_port(
+ name=f"S{i}",
+ port=pad_ref.ports["e2"],
+ )
+
+ c.auto_rename_ports()
+ return c
+
+
+@gf.cell
+def die_nc() -> gf.Component:
+ """The standard die template for nitride, c-band. This has 24 grating couplers, split evenly between the left and right sides of the chip and 62 electrical pads split between the top and bottom.
+
+ Returns:
+ gf.Component: the component
+ """
+ return _die(
+ grating_coupler=gc_rectangular_nc,
+ cross_section="xs_nc",
+ )
+
+
+@gf.cell
+def die_no() -> gf.Component:
+ """The standard die template for nitride, o-band. This has 24 grating couplers, split evenly between the left and right sides of the chip and 62 electrical pads split between the top and bottom.
+
+ Returns:
+ gf.Component: the component
+ """
+ return _die(
+ grating_coupler=gc_rectangular_no,
+ cross_section="xs_no",
+ )
+
+
+################
+# Imported from Cornerstone MPW SOI 220nm GDSII Template
+################
+_import_gds = partial(gf.import_gds, gdsdir=PATH.gds)
+
+
+array = gf.components.array
+
+
+if __name__ == "__main__":
+ c = taper_nc()
+ c.show()
+ # for name, func in list(globals().items()):
+ # if not callable(func):
+ # continue
+ # if name in ["partial", "_import_gds"]:
+ # continue
+ # print(name, func())
diff --git a/cspdk/sin300/config.py b/cspdk/sin300/config.py
new file mode 100644
index 0000000..f3f88c7
--- /dev/null
+++ b/cspdk/sin300/config.py
@@ -0,0 +1,25 @@
+"""Store path."""
+
+__all__ = ["PATH"]
+
+import pathlib
+
+cwd = pathlib.Path.cwd()
+cwd_config = cwd / "config.yml"
+module = pathlib.Path(__file__).parent.absolute()
+repo = module.parent.parent
+
+
+class Path:
+ module = module
+ repo = repo
+ gds = module / "gds"
+ klayout = module / "klayout"
+
+ lyp = klayout / "tech" / "layers.lyp"
+ lyt = klayout / "tech" / "tech.lyt"
+ lyp_yaml = module / "layers.yaml"
+ tech = module / "klayout" / "tech"
+
+
+PATH = Path()
diff --git a/cspdk/sin300/gds/CORNERSTONE MPW SOI 220nm GDSII Template.gds b/cspdk/sin300/gds/CORNERSTONE MPW SOI 220nm GDSII Template.gds
new file mode 100644
index 0000000..1e9bc59
Binary files /dev/null and b/cspdk/sin300/gds/CORNERSTONE MPW SOI 220nm GDSII Template.gds differ
diff --git a/cspdk/sin300/gds/Cell0_Institution_Name.gds b/cspdk/sin300/gds/Cell0_Institution_Name.gds
new file mode 100644
index 0000000..93d8220
Binary files /dev/null and b/cspdk/sin300/gds/Cell0_Institution_Name.gds differ
diff --git a/cspdk/sin300/gds/Cell0_SOI220_Full_1550nm_Packaging_Template.gds b/cspdk/sin300/gds/Cell0_SOI220_Full_1550nm_Packaging_Template.gds
new file mode 100644
index 0000000..a45450f
Binary files /dev/null and b/cspdk/sin300/gds/Cell0_SOI220_Full_1550nm_Packaging_Template.gds differ
diff --git a/cspdk/sin300/gds/Cell0_SOI_Full_Institution_Name.gds b/cspdk/sin300/gds/Cell0_SOI_Full_Institution_Name.gds
new file mode 100644
index 0000000..024985b
Binary files /dev/null and b/cspdk/sin300/gds/Cell0_SOI_Full_Institution_Name.gds differ
diff --git a/cspdk/sin300/gds/Cell0_SOI_Half_Institution_Name.gds b/cspdk/sin300/gds/Cell0_SOI_Half_Institution_Name.gds
new file mode 100644
index 0000000..3082776
Binary files /dev/null and b/cspdk/sin300/gds/Cell0_SOI_Half_Institution_Name.gds differ
diff --git a/cspdk/sin300/gds/Flip_Chip_Bonding_Example.gds b/cspdk/sin300/gds/Flip_Chip_Bonding_Example.gds
new file mode 100644
index 0000000..6713de8
Binary files /dev/null and b/cspdk/sin300/gds/Flip_Chip_Bonding_Example.gds differ
diff --git a/tests/gds_ref/heater.gds b/cspdk/sin300/gds/Heater.gds
similarity index 90%
rename from tests/gds_ref/heater.gds
rename to cspdk/sin300/gds/Heater.gds
index 6646920..9d8ce74 100644
Binary files a/tests/gds_ref/heater.gds and b/cspdk/sin300/gds/Heater.gds differ
diff --git a/cspdk/sin300/gds/Layer_Designations.gds b/cspdk/sin300/gds/Layer_Designations.gds
new file mode 100644
index 0000000..393bec3
Binary files /dev/null and b/cspdk/sin300/gds/Layer_Designations.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_2x1_MMI.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_2x1_MMI.gds
new file mode 100644
index 0000000..48ecf30
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_2x1_MMI.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_2x2_MMI.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_2x2_MMI.gds
new file mode 100644
index 0000000..a2ad4ba
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_2x2_MMI.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_90_Degree_Bend.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_90_Degree_Bend.gds
new file mode 100644
index 0000000..e7ca1fb
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_90_Degree_Bend.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_Grating_Coupler.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_Grating_Coupler.gds
new file mode 100644
index 0000000..52ee55b
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_Grating_Coupler.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_Waveguide.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_Waveguide.gds
new file mode 100644
index 0000000..a437845
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_Waveguide.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_Waveguide_Crossing.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_Waveguide_Crossing.gds
new file mode 100644
index 0000000..dc8931c
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_RIB_Waveguide_Crossing.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_2x1_MMI.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_2x1_MMI.gds
new file mode 100644
index 0000000..86833f0
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_2x1_MMI.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_2x2_MMI.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_2x2_MMI.gds
new file mode 100644
index 0000000..32c178f
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_2x2_MMI.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_90_Degree_Bend.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_90_Degree_Bend.gds
new file mode 100644
index 0000000..11a64f1
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_90_Degree_Bend.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_Grating_Coupler.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_Grating_Coupler.gds
new file mode 100644
index 0000000..147082c
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_Grating_Coupler.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_Waveguide.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_Waveguide.gds
new file mode 100644
index 0000000..cad9dbe
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_Waveguide.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_Waveguide_Crossing.gds b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_Waveguide_Crossing.gds
new file mode 100644
index 0000000..711bde8
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1310nm_TE_STRIP_Waveguide_Crossing.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_2x1_MMI.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_2x1_MMI.gds
new file mode 100644
index 0000000..aa0cbed
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_2x1_MMI.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_2x2_MMI.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_2x2_MMI.gds
new file mode 100644
index 0000000..c67bfee
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_2x2_MMI.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_90_Degree_Bend.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_90_Degree_Bend.gds
new file mode 100644
index 0000000..959a11c
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_90_Degree_Bend.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_Grating_Coupler.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_Grating_Coupler.gds
new file mode 100644
index 0000000..e118e0c
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_Grating_Coupler.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_Waveguide.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_Waveguide.gds
new file mode 100644
index 0000000..557f03b
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_Waveguide.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_Waveguide_Crossing.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_Waveguide_Crossing.gds
new file mode 100644
index 0000000..2c388d1
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_RIB_Waveguide_Crossing.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_2x1_MMI.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_2x1_MMI.gds
new file mode 100644
index 0000000..c3c5e51
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_2x1_MMI.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_2x2_MMI.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_2x2_MMI.gds
new file mode 100644
index 0000000..032dac4
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_2x2_MMI.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_90_Degree_Bend.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_90_Degree_Bend.gds
new file mode 100644
index 0000000..7a3a5e9
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_90_Degree_Bend.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_Waveguide.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_Waveguide.gds
new file mode 100644
index 0000000..acdba8b
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_Waveguide.gds differ
diff --git a/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_Waveguide_Crossing.gds b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_Waveguide_Crossing.gds
new file mode 100644
index 0000000..8686cf6
Binary files /dev/null and b/cspdk/sin300/gds/SOI220nm_1550nm_TE_STRIP_Waveguide_Crossing.gds differ
diff --git a/cspdk/gds/SiN300nm_1310nm_TE_STRIP_2x1_MMI.gds b/cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_2x1_MMI.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1310nm_TE_STRIP_2x1_MMI.gds
rename to cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_2x1_MMI.gds
diff --git a/cspdk/gds/SiN300nm_1310nm_TE_STRIP_2x2_MMI.gds b/cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_2x2_MMI.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1310nm_TE_STRIP_2x2_MMI.gds
rename to cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_2x2_MMI.gds
diff --git a/cspdk/gds/SiN300nm_1310nm_TE_STRIP_90_Degr.gds b/cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_90_Degr.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1310nm_TE_STRIP_90_Degr.gds
rename to cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_90_Degr.gds
diff --git a/cspdk/gds/SiN300nm_1310nm_TE_STRIP_Grating.gds b/cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_Grating.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1310nm_TE_STRIP_Grating.gds
rename to cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_Grating.gds
diff --git a/cspdk/gds/SiN300nm_1310nm_TE_STRIP_Wavegui.gds b/cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_Wavegui.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1310nm_TE_STRIP_Wavegui.gds
rename to cspdk/sin300/gds/SiN300nm_1310nm_TE_STRIP_Wavegui.gds
diff --git a/cspdk/gds/SiN300nm_1550nm_TE_STRIP_2x1_MMI.gds b/cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_2x1_MMI.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1550nm_TE_STRIP_2x1_MMI.gds
rename to cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_2x1_MMI.gds
diff --git a/cspdk/gds/SiN300nm_1550nm_TE_STRIP_2x2_MMI.gds b/cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_2x2_MMI.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1550nm_TE_STRIP_2x2_MMI.gds
rename to cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_2x2_MMI.gds
diff --git a/cspdk/gds/SiN300nm_1550nm_TE_STRIP_90_Degr.gds b/cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_90_Degr.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1550nm_TE_STRIP_90_Degr.gds
rename to cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_90_Degr.gds
diff --git a/cspdk/gds/SiN300nm_1550nm_TE_STRIP_Grating.gds b/cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_Grating.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1550nm_TE_STRIP_Grating.gds
rename to cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_Grating.gds
diff --git a/cspdk/gds/SiN300nm_1550nm_TE_STRIP_Wavegui.gds b/cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_Wavegui.gds
similarity index 100%
rename from cspdk/gds/SiN300nm_1550nm_TE_STRIP_Wavegui.gds
rename to cspdk/sin300/gds/SiN300nm_1550nm_TE_STRIP_Wavegui.gds
diff --git a/cspdk/import_pdk.py b/cspdk/sin300/import_pdk.py
similarity index 100%
rename from cspdk/import_pdk.py
rename to cspdk/sin300/import_pdk.py
diff --git a/cspdk/sin300/klayout/d25/Cornerstone.lyd25 b/cspdk/sin300/klayout/d25/Cornerstone.lyd25
new file mode 100644
index 0000000..6128169
--- /dev/null
+++ b/cspdk/sin300/klayout/d25/Cornerstone.lyd25
@@ -0,0 +1,38 @@
+
+
+
+
+ d25
+
+
+
+ false
+ false
+ 0
+
+ true
+ d25_scripts
+ tools_menu.d25.end
+ dsl
+ d25-dsl-xml
+
+
+core = input(3, 0)
+slab = input(5, 0)
+nitride = input(203, 0)
+nitride_etch = input(204, 0)
+heater = input(39, 0)
+metal = input(41, 0)
+
+
+
+z(core, zstart: 0.0, zstop: 0.2, name: 'core: si 3/0', )
+z(slab, zstart: 0.0, zstop: 0.1, name: 'slab: si 5/0', )
+z(nitride, zstart: 0.0, zstop: 0.3, name: 'nitride: sin 203/0', )
+z(nitride_etch, zstart: 0.0, zstop: 0.3, name: 'nitride_etch: sin 204/0', )
+z(heater, zstart: 1.1, zstop: 1.8, name: 'heater: TiN 39/0', )
+z(metal, zstart: 1.8, zstop: 2.5, name: 'metal: Aluminum 41/0', )
+
+
+
+
diff --git a/cspdk/sin300/klayout/d25/Cornerstone_sin300.lyd25 b/cspdk/sin300/klayout/d25/Cornerstone_sin300.lyd25
new file mode 100644
index 0000000..bbb059c
--- /dev/null
+++ b/cspdk/sin300/klayout/d25/Cornerstone_sin300.lyd25
@@ -0,0 +1,34 @@
+
+
+
+
+ d25
+
+
+
+ false
+ false
+ 0
+
+ true
+ d25_scripts
+ tools_menu.d25.end
+ dsl
+ d25-dsl-xml
+
+
+nitride = input(203, 0)
+nitride_etch = input(204, 0)
+heater = input(39, 0)
+metal = input(41, 0)
+
+
+
+z(nitride, zstart: 0.0, zstop: 0.3, name: 'nitride: sin 203/0', )
+z(nitride_etch, zstart: 0.0, zstop: 0.3, name: 'nitride_etch: sin 204/0', )
+z(heater, zstart: 1.1, zstop: 1.8, name: 'heater: TiN 39/0', )
+z(metal, zstart: 1.8, zstop: 2.5, name: 'metal: Aluminum 41/0', )
+
+
+
+
diff --git a/cspdk/sin300/klayout/layers.lyp b/cspdk/sin300/klayout/layers.lyp
new file mode 100644
index 0000000..8190ff8
--- /dev/null
+++ b/cspdk/sin300/klayout/layers.lyp
@@ -0,0 +1,122 @@
+
+
+
+ #ffa500
+ #ffa500
+ 0
+ 0
+ I3
+
+ true
+ true
+ false
+
+ false
+ false
+ 0
+ NITRIDE 203/0
+
+
+
+ #0000ff
+ #0000ff
+ 0
+ 0
+ I3
+
+ true
+ true
+ true
+ 1
+ false
+ false
+ 0
+ NITRIDE_ETCH 204/0
+
+
+
+ #ebc634
+ #ebc634
+ 0
+ 0
+ I3
+
+ true
+ true
+ false
+
+ false
+ false
+ 0
+ HEATER 39/0
+
+
+
+
+ #008080
+ 0
+ 0
+ I3
+
+ true
+ true
+ false
+
+ false
+ false
+ 0
+ PAD 41/0
+
+
+
+ #000000
+ #000000
+ 0
+ 0
+ I1
+
+ true
+ true
+ false
+
+ false
+ false
+ 0
+ FLOORPLAN 99/0
+
+
+
+ #00ffff
+ #00ffff
+ 0
+ 0
+ I1
+
+ true
+ true
+ false
+
+ false
+ false
+ 0
+ LABEL_SETTINGS 100/0
+
+
+
+ #00ffff
+ #00ffff
+ 0
+ 0
+ I1
+
+ true
+ true
+ false
+
+ false
+ false
+ 0
+ LABEL_INSTANCE 101/0
+
+
+
diff --git a/cspdk/sin300/klayout/tech.lyt b/cspdk/sin300/klayout/tech.lyt
new file mode 100644
index 0000000..cfdc5e1
--- /dev/null
+++ b/cspdk/sin300/klayout/tech.lyt
@@ -0,0 +1,162 @@
+
+
+ Cornerstone_sin300
+
+
+ 0.001
+
+
+
+ layers.lyp
+ true
+
+
+ 1
+ true
+ true
+
+
+ true
+ layer_map()
+ true
+ true
+
+
+ true
+ layer_map()
+ 0.001
+ true
+ #1
+ true
+ #1
+ false
+ #1
+ true
+ OUTLINE
+ true
+ PLACEMENT_BLK
+ true
+ REGIONS
+ true
+
+ 0
+ true
+ .PIN
+ 2
+ true
+ .PIN
+ 2
+ true
+ .FILL
+ 5
+ true
+ .OBS
+ 3
+ true
+ .BLK
+ 4
+ true
+ .LABEL
+ 1
+ true
+ .LABEL
+ 1
+ true
+
+ 0
+ true
+
+ 0
+ VIA_
+ true
+ default
+ false
+ false
+
+
+
+ false
+ true
+ true
+ 64
+ 0
+ 1
+ 0
+ DATA
+ 0
+ 0
+ BORDER
+ layer_map()
+ true
+
+
+ 0.001
+ 1
+ 100
+ 100
+ 0
+ 0
+ 0
+ false
+ false
+ false
+ true
+ layer_map()
+
+
+ 0
+ 0.001
+ layer_map()
+ true
+ false
+
+
+ 1
+ 0.001
+ layer_map()
+ true
+ false
+ true
+
+
+
+
+ GDS2
+
+ true
+ false
+ false
+ false
+ false
+ false
+ 8000
+ 32000
+ LIB
+
+
+ 2
+ true
+ true
+ 1
+ *
+ false
+
+
+ 0
+
+
+ false
+ false
+
+
+ 0
+
+ true
+
+
+
+ HEATER,HEATER,PAD
+ HEATER='39/0'
+ PAD='41/0'
+
+
diff --git a/cspdk/sin300/layers.yaml b/cspdk/sin300/layers.yaml
new file mode 100644
index 0000000..9f0fe0b
--- /dev/null
+++ b/cspdk/sin300/layers.yaml
@@ -0,0 +1,38 @@
+LayerViews:
+ NITRIDE:
+ layer: [203, 0]
+ layer_in_name: true
+ color: "orange"
+ hatch_pattern: coarsely dotted
+ NITRIDE_ETCH:
+ layer: [204, 0]
+ layer_in_name: true
+ hatch_pattern: coarsely dotted
+ transparent: true
+ width: 1
+ color: "blue"
+ HEATER:
+ layer: [39, 0]
+ layer_in_name: true
+ color: "#ebc634"
+ hatch_pattern: coarsely dotted
+ PAD:
+ layer: [41, 0]
+ layer_in_name: true
+ fill_color: "teal"
+ hatch_pattern: coarsely dotted
+ FLOORPLAN:
+ layer: [99, 0]
+ layer_in_name: true
+ color: "black"
+ hatch_pattern: hollow
+ LABEL_SETTINGS:
+ layer: [100, 0]
+ layer_in_name: true
+ color: "cyan"
+ hatch_pattern: hollow
+ LABEL_INSTANCE:
+ layer: [101, 0]
+ layer_in_name: true
+ color: "cyan"
+ hatch_pattern: hollow
diff --git a/cspdk/sin300/models.py b/cspdk/sin300/models.py
new file mode 100644
index 0000000..5ded49c
--- /dev/null
+++ b/cspdk/sin300/models.py
@@ -0,0 +1,146 @@
+from __future__ import annotations
+
+import inspect
+from collections.abc import Callable
+from functools import partial
+
+import gplugins.sax.models as sm
+import jax.numpy as jnp
+import sax
+from gdsfactory.pdk import get_cross_section_name
+from gdsfactory.typings import CrossSectionSpec
+from gplugins.sax.models import bend as __bend
+from gplugins.sax.models import straight as __straight
+from numpy.typing import NDArray
+
+nm = 1e-3
+
+FloatArray = NDArray[jnp.floating]
+Float = float | FloatArray
+
+################
+# Straights
+################
+
+
+def _straight(
+ *,
+ wl: Float = 1.55,
+ length: Float = 10.0,
+ loss: Float = 0.0,
+ cross_section: CrossSectionSpec = "xs_sc",
+) -> sax.SDict:
+ if get_cross_section_name(cross_section).endswith("nc"):
+ return __straight(
+ wl=wl, # type: ignore
+ length=length, # type: ignore
+ loss=loss, # type: ignore
+ wl0=1.55,
+ neff=1.6,
+ ng=1.94,
+ )
+ elif get_cross_section_name(cross_section).endswith("no"):
+ return __straight(
+ wl=wl, # type: ignore
+ length=length, # type: ignore
+ loss=loss, # type: ignore
+ wl0=1.31,
+ neff=1.63,
+ ng=2.00,
+ )
+ else:
+ return __straight(
+ wl=wl, # type: ignore
+ length=length, # type: ignore
+ loss=loss, # type: ignore
+ wl0=1.55,
+ neff=2.38,
+ ng=4.30,
+ )
+
+
+straight_nc = partial(_straight, cross_section="xs_nc")
+straight_no = partial(_straight, cross_section="xs_no")
+
+################
+# Bends
+################
+bend_s = _straight
+
+
+def _bend(wl: Float = 1.5, length: Float = 20.0, loss: Float = 0.03) -> sax.SDict:
+ return __bend(
+ wl=wl, # type: ignore
+ length=length, # type: ignore
+ loss=loss, # type: ignore
+ )
+
+
+bend_nc = partial(_bend, loss=0.03)
+bend_no = partial(_bend, loss=0.03)
+
+
+################
+# MMIs
+################
+_mmi1x2 = sm.mmi1x2
+_mmi2x2 = sm.mmi2x2
+
+_mmi1x2_o = partial(_mmi1x2, wl0=1.31)
+_mmi1x2_c = partial(_mmi1x2, wl0=1.55)
+_mmi2x2_o = partial(_mmi2x2, wl0=1.31)
+_mmi2x2_c = partial(_mmi2x2, wl0=1.55)
+
+mmi1x2_nc = _mmi1x2_c
+mmi1x2_no = _mmi1x2_o
+
+mmi2x2_nc = _mmi2x2_c
+mmi2x2_no = _mmi2x2_o
+
+##############################
+# Evanescent couplers
+##############################
+
+_coupler = _mmi2x2
+_coupler_o = partial(_coupler, wl0=1.31)
+_coupler_c = partial(_coupler, wl0=1.55)
+coupler_nc = _coupler_c
+coupler_no = _coupler_o
+
+##############################
+# grating couplers Rectangular
+##############################
+_gc_rectangular = sm.grating_coupler
+_gcro = partial(_gc_rectangular, loss=6, bandwidth=35 * nm, wavelength=1.31)
+_gcrc = partial(_gc_rectangular, loss=6, bandwidth=35 * nm, wavelength=1.55)
+gc_rectangular_nc = _gcrc
+gc_rectangular_no = _gcro
+
+##############################
+# grating couplers Elliptical
+##############################
+_gc_elliptical = _gc_rectangular
+_gceo = partial(_gc_elliptical, loss=6, bandwidth=35 * nm, wavelength=1.31)
+_gcec = partial(_gc_elliptical, loss=6, bandwidth=35 * nm, wavelength=1.55)
+gc_elliptical_nc = _gcec
+gc_elliptical_no = _gceo
+
+
+################
+# Models Dict
+################
+def get_models() -> dict[str, Callable[..., sax.SDict]]:
+ models = {}
+ for name, func in list(globals().items()):
+ if not callable(func):
+ continue
+ _func = func
+ while isinstance(_func, partial):
+ _func = _func.func
+ try:
+ sig = inspect.signature(_func)
+ except ValueError:
+ continue
+ if str(sig.return_annotation) == "sax.SDict":
+ models[name] = func
+ return models
diff --git a/cspdk/sin300/samples/circuit_simulations_nc.py b/cspdk/sin300/samples/circuit_simulations_nc.py
new file mode 100644
index 0000000..f80ca8d
--- /dev/null
+++ b/cspdk/sin300/samples/circuit_simulations_nc.py
@@ -0,0 +1,23 @@
+import jax.numpy as jnp
+import matplotlib.pyplot as plt
+import sax
+
+from cspdk.sin300 import PDK, cells
+
+if __name__ == "__main__":
+ c = cells.mzi_nc(delta_length=100)
+ c.show()
+ c.plot_netlist()
+ netlist = c.get_netlist()
+ models = PDK.models
+ circuit, _ = sax.circuit(netlist, models=models) # type: ignore
+ wl = jnp.linspace(1.5, 1.6, 256)
+
+ S = circuit(wl=wl)
+ plt.figure(figsize=(14, 4))
+ plt.title("MZI")
+ plt.plot(1e3 * wl, jnp.abs(S["o1", "o2"]) ** 2) # type: ignore
+ plt.xlabel("λ [nm]")
+ plt.ylabel("T")
+ plt.grid(True)
+ plt.show()
diff --git a/cspdk/sin300/samples/circuit_simulations_nc_with_routing.py b/cspdk/sin300/samples/circuit_simulations_nc_with_routing.py
new file mode 100644
index 0000000..a624476
--- /dev/null
+++ b/cspdk/sin300/samples/circuit_simulations_nc_with_routing.py
@@ -0,0 +1,31 @@
+import gdsfactory as gf
+import jax.numpy as jnp
+import matplotlib.pyplot as plt
+import sax
+
+from cspdk.sin300 import PDK, cells, tech
+
+if __name__ == "__main__":
+ c = gf.Component()
+ mzi1 = c << cells.mzi_nc(delta_length=10)
+ mzi2 = c << cells.mzi_nc(delta_length=100)
+ mzi2.move((200, 200))
+ route = tech.get_route_nc(mzi1.ports["o2"], mzi2.ports["o1"])
+ c.add(route.references)
+ c.add_port(name="o1", port=mzi1.ports["o1"])
+ c.add_port(name="o2", port=mzi2.ports["o2"])
+ c.show()
+ c.plot_netlist_flat()
+ netlist = c.get_netlist_recursive()
+ models = PDK.models
+ circuit, _ = sax.circuit(netlist, models=models) # type: ignore
+ wl = jnp.linspace(1.5, 1.6, 256)
+
+ S = circuit(wl=wl)
+ plt.figure(figsize=(14, 4))
+ plt.title("MZI")
+ plt.plot(1e3 * wl, jnp.abs(S["o1", "o2"]) ** 2) # type: ignore
+ plt.xlabel("λ [nm]")
+ plt.ylabel("T")
+ plt.grid(True)
+ plt.show()
diff --git a/cspdk/sin300/samples/component_from_yaml_nc.py b/cspdk/sin300/samples/component_from_yaml_nc.py
new file mode 100644
index 0000000..855a779
--- /dev/null
+++ b/cspdk/sin300/samples/component_from_yaml_nc.py
@@ -0,0 +1,54 @@
+sample_pads = """
+name: pads
+pdk: cspdk.sin300
+
+instances:
+ bl:
+ component: pad
+ tl:
+ component: pad
+ br:
+ component: pad
+ tr:
+ component: pad
+
+placements:
+ tl:
+ x: -200
+ y: 500
+
+ br:
+ x: 400
+ y: 400
+
+ tr:
+ x: 400
+ y: 600
+
+
+routes:
+ electrical:
+ settings:
+ cross_section: xs_metal_routing
+ separation: 20
+ width: 10
+ path_length_match_loops: 2
+ end_straight_length: 100
+ links:
+ tl,e3: tr,e1
+ bl,e3: br,e1
+ optical:
+ settings:
+ cross_section: xs_nc
+ radius: 100
+ links:
+ bl,e4: br,e3
+
+"""
+
+
+if __name__ == "__main__":
+ import gdsfactory as gf
+
+ c = gf.read.from_yaml(sample_pads)
+ c.show()
diff --git a/cspdk/sin300/samples/get_route_nc.py b/cspdk/sin300/samples/get_route_nc.py
new file mode 100644
index 0000000..168a817
--- /dev/null
+++ b/cspdk/sin300/samples/get_route_nc.py
@@ -0,0 +1,18 @@
+"""`get_route` returns a Manhattan route between two ports. """
+
+import gdsfactory as gf
+
+from cspdk.sin300 import cells, tech
+
+if __name__ == "__main__":
+ c = gf.Component("sample_connect")
+ mmi1 = c << cells.mmi1x2_nc()
+ mmi2 = c << cells.mmi1x2_nc()
+ mmi2.move((500, 50))
+
+ route = tech.get_route_nc(
+ mmi1.ports["o3"],
+ mmi2.ports["o1"],
+ )
+ c.add(route.references)
+ c.show()
diff --git a/cspdk/samples/mode_solver_n.py b/cspdk/sin300/samples/mode_solver_n.py
similarity index 100%
rename from cspdk/samples/mode_solver_n.py
rename to cspdk/sin300/samples/mode_solver_n.py
diff --git a/cspdk/sin300/tech.py b/cspdk/sin300/tech.py
new file mode 100644
index 0000000..0345aa5
--- /dev/null
+++ b/cspdk/sin300/tech.py
@@ -0,0 +1,198 @@
+"""Technology definitions."""
+
+import sys
+from functools import partial
+from typing import cast
+
+import gdsfactory as gf
+from gdsfactory.cross_section import get_cross_sections
+from gdsfactory.technology import LayerLevel, LayerMap, LayerStack, LayerViews
+from gdsfactory.typings import ConnectivitySpec, Layer
+
+from cspdk.sin300.config import PATH
+
+nm = 1e-3
+
+
+class LayerMapCornerstone(LayerMap):
+ WG: Layer = (3, 0)
+ SLAB: Layer = (5, 0)
+ FLOORPLAN: Layer = (99, 0)
+ HEATER: Layer = (39, 0)
+ GRA: Layer = (6, 0)
+ LBL: Layer = (100, 0)
+ PAD: Layer = (41, 0)
+ NITRIDE: Layer = (203, 0)
+ NITRIDE_ETCH: Layer = (204, 0)
+
+ # labels for gdsfactory
+ LABEL_SETTINGS: Layer = (100, 0)
+ LABEL_INSTANCE: Layer = (101, 0)
+
+
+LAYER = LayerMapCornerstone()
+
+
+def get_layer_stack(
+ thickness_nitride: float = 300 * nm,
+ zmin_heater: float = 1.1,
+ thickness_heater: float = 700 * nm,
+ zmin_metal: float = 1.1,
+ thickness_metal: float = 700 * nm,
+) -> LayerStack:
+ """Returns LayerStack.
+
+ based on paper https://www.degruyter.com/document/doi/10.1515/nanoph-2013-0034/html
+
+ Args:
+ thickness_nitride: nitride thickness in um.
+ zmin_heater: TiN heater.
+ thickness_heater: TiN thickness.
+ zmin_metal: metal thickness in um.
+ thickness_metal: metal2 thickness.
+ """
+
+ return LayerStack(
+ layers=dict(
+ nitride=LayerLevel(
+ layer=LAYER.NITRIDE,
+ thickness=thickness_nitride,
+ zmin=0.0,
+ material="sin",
+ info={"mesh_order": 2},
+ sidewall_angle=10,
+ width_to_z=0.5,
+ ),
+ nitride_etch=LayerLevel(
+ layer=LAYER.NITRIDE_ETCH,
+ thickness=thickness_nitride,
+ zmin=0.0,
+ material="sin",
+ info={"mesh_order": 1},
+ sidewall_angle=10,
+ width_to_z=0.5,
+ ),
+ heater=LayerLevel(
+ layer=LAYER.HEATER,
+ thickness=thickness_heater,
+ zmin=zmin_heater,
+ material="TiN",
+ info={"mesh_order": 1},
+ ),
+ metal=LayerLevel(
+ layer=LAYER.PAD,
+ thickness=thickness_metal,
+ zmin=zmin_metal + thickness_metal,
+ material="Aluminum",
+ info={"mesh_order": 2},
+ ),
+ )
+ )
+
+
+LAYER_STACK = get_layer_stack()
+LAYER_VIEWS = gf.technology.LayerViews(PATH.lyp_yaml)
+
+
+############################
+# Cross-sections functions
+############################
+xf_nc = partial(gf.cross_section.strip, layer=LAYER.NITRIDE, width=1.20, radius=25)
+xf_no = partial(gf.cross_section.strip, layer=LAYER.NITRIDE, width=0.95, radius=25)
+
+xf_nc_heater_metal = partial(
+ gf.cross_section.strip_heater_metal,
+ layer=LAYER.NITRIDE,
+ heater_width=2.5,
+ layer_heater=LAYER.HEATER,
+ width=1.20,
+)
+
+metal_routing = partial(
+ gf.cross_section.cross_section,
+ layer=LAYER.PAD,
+ width=10.0,
+ port_names=gf.cross_section.port_names_electrical,
+ port_types=gf.cross_section.port_types_electrical,
+ radius=None,
+)
+heater_metal = partial(metal_routing, width=4, layer=LAYER.HEATER)
+
+############################
+# Cross-sections
+############################
+xs_nc = xf_nc()
+xs_no = xf_no()
+
+xs_sc_heater_metal = xf_nc_heater_metal()
+xs_metal_routing = metal_routing()
+xs_heater_metal = heater_metal()
+
+cross_sections = get_cross_sections(sys.modules[__name__])
+
+############################
+# Routing functions
+############################
+_settings_nc = dict(
+ straight="straight_nc", cross_section=xs_nc, bend="bend_nc", taper="taper_nc"
+)
+_settings_no = dict(
+ straight="straight_no", cross_section=xs_no, bend="bend_no", taper="taper_no"
+)
+
+get_route_nc = partial(gf.routing.get_route, **_settings_nc)
+get_route_no = partial(gf.routing.get_route, **_settings_no)
+
+get_route_from_steps_nc = partial(
+ gf.routing.get_route_from_steps,
+ **_settings_nc,
+)
+get_route_from_steps_no = partial(
+ gf.routing.get_route_from_steps,
+ **_settings_no,
+)
+
+get_bundle_nc = partial(gf.routing.get_bundle, **_settings_nc)
+get_bundle_no = partial(gf.routing.get_bundle, **_settings_no)
+
+get_bundle_from_steps_nc = partial(
+ gf.routing.get_bundle_from_steps,
+ **_settings_nc,
+)
+get_bundle_from_steps_no = partial(
+ gf.routing.get_bundle_from_steps,
+ **_settings_no,
+)
+
+
+routing_strategies = dict(
+ get_route_nc=get_route_nc,
+ get_route_no=get_route_no,
+ get_route_from_steps_nc=get_route_from_steps_nc,
+ get_route_from_steps_no=get_route_from_steps_no,
+ get_bundle_nc=get_bundle_nc,
+ get_bundle_no=get_bundle_no,
+ get_bundle_from_steps_nc=get_bundle_from_steps_nc,
+ get_bundle_from_steps_no=get_bundle_from_steps_no,
+)
+
+
+if __name__ == "__main__":
+ from gdsfactory.technology.klayout_tech import KLayoutTechnology
+
+ LAYER_VIEWS = LayerViews(PATH.lyp_yaml)
+ # LAYER_VIEWS.to_lyp(PATH.lyp)
+
+ connectivity = cast(list[ConnectivitySpec], [("HEATER", "HEATER", "PAD")])
+
+ t = KLayoutTechnology(
+ name="Cornerstone_sin300",
+ layer_map=dict(LAYER),
+ layer_views=LAYER_VIEWS,
+ layer_stack=LAYER_STACK,
+ connectivity=connectivity,
+ )
+ t.write_tech(tech_dir=PATH.klayout)
+
+if __name__ == "__main__":
+ print(type(LAYER.NITRIDE), LAYER.NITRIDE)
diff --git a/docs/cells.rst b/docs/cells.rst
index 8873e8b..8bf25d4 100644
--- a/docs/cells.rst
+++ b/docs/cells.rst
@@ -1,23 +1,35 @@
-Here are the components available in the PDK
+Cells Si220
+=============================
-Cells
-=============================
+array
+----------------------------------------------------
+
+.. autofunction:: cspdk.si220.cells.array
+
+.. plot::
+ :include-source:
+
+ import cspdk
+
+ c = cspdk.si220.cells.array(component='pad', spacing=(150.0, 150.0), columns=6, rows=1, add_ports=True, centered=False)
+ c.plot()
+
bend_nc
----------------------------------------------------
-.. autofunction:: cspdk.cells.bend_nc
+.. autofunction:: cspdk.si220.cells.bend_nc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.bend_nc(radius=25.0, angle=90.0)
+ c = cspdk.si220.cells.bend_nc(radius=25.0, angle=90.0)
c.plot()
@@ -25,14 +37,14 @@ bend_nc
bend_no
----------------------------------------------------
-.. autofunction:: cspdk.cells.bend_no
+.. autofunction:: cspdk.si220.cells.bend_no
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.bend_no(radius=25.0, angle=90.0)
+ c = cspdk.si220.cells.bend_no(radius=25.0, angle=90.0)
c.plot()
@@ -40,14 +52,14 @@ bend_no
bend_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.bend_rc
+.. autofunction:: cspdk.si220.cells.bend_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.bend_rc(radius=25.0, angle=90.0)
+ c = cspdk.si220.cells.bend_rc(radius=25.0, angle=90.0)
c.plot()
@@ -55,14 +67,14 @@ bend_rc
bend_ro
----------------------------------------------------
-.. autofunction:: cspdk.cells.bend_ro
+.. autofunction:: cspdk.si220.cells.bend_ro
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.bend_ro(radius=25.0, angle=90.0)
+ c = cspdk.si220.cells.bend_ro(radius=25.0, angle=90.0)
c.plot()
@@ -70,14 +82,14 @@ bend_ro
bend_s
----------------------------------------------------
-.. autofunction:: cspdk.cells.bend_s
+.. autofunction:: cspdk.si220.cells.bend_s
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.bend_s(size=(11.0, 1.8), cross_section='xs_sc')
+ c = cspdk.si220.cells.bend_s(size=(11.0, 1.8), cross_section='xs_sc')
c.plot()
@@ -85,14 +97,14 @@ bend_s
bend_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.bend_sc
+.. autofunction:: cspdk.si220.cells.bend_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.bend_sc(radius=10.0, angle=90.0)
+ c = cspdk.si220.cells.bend_sc(radius=10.0, angle=90.0)
c.plot()
@@ -100,14 +112,14 @@ bend_sc
bend_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.bend_so
+.. autofunction:: cspdk.si220.cells.bend_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.bend_so(radius=10.0, angle=90.0)
+ c = cspdk.si220.cells.bend_so(radius=10.0, angle=90.0)
c.plot()
@@ -115,14 +127,14 @@ bend_so
coupler_nc
----------------------------------------------------
-.. autofunction:: cspdk.cells.coupler_nc
+.. autofunction:: cspdk.si220.cells.coupler_nc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.coupler_nc(gap=0.4, length=20.0, dx=10.0, dy=4.0)
+ c = cspdk.si220.cells.coupler_nc(gap=0.4, length=20.0, dx=10.0, dy=4.0)
c.plot()
@@ -130,14 +142,14 @@ coupler_nc
coupler_no
----------------------------------------------------
-.. autofunction:: cspdk.cells.coupler_no
+.. autofunction:: cspdk.si220.cells.coupler_no
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.coupler_no(gap=0.4, length=20.0, dx=10.0, dy=4.0)
+ c = cspdk.si220.cells.coupler_no(gap=0.4, length=20.0, dx=10.0, dy=4.0)
c.plot()
@@ -145,14 +157,14 @@ coupler_no
coupler_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.coupler_rc
+.. autofunction:: cspdk.si220.cells.coupler_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.coupler_rc(gap=0.236, length=20.0, dx=10.0, dy=4.0)
+ c = cspdk.si220.cells.coupler_rc(gap=0.236, length=20.0, dx=10.0, dy=4.0)
c.plot()
@@ -160,14 +172,14 @@ coupler_rc
coupler_ro
----------------------------------------------------
-.. autofunction:: cspdk.cells.coupler_ro
+.. autofunction:: cspdk.si220.cells.coupler_ro
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.coupler_ro(gap=0.236, length=20.0, dx=10.0, dy=4.0)
+ c = cspdk.si220.cells.coupler_ro(gap=0.236, length=20.0, dx=10.0, dy=4.0)
c.plot()
@@ -175,14 +187,14 @@ coupler_ro
coupler_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.coupler_sc
+.. autofunction:: cspdk.si220.cells.coupler_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.coupler_sc(gap=0.236, length=20.0, dx=10.0, dy=4.0)
+ c = cspdk.si220.cells.coupler_sc(gap=0.236, length=20.0, dx=10.0, dy=4.0)
c.plot()
@@ -190,14 +202,14 @@ coupler_sc
coupler_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.coupler_so
+.. autofunction:: cspdk.si220.cells.coupler_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.coupler_so(gap=0.236, length=20.0, dx=10.0, dy=4.0)
+ c = cspdk.si220.cells.coupler_so(gap=0.236, length=20.0, dx=10.0, dy=4.0)
c.plot()
@@ -205,14 +217,14 @@ coupler_so
crossing_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.crossing_rc
+.. autofunction:: cspdk.si220.cells.crossing_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.crossing_rc()
+ c = cspdk.si220.cells.crossing_rc()
c.plot()
@@ -220,14 +232,14 @@ crossing_rc
crossing_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.crossing_sc
+.. autofunction:: cspdk.si220.cells.crossing_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.crossing_sc()
+ c = cspdk.si220.cells.crossing_sc()
c.plot()
@@ -235,14 +247,14 @@ crossing_sc
crossing_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.crossing_so
+.. autofunction:: cspdk.si220.cells.crossing_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.crossing_so()
+ c = cspdk.si220.cells.crossing_so()
c.plot()
@@ -250,14 +262,14 @@ crossing_so
die_nc
----------------------------------------------------
-.. autofunction:: cspdk.cells.die_nc
+.. autofunction:: cspdk.si220.cells.die_nc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.die_nc()
+ c = cspdk.si220.cells.die_nc()
c.plot()
@@ -265,14 +277,14 @@ die_nc
die_no
----------------------------------------------------
-.. autofunction:: cspdk.cells.die_no
+.. autofunction:: cspdk.si220.cells.die_no
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.die_no()
+ c = cspdk.si220.cells.die_no()
c.plot()
@@ -280,14 +292,14 @@ die_no
die_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.die_rc
+.. autofunction:: cspdk.si220.cells.die_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.die_rc()
+ c = cspdk.si220.cells.die_rc()
c.plot()
@@ -295,14 +307,14 @@ die_rc
die_ro
----------------------------------------------------
-.. autofunction:: cspdk.cells.die_ro
+.. autofunction:: cspdk.si220.cells.die_ro
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.die_ro()
+ c = cspdk.si220.cells.die_ro()
c.plot()
@@ -310,14 +322,14 @@ die_ro
die_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.die_sc
+.. autofunction:: cspdk.si220.cells.die_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.die_sc()
+ c = cspdk.si220.cells.die_sc()
c.plot()
@@ -325,14 +337,14 @@ die_sc
die_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.die_so
+.. autofunction:: cspdk.si220.cells.die_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.die_so()
+ c = cspdk.si220.cells.die_so()
c.plot()
@@ -340,14 +352,14 @@ die_so
gc_elliptical_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.gc_elliptical_sc
+.. autofunction:: cspdk.si220.cells.gc_elliptical_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.gc_elliptical_sc(grating_line_width=0.343, fiber_angle=15, wavelength=1.53)
+ c = cspdk.si220.cells.gc_elliptical_sc(grating_line_width=0.343, fiber_angle=15, wavelength=1.53)
c.plot()
@@ -355,14 +367,14 @@ gc_elliptical_sc
gc_elliptical_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.gc_elliptical_so
+.. autofunction:: cspdk.si220.cells.gc_elliptical_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.gc_elliptical_so(grating_line_width=0.343, fiber_angle=15, wavelength=1.31)
+ c = cspdk.si220.cells.gc_elliptical_so(grating_line_width=0.343, fiber_angle=15, wavelength=1.31)
c.plot()
@@ -370,14 +382,14 @@ gc_elliptical_so
gc_rectangular_nc
----------------------------------------------------
-.. autofunction:: cspdk.cells.gc_rectangular_nc
+.. autofunction:: cspdk.si220.cells.gc_rectangular_nc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.gc_rectangular_nc()
+ c = cspdk.si220.cells.gc_rectangular_nc()
c.plot()
@@ -385,14 +397,14 @@ gc_rectangular_nc
gc_rectangular_no
----------------------------------------------------
-.. autofunction:: cspdk.cells.gc_rectangular_no
+.. autofunction:: cspdk.si220.cells.gc_rectangular_no
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.gc_rectangular_no()
+ c = cspdk.si220.cells.gc_rectangular_no()
c.plot()
@@ -400,14 +412,14 @@ gc_rectangular_no
gc_rectangular_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.gc_rectangular_rc
+.. autofunction:: cspdk.si220.cells.gc_rectangular_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.gc_rectangular_rc()
+ c = cspdk.si220.cells.gc_rectangular_rc()
c.plot()
@@ -415,14 +427,14 @@ gc_rectangular_rc
gc_rectangular_ro
----------------------------------------------------
-.. autofunction:: cspdk.cells.gc_rectangular_ro
+.. autofunction:: cspdk.si220.cells.gc_rectangular_ro
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.gc_rectangular_ro()
+ c = cspdk.si220.cells.gc_rectangular_ro()
c.plot()
@@ -430,14 +442,14 @@ gc_rectangular_ro
gc_rectangular_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.gc_rectangular_sc
+.. autofunction:: cspdk.si220.cells.gc_rectangular_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.gc_rectangular_sc()
+ c = cspdk.si220.cells.gc_rectangular_sc()
c.plot()
@@ -445,14 +457,14 @@ gc_rectangular_sc
gc_rectangular_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.gc_rectangular_so
+.. autofunction:: cspdk.si220.cells.gc_rectangular_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.gc_rectangular_so()
+ c = cspdk.si220.cells.gc_rectangular_so()
c.plot()
@@ -460,14 +472,14 @@ gc_rectangular_so
grating_coupler_array
----------------------------------------------------
-.. autofunction:: cspdk.cells.grating_coupler_array
+.. autofunction:: cspdk.si220.cells.grating_coupler_array
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.grating_coupler_array(pitch=127.0, n=6, port_name='o1', rotation=0.0, with_loopback=False, grating_coupler_spacing=0.0, cross_section='xs_nc')
+ c = cspdk.si220.cells.grating_coupler_array(pitch=127.0, n=6, port_name='o1', rotation=0.0, with_loopback=False, grating_coupler_spacing=0.0, cross_section='xs_nc')
c.plot()
@@ -475,14 +487,14 @@ grating_coupler_array
heater
----------------------------------------------------
-.. autofunction:: cspdk.cells.heater
+.. autofunction:: cspdk.si220.cells.heater
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.heater()
+ c = cspdk.si220.cells.heater()
c.plot()
@@ -490,14 +502,14 @@ heater
mmi1x2_nc
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi1x2_nc
+.. autofunction:: cspdk.si220.cells.mmi1x2_nc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi1x2_nc()
+ c = cspdk.si220.cells.mmi1x2_nc()
c.plot()
@@ -505,14 +517,14 @@ mmi1x2_nc
mmi1x2_no
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi1x2_no
+.. autofunction:: cspdk.si220.cells.mmi1x2_no
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi1x2_no()
+ c = cspdk.si220.cells.mmi1x2_no()
c.plot()
@@ -520,14 +532,14 @@ mmi1x2_no
mmi1x2_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi1x2_rc
+.. autofunction:: cspdk.si220.cells.mmi1x2_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi1x2_rc()
+ c = cspdk.si220.cells.mmi1x2_rc()
c.plot()
@@ -535,14 +547,14 @@ mmi1x2_rc
mmi1x2_ro
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi1x2_ro
+.. autofunction:: cspdk.si220.cells.mmi1x2_ro
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi1x2_ro()
+ c = cspdk.si220.cells.mmi1x2_ro()
c.plot()
@@ -550,14 +562,14 @@ mmi1x2_ro
mmi1x2_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi1x2_sc
+.. autofunction:: cspdk.si220.cells.mmi1x2_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi1x2_sc()
+ c = cspdk.si220.cells.mmi1x2_sc()
c.plot()
@@ -565,14 +577,14 @@ mmi1x2_sc
mmi1x2_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi1x2_so
+.. autofunction:: cspdk.si220.cells.mmi1x2_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi1x2_so()
+ c = cspdk.si220.cells.mmi1x2_so()
c.plot()
@@ -580,14 +592,14 @@ mmi1x2_so
mmi2x2_nc
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi2x2_nc
+.. autofunction:: cspdk.si220.cells.mmi2x2_nc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi2x2_nc()
+ c = cspdk.si220.cells.mmi2x2_nc()
c.plot()
@@ -595,14 +607,14 @@ mmi2x2_nc
mmi2x2_no
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi2x2_no
+.. autofunction:: cspdk.si220.cells.mmi2x2_no
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi2x2_no()
+ c = cspdk.si220.cells.mmi2x2_no()
c.plot()
@@ -610,14 +622,14 @@ mmi2x2_no
mmi2x2_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi2x2_rc
+.. autofunction:: cspdk.si220.cells.mmi2x2_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi2x2_rc()
+ c = cspdk.si220.cells.mmi2x2_rc()
c.plot()
@@ -625,14 +637,14 @@ mmi2x2_rc
mmi2x2_ro
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi2x2_ro
+.. autofunction:: cspdk.si220.cells.mmi2x2_ro
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi2x2_ro()
+ c = cspdk.si220.cells.mmi2x2_ro()
c.plot()
@@ -640,14 +652,14 @@ mmi2x2_ro
mmi2x2_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi2x2_sc
+.. autofunction:: cspdk.si220.cells.mmi2x2_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi2x2_sc()
+ c = cspdk.si220.cells.mmi2x2_sc()
c.plot()
@@ -655,14 +667,14 @@ mmi2x2_sc
mmi2x2_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.mmi2x2_so
+.. autofunction:: cspdk.si220.cells.mmi2x2_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mmi2x2_so()
+ c = cspdk.si220.cells.mmi2x2_so()
c.plot()
@@ -670,14 +682,14 @@ mmi2x2_so
mzi_nc
----------------------------------------------------
-.. autofunction:: cspdk.cells.mzi_nc
+.. autofunction:: cspdk.si220.cells.mzi_nc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mzi_nc(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
+ c = cspdk.si220.cells.mzi_nc(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
c.plot()
@@ -685,14 +697,14 @@ mzi_nc
mzi_no
----------------------------------------------------
-.. autofunction:: cspdk.cells.mzi_no
+.. autofunction:: cspdk.si220.cells.mzi_no
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mzi_no(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
+ c = cspdk.si220.cells.mzi_no(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
c.plot()
@@ -700,14 +712,14 @@ mzi_no
mzi_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.mzi_rc
+.. autofunction:: cspdk.si220.cells.mzi_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mzi_rc(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
+ c = cspdk.si220.cells.mzi_rc(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
c.plot()
@@ -715,14 +727,14 @@ mzi_rc
mzi_ro
----------------------------------------------------
-.. autofunction:: cspdk.cells.mzi_ro
+.. autofunction:: cspdk.si220.cells.mzi_ro
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mzi_ro(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
+ c = cspdk.si220.cells.mzi_ro(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
c.plot()
@@ -730,14 +742,14 @@ mzi_ro
mzi_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.mzi_sc
+.. autofunction:: cspdk.si220.cells.mzi_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mzi_sc(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
+ c = cspdk.si220.cells.mzi_sc(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
c.plot()
@@ -745,14 +757,14 @@ mzi_sc
mzi_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.mzi_so
+.. autofunction:: cspdk.si220.cells.mzi_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.mzi_so(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
+ c = cspdk.si220.cells.mzi_so(delta_length=10.0, length_y=2.0, length_x=0.1, add_electrical_ports_bot=True)
c.plot()
@@ -760,14 +772,14 @@ mzi_so
pad
----------------------------------------------------
-.. autofunction:: cspdk.cells.pad
+.. autofunction:: cspdk.si220.cells.pad
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.pad(size=(100.0, 100.0), layer=(41, 0), port_inclusion=0.0)
+ c = cspdk.si220.cells.pad(size=(100.0, 100.0), layer=(41, 0), port_inclusion=0.0)
c.plot()
@@ -775,14 +787,14 @@ pad
rectangle
----------------------------------------------------
-.. autofunction:: cspdk.cells.rectangle
+.. autofunction:: cspdk.si220.cells.rectangle
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.rectangle(size=(4.0, 2.0), layer=(99, 0), centered=False, port_type='electrical', port_orientations=(180.0, 90.0, 0.0, -90.0), round_corners_east_west=False, round_corners_north_south=False)
+ c = cspdk.si220.cells.rectangle(size=(4.0, 2.0), layer=(99, 0), centered=False, port_type='electrical', port_orientations=(180.0, 90.0, 0.0, -90.0), round_corners_east_west=False, round_corners_north_south=False)
c.plot()
@@ -790,14 +802,14 @@ rectangle
straight_nc
----------------------------------------------------
-.. autofunction:: cspdk.cells.straight_nc
+.. autofunction:: cspdk.si220.cells.straight_nc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.straight_nc(length=10.0)
+ c = cspdk.si220.cells.straight_nc(length=10.0)
c.plot()
@@ -805,14 +817,14 @@ straight_nc
straight_no
----------------------------------------------------
-.. autofunction:: cspdk.cells.straight_no
+.. autofunction:: cspdk.si220.cells.straight_no
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.straight_no(length=10.0)
+ c = cspdk.si220.cells.straight_no(length=10.0)
c.plot()
@@ -820,14 +832,14 @@ straight_no
straight_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.straight_rc
+.. autofunction:: cspdk.si220.cells.straight_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.straight_rc(length=10.0)
+ c = cspdk.si220.cells.straight_rc(length=10.0)
c.plot()
@@ -835,14 +847,14 @@ straight_rc
straight_ro
----------------------------------------------------
-.. autofunction:: cspdk.cells.straight_ro
+.. autofunction:: cspdk.si220.cells.straight_ro
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.straight_ro(length=10.0)
+ c = cspdk.si220.cells.straight_ro(length=10.0)
c.plot()
@@ -850,14 +862,14 @@ straight_ro
straight_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.straight_sc
+.. autofunction:: cspdk.si220.cells.straight_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.straight_sc(length=10.0)
+ c = cspdk.si220.cells.straight_sc(length=10.0)
c.plot()
@@ -865,14 +877,14 @@ straight_sc
straight_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.straight_so
+.. autofunction:: cspdk.si220.cells.straight_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.straight_so(length=10.0)
+ c = cspdk.si220.cells.straight_so(length=10.0)
c.plot()
@@ -880,14 +892,14 @@ straight_so
taper_nc
----------------------------------------------------
-.. autofunction:: cspdk.cells.taper_nc
+.. autofunction:: cspdk.si220.cells.taper_nc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.taper_nc(length=10.0, width1=0.5)
+ c = cspdk.si220.cells.taper_nc(length=10.0, width1=0.5)
c.plot()
@@ -895,14 +907,14 @@ taper_nc
taper_no
----------------------------------------------------
-.. autofunction:: cspdk.cells.taper_no
+.. autofunction:: cspdk.si220.cells.taper_no
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.taper_no(length=10.0, width1=0.5)
+ c = cspdk.si220.cells.taper_no(length=10.0, width1=0.5)
c.plot()
@@ -910,14 +922,14 @@ taper_no
taper_rc
----------------------------------------------------
-.. autofunction:: cspdk.cells.taper_rc
+.. autofunction:: cspdk.si220.cells.taper_rc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.taper_rc(length=10.0, width1=0.5)
+ c = cspdk.si220.cells.taper_rc(length=10.0, width1=0.5)
c.plot()
@@ -925,14 +937,14 @@ taper_rc
taper_ro
----------------------------------------------------
-.. autofunction:: cspdk.cells.taper_ro
+.. autofunction:: cspdk.si220.cells.taper_ro
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.taper_ro(length=10.0, width1=0.5)
+ c = cspdk.si220.cells.taper_ro(length=10.0, width1=0.5)
c.plot()
@@ -940,14 +952,14 @@ taper_ro
taper_sc
----------------------------------------------------
-.. autofunction:: cspdk.cells.taper_sc
+.. autofunction:: cspdk.si220.cells.taper_sc
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.taper_sc(length=10.0, width1=0.5)
+ c = cspdk.si220.cells.taper_sc(length=10.0, width1=0.5)
c.plot()
@@ -955,14 +967,14 @@ taper_sc
taper_so
----------------------------------------------------
-.. autofunction:: cspdk.cells.taper_so
+.. autofunction:: cspdk.si220.cells.taper_so
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.taper_so(length=10.0, width1=0.5)
+ c = cspdk.si220.cells.taper_so(length=10.0, width1=0.5)
c.plot()
@@ -970,14 +982,14 @@ taper_so
trans_sc_rc10
----------------------------------------------------
-.. autofunction:: cspdk.cells.trans_sc_rc10
+.. autofunction:: cspdk.si220.cells.trans_sc_rc10
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.trans_sc_rc10()
+ c = cspdk.si220.cells.trans_sc_rc10()
c.plot()
@@ -985,14 +997,14 @@ trans_sc_rc10
trans_sc_rc20
----------------------------------------------------
-.. autofunction:: cspdk.cells.trans_sc_rc20
+.. autofunction:: cspdk.si220.cells.trans_sc_rc20
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.trans_sc_rc20()
+ c = cspdk.si220.cells.trans_sc_rc20()
c.plot()
@@ -1000,14 +1012,14 @@ trans_sc_rc20
trans_sc_rc50
----------------------------------------------------
-.. autofunction:: cspdk.cells.trans_sc_rc50
+.. autofunction:: cspdk.si220.cells.trans_sc_rc50
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.trans_sc_rc50()
+ c = cspdk.si220.cells.trans_sc_rc50()
c.plot()
@@ -1015,12 +1027,12 @@ trans_sc_rc50
wire_corner
----------------------------------------------------
-.. autofunction:: cspdk.cells.wire_corner
+.. autofunction:: cspdk.si220.cells.wire_corner
.. plot::
:include-source:
import cspdk
- c = cspdk.cells.wire_corner(cross_section='xs_metal_routing')
+ c = cspdk.si220.cells.wire_corner(cross_section='xs_metal_routing')
c.plot()
diff --git a/install_tech.py b/install_tech.py
index 53aed55..eb079e1 100644
--- a/install_tech.py
+++ b/install_tech.py
@@ -14,6 +14,9 @@ def remove_path_or_dir(dest: pathlib.Path):
def make_link(src, dest, overwrite: bool = True) -> None:
dest = pathlib.Path(dest)
+ if not src.exists():
+ raise FileNotFoundError(f"{src} does not exist")
+
if dest.exists() and not overwrite:
print(f"{dest} already exists")
return
@@ -33,8 +36,13 @@ def make_link(src, dest, overwrite: bool = True) -> None:
klayout_folder = "KLayout" if sys.platform == "win32" else ".klayout"
cwd = pathlib.Path(__file__).resolve().parent
home = pathlib.Path.home()
- src = cwd / "cspdk" / "klayout"
dest_folder = home / klayout_folder / "tech"
dest_folder.mkdir(exist_ok=True, parents=True)
- dest = dest_folder / "cspdk"
+
+ src = cwd / "cspdk" / "si220" / "klayout"
+ dest = dest_folder / "cspdk_si220"
+ make_link(src=src, dest=dest)
+
+ src = cwd / "cspdk" / "sin300" / "klayout"
+ dest = dest_folder / "cspdk_sin300"
make_link(src=src, dest=dest)
diff --git a/pyproject.toml b/pyproject.toml
index 871ebfc..7cc274d 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -14,7 +14,7 @@ classifiers = [
"Operating System :: OS Independent"
]
dependencies = [
- "gdsfactory==7.25.0",
+ "gdsfactory==7.25.1",
"gplugins[sax]>=0.13,<0.14"
]
description = "CornerStone PDK"
diff --git a/tests/gds_ref/_bend.gds b/tests/gds_ref/_bend.gds
deleted file mode 100644
index 223bd77..0000000
Binary files a/tests/gds_ref/_bend.gds and /dev/null differ
diff --git a/tests/gds_ref/_gc_rectangular.gds b/tests/gds_ref/_gc_rectangular.gds
deleted file mode 100644
index beeacac..0000000
Binary files a/tests/gds_ref/_gc_rectangular.gds and /dev/null differ
diff --git a/tests/gds_ref/_mm1x2_nitride_cband.gds b/tests/gds_ref/_mm1x2_nitride_cband.gds
deleted file mode 100644
index bbcab54..0000000
Binary files a/tests/gds_ref/_mm1x2_nitride_cband.gds and /dev/null differ
diff --git a/tests/gds_ref/_mm2x2_nitride_cband.gds b/tests/gds_ref/_mm2x2_nitride_cband.gds
deleted file mode 100644
index 8c3d420..0000000
Binary files a/tests/gds_ref/_mm2x2_nitride_cband.gds and /dev/null differ
diff --git a/tests/gds_ref/_mmi1x2.gds b/tests/gds_ref/_mmi1x2.gds
deleted file mode 100644
index ec67fdc..0000000
Binary files a/tests/gds_ref/_mmi1x2.gds and /dev/null differ
diff --git a/tests/gds_ref/_mmi1x2_nitride_oband.gds b/tests/gds_ref/_mmi1x2_nitride_oband.gds
deleted file mode 100644
index 534adce..0000000
Binary files a/tests/gds_ref/_mmi1x2_nitride_oband.gds and /dev/null differ
diff --git a/tests/gds_ref/_mmi2x2.gds b/tests/gds_ref/_mmi2x2.gds
deleted file mode 100644
index 0a5a743..0000000
Binary files a/tests/gds_ref/_mmi2x2.gds and /dev/null differ
diff --git a/tests/gds_ref/_mmi2x2_nitride_oband.gds b/tests/gds_ref/_mmi2x2_nitride_oband.gds
deleted file mode 100644
index 4dde2da..0000000
Binary files a/tests/gds_ref/_mmi2x2_nitride_oband.gds and /dev/null differ
diff --git a/tests/gds_ref/_taper.gds b/tests/gds_ref/_taper.gds
deleted file mode 100644
index 8b0f8f1..0000000
Binary files a/tests/gds_ref/_taper.gds and /dev/null differ
diff --git a/tests/gds_ref/bend_euler.gds b/tests/gds_ref/bend_euler.gds
deleted file mode 100644
index f2e585f..0000000
Binary files a/tests/gds_ref/bend_euler.gds and /dev/null differ
diff --git a/tests/gds_ref/die_sc.gds b/tests/gds_ref/die_sc.gds
deleted file mode 100644
index 8eac2fc..0000000
Binary files a/tests/gds_ref/die_sc.gds and /dev/null differ
diff --git a/tests/gds_ref/die_so.gds b/tests/gds_ref/die_so.gds
deleted file mode 100644
index 1a70deb..0000000
Binary files a/tests/gds_ref/die_so.gds and /dev/null differ
diff --git a/tests/gds_ref/gc_rectangular.gds b/tests/gds_ref/gc_rectangular.gds
deleted file mode 100644
index 6b8d9ab..0000000
Binary files a/tests/gds_ref/gc_rectangular.gds and /dev/null differ
diff --git a/tests/gds_ref/gc_rectangular_nc.gds b/tests/gds_ref/gc_rectangular_nc.gds
deleted file mode 100644
index 9d8bcdc..0000000
Binary files a/tests/gds_ref/gc_rectangular_nc.gds and /dev/null differ
diff --git a/tests/gds_ref/gc_rectangular_no.gds b/tests/gds_ref/gc_rectangular_no.gds
deleted file mode 100644
index a34f5bf..0000000
Binary files a/tests/gds_ref/gc_rectangular_no.gds and /dev/null differ
diff --git a/tests/gds_ref/gc_rectangular_rc.gds b/tests/gds_ref/gc_rectangular_rc.gds
deleted file mode 100644
index d1204c7..0000000
Binary files a/tests/gds_ref/gc_rectangular_rc.gds and /dev/null differ
diff --git a/tests/gds_ref/gc_rectangular_ro.gds b/tests/gds_ref/gc_rectangular_ro.gds
deleted file mode 100644
index ef1748e..0000000
Binary files a/tests/gds_ref/gc_rectangular_ro.gds and /dev/null differ
diff --git a/tests/gds_ref/gc_rectangular_sc.gds b/tests/gds_ref/gc_rectangular_sc.gds
deleted file mode 100644
index 06e4073..0000000
Binary files a/tests/gds_ref/gc_rectangular_sc.gds and /dev/null differ
diff --git a/tests/gds_ref/gc_rectangular_so.gds b/tests/gds_ref/gc_rectangular_so.gds
deleted file mode 100644
index a4f33e4..0000000
Binary files a/tests/gds_ref/gc_rectangular_so.gds and /dev/null differ
diff --git a/tests/gds_ref/grating_coupler_array.gds b/tests/gds_ref/grating_coupler_array.gds
deleted file mode 100644
index 61ece74..0000000
Binary files a/tests/gds_ref/grating_coupler_array.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi1x2.gds b/tests/gds_ref/mmi1x2.gds
deleted file mode 100644
index 22b27c7..0000000
Binary files a/tests/gds_ref/mmi1x2.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi1x2_rc.gds b/tests/gds_ref/mmi1x2_rc.gds
deleted file mode 100644
index 8f05d09..0000000
Binary files a/tests/gds_ref/mmi1x2_rc.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi1x2_ro.gds b/tests/gds_ref/mmi1x2_ro.gds
deleted file mode 100644
index 8583a92..0000000
Binary files a/tests/gds_ref/mmi1x2_ro.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi1x2_sc.gds b/tests/gds_ref/mmi1x2_sc.gds
deleted file mode 100644
index a3446de..0000000
Binary files a/tests/gds_ref/mmi1x2_sc.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi1x2_so.gds b/tests/gds_ref/mmi1x2_so.gds
deleted file mode 100644
index ec11edc..0000000
Binary files a/tests/gds_ref/mmi1x2_so.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi2x2.gds b/tests/gds_ref/mmi2x2.gds
deleted file mode 100644
index b349bb6..0000000
Binary files a/tests/gds_ref/mmi2x2.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi2x2_rc.gds b/tests/gds_ref/mmi2x2_rc.gds
deleted file mode 100644
index 27a35aa..0000000
Binary files a/tests/gds_ref/mmi2x2_rc.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi2x2_ro.gds b/tests/gds_ref/mmi2x2_ro.gds
deleted file mode 100644
index b6c0477..0000000
Binary files a/tests/gds_ref/mmi2x2_ro.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi2x2_sc.gds b/tests/gds_ref/mmi2x2_sc.gds
deleted file mode 100644
index ddda3a7..0000000
Binary files a/tests/gds_ref/mmi2x2_sc.gds and /dev/null differ
diff --git a/tests/gds_ref/mmi2x2_so.gds b/tests/gds_ref/mmi2x2_so.gds
deleted file mode 100644
index 0195c3e..0000000
Binary files a/tests/gds_ref/mmi2x2_so.gds and /dev/null differ
diff --git a/tests/gds_ref/mzi_rc.gds b/tests/gds_ref/mzi_rc.gds
deleted file mode 100644
index 3369edc..0000000
Binary files a/tests/gds_ref/mzi_rc.gds and /dev/null differ
diff --git a/tests/gds_ref/mzi_ro.gds b/tests/gds_ref/mzi_ro.gds
deleted file mode 100644
index 6864743..0000000
Binary files a/tests/gds_ref/mzi_ro.gds and /dev/null differ
diff --git a/tests/gds_ref/mzi_sc.gds b/tests/gds_ref/mzi_sc.gds
deleted file mode 100644
index c1913f6..0000000
Binary files a/tests/gds_ref/mzi_sc.gds and /dev/null differ
diff --git a/tests/gds_ref/pad.gds b/tests/gds_ref/pad.gds
deleted file mode 100644
index e052818..0000000
Binary files a/tests/gds_ref/pad.gds and /dev/null differ
diff --git a/tests/gds_ref/rectangle.gds b/tests/gds_ref/rectangle.gds
deleted file mode 100644
index 1a18a75..0000000
Binary files a/tests/gds_ref/rectangle.gds and /dev/null differ
diff --git a/tests/gds_ref/straight.gds b/tests/gds_ref/straight.gds
deleted file mode 100644
index b080f71..0000000
Binary files a/tests/gds_ref/straight.gds and /dev/null differ
diff --git a/tests/gds_ref/straight_nc.gds b/tests/gds_ref/straight_nc.gds
deleted file mode 100644
index 85b4bdb..0000000
Binary files a/tests/gds_ref/straight_nc.gds and /dev/null differ
diff --git a/tests/gds_ref/straight_no.gds b/tests/gds_ref/straight_no.gds
deleted file mode 100644
index adc72fc..0000000
Binary files a/tests/gds_ref/straight_no.gds and /dev/null differ
diff --git a/tests/gds_ref/straight_rc.gds b/tests/gds_ref/straight_rc.gds
deleted file mode 100644
index e2f3fc7..0000000
Binary files a/tests/gds_ref/straight_rc.gds and /dev/null differ
diff --git a/tests/gds_ref/straight_ro.gds b/tests/gds_ref/straight_ro.gds
deleted file mode 100644
index 5aa0e4a..0000000
Binary files a/tests/gds_ref/straight_ro.gds and /dev/null differ
diff --git a/tests/gds_ref/straight_sc.gds b/tests/gds_ref/straight_sc.gds
deleted file mode 100644
index ca8c3c8..0000000
Binary files a/tests/gds_ref/straight_sc.gds and /dev/null differ
diff --git a/tests/gds_ref/straight_so.gds b/tests/gds_ref/straight_so.gds
deleted file mode 100644
index 33aa424..0000000
Binary files a/tests/gds_ref/straight_so.gds and /dev/null differ
diff --git a/tests/gds_ref/taper.gds b/tests/gds_ref/taper.gds
deleted file mode 100644
index 2c4bb62..0000000
Binary files a/tests/gds_ref/taper.gds and /dev/null differ
diff --git a/tests/gds_ref/taper_cross_section.gds b/tests/gds_ref/taper_cross_section.gds
deleted file mode 100644
index 3d5e229..0000000
Binary files a/tests/gds_ref/taper_cross_section.gds and /dev/null differ
diff --git a/tests/gds_ref/trans_sc_rc10.gds b/tests/gds_ref/trans_sc_rc10.gds
deleted file mode 100644
index a2dd9b9..0000000
Binary files a/tests/gds_ref/trans_sc_rc10.gds and /dev/null differ
diff --git a/tests/gds_ref/trans_sc_rc20.gds b/tests/gds_ref/trans_sc_rc20.gds
deleted file mode 100644
index 9828c9b..0000000
Binary files a/tests/gds_ref/trans_sc_rc20.gds and /dev/null differ
diff --git a/tests/gds_ref/trans_sc_rc50.gds b/tests/gds_ref/trans_sc_rc50.gds
deleted file mode 100644
index 96fe0ad..0000000
Binary files a/tests/gds_ref/trans_sc_rc50.gds and /dev/null differ
diff --git a/tests/gds_ref/wire_corner.gds b/tests/gds_ref/wire_corner.gds
deleted file mode 100644
index ba22294..0000000
Binary files a/tests/gds_ref/wire_corner.gds and /dev/null differ
diff --git a/tests/gds_ref/array.gds b/tests/gds_ref_si220/array.gds
similarity index 100%
rename from tests/gds_ref/array.gds
rename to tests/gds_ref_si220/array.gds
diff --git a/tests/gds_ref/bend_rc.gds b/tests/gds_ref_si220/bend_rc.gds
similarity index 96%
rename from tests/gds_ref/bend_rc.gds
rename to tests/gds_ref_si220/bend_rc.gds
index 6e3da24..c61debd 100644
Binary files a/tests/gds_ref/bend_rc.gds and b/tests/gds_ref_si220/bend_rc.gds differ
diff --git a/tests/gds_ref/bend_ro.gds b/tests/gds_ref_si220/bend_ro.gds
similarity index 96%
rename from tests/gds_ref/bend_ro.gds
rename to tests/gds_ref_si220/bend_ro.gds
index a2c6b06..e4bba42 100644
Binary files a/tests/gds_ref/bend_ro.gds and b/tests/gds_ref_si220/bend_ro.gds differ
diff --git a/tests/gds_ref/bend_s.gds b/tests/gds_ref_si220/bend_s.gds
similarity index 98%
rename from tests/gds_ref/bend_s.gds
rename to tests/gds_ref_si220/bend_s.gds
index 481b023..a9109ff 100644
Binary files a/tests/gds_ref/bend_s.gds and b/tests/gds_ref_si220/bend_s.gds differ
diff --git a/tests/gds_ref_si220/bend_s.oas b/tests/gds_ref_si220/bend_s.oas
new file mode 100644
index 0000000..2aeef85
Binary files /dev/null and b/tests/gds_ref_si220/bend_s.oas differ
diff --git a/tests/gds_ref/bend_sc.gds b/tests/gds_ref_si220/bend_sc.gds
similarity index 90%
rename from tests/gds_ref/bend_sc.gds
rename to tests/gds_ref_si220/bend_sc.gds
index 819ad2b..9531fe8 100644
Binary files a/tests/gds_ref/bend_sc.gds and b/tests/gds_ref_si220/bend_sc.gds differ
diff --git a/tests/gds_ref/bend_so.gds b/tests/gds_ref_si220/bend_so.gds
similarity index 90%
rename from tests/gds_ref/bend_so.gds
rename to tests/gds_ref_si220/bend_so.gds
index 88beed9..c25f92d 100644
Binary files a/tests/gds_ref/bend_so.gds and b/tests/gds_ref_si220/bend_so.gds differ
diff --git a/tests/gds_ref/coupler_rc.gds b/tests/gds_ref_si220/coupler_rc.gds
similarity index 100%
rename from tests/gds_ref/coupler_rc.gds
rename to tests/gds_ref_si220/coupler_rc.gds
diff --git a/tests/gds_ref/coupler_ro.gds b/tests/gds_ref_si220/coupler_ro.gds
similarity index 100%
rename from tests/gds_ref/coupler_ro.gds
rename to tests/gds_ref_si220/coupler_ro.gds
diff --git a/tests/gds_ref/coupler_sc.gds b/tests/gds_ref_si220/coupler_sc.gds
similarity index 100%
rename from tests/gds_ref/coupler_sc.gds
rename to tests/gds_ref_si220/coupler_sc.gds
diff --git a/tests/gds_ref/coupler_so.gds b/tests/gds_ref_si220/coupler_so.gds
similarity index 100%
rename from tests/gds_ref/coupler_so.gds
rename to tests/gds_ref_si220/coupler_so.gds
diff --git a/tests/gds_ref/crossing_rc.gds b/tests/gds_ref_si220/crossing_rc.gds
similarity index 100%
rename from tests/gds_ref/crossing_rc.gds
rename to tests/gds_ref_si220/crossing_rc.gds
diff --git a/tests/gds_ref/crossing_sc.gds b/tests/gds_ref_si220/crossing_sc.gds
similarity index 100%
rename from tests/gds_ref/crossing_sc.gds
rename to tests/gds_ref_si220/crossing_sc.gds
diff --git a/tests/gds_ref/crossing_so.gds b/tests/gds_ref_si220/crossing_so.gds
similarity index 100%
rename from tests/gds_ref/crossing_so.gds
rename to tests/gds_ref_si220/crossing_so.gds
diff --git a/tests/gds_ref/die_rc.gds b/tests/gds_ref_si220/die_rc.gds
similarity index 66%
rename from tests/gds_ref/die_rc.gds
rename to tests/gds_ref_si220/die_rc.gds
index bb40781..d70f857 100644
Binary files a/tests/gds_ref/die_rc.gds and b/tests/gds_ref_si220/die_rc.gds differ
diff --git a/tests/gds_ref/die_ro.gds b/tests/gds_ref_si220/die_ro.gds
similarity index 63%
rename from tests/gds_ref/die_ro.gds
rename to tests/gds_ref_si220/die_ro.gds
index 37c1f99..e464d37 100644
Binary files a/tests/gds_ref/die_ro.gds and b/tests/gds_ref_si220/die_ro.gds differ
diff --git a/tests/gds_ref_si220/die_sc.gds b/tests/gds_ref_si220/die_sc.gds
new file mode 100644
index 0000000..7eff2d0
Binary files /dev/null and b/tests/gds_ref_si220/die_sc.gds differ
diff --git a/tests/gds_ref_si220/die_sc.oas b/tests/gds_ref_si220/die_sc.oas
new file mode 100644
index 0000000..f488020
Binary files /dev/null and b/tests/gds_ref_si220/die_sc.oas differ
diff --git a/tests/gds_ref_si220/die_so.gds b/tests/gds_ref_si220/die_so.gds
new file mode 100644
index 0000000..43344d9
Binary files /dev/null and b/tests/gds_ref_si220/die_so.gds differ
diff --git a/tests/gds_ref/gc_elliptical_sc.gds b/tests/gds_ref_si220/gc_elliptical_sc.gds
similarity index 100%
rename from tests/gds_ref/gc_elliptical_sc.gds
rename to tests/gds_ref_si220/gc_elliptical_sc.gds
diff --git a/tests/gds_ref/gc_elliptical_so.gds b/tests/gds_ref_si220/gc_elliptical_so.gds
similarity index 100%
rename from tests/gds_ref/gc_elliptical_so.gds
rename to tests/gds_ref_si220/gc_elliptical_so.gds
diff --git a/tests/gds_ref_si220/gc_rectangular_rc.gds b/tests/gds_ref_si220/gc_rectangular_rc.gds
new file mode 100644
index 0000000..7c53a4c
Binary files /dev/null and b/tests/gds_ref_si220/gc_rectangular_rc.gds differ
diff --git a/tests/gds_ref_si220/gc_rectangular_ro.gds b/tests/gds_ref_si220/gc_rectangular_ro.gds
new file mode 100644
index 0000000..228a363
Binary files /dev/null and b/tests/gds_ref_si220/gc_rectangular_ro.gds differ
diff --git a/tests/gds_ref_si220/gc_rectangular_sc.gds b/tests/gds_ref_si220/gc_rectangular_sc.gds
new file mode 100644
index 0000000..7c407d5
Binary files /dev/null and b/tests/gds_ref_si220/gc_rectangular_sc.gds differ
diff --git a/tests/gds_ref_si220/gc_rectangular_so.gds b/tests/gds_ref_si220/gc_rectangular_so.gds
new file mode 100644
index 0000000..94791d9
Binary files /dev/null and b/tests/gds_ref_si220/gc_rectangular_so.gds differ
diff --git a/tests/gds_ref_si220/grating_coupler_array.gds b/tests/gds_ref_si220/grating_coupler_array.gds
new file mode 100644
index 0000000..355c09d
Binary files /dev/null and b/tests/gds_ref_si220/grating_coupler_array.gds differ
diff --git a/tests/gds_ref_si220/grating_coupler_array.oas b/tests/gds_ref_si220/grating_coupler_array.oas
new file mode 100644
index 0000000..27e94e2
Binary files /dev/null and b/tests/gds_ref_si220/grating_coupler_array.oas differ
diff --git a/tests/gds_ref_si220/heater.gds b/tests/gds_ref_si220/heater.gds
new file mode 100644
index 0000000..d1aa94a
Binary files /dev/null and b/tests/gds_ref_si220/heater.gds differ
diff --git a/tests/gds_ref_si220/mmi1x2_rc.gds b/tests/gds_ref_si220/mmi1x2_rc.gds
new file mode 100644
index 0000000..f466a2a
Binary files /dev/null and b/tests/gds_ref_si220/mmi1x2_rc.gds differ
diff --git a/tests/gds_ref_si220/mmi1x2_ro.gds b/tests/gds_ref_si220/mmi1x2_ro.gds
new file mode 100644
index 0000000..70d9abd
Binary files /dev/null and b/tests/gds_ref_si220/mmi1x2_ro.gds differ
diff --git a/tests/gds_ref_si220/mmi1x2_sc.gds b/tests/gds_ref_si220/mmi1x2_sc.gds
new file mode 100644
index 0000000..0da7a67
Binary files /dev/null and b/tests/gds_ref_si220/mmi1x2_sc.gds differ
diff --git a/tests/gds_ref_si220/mmi1x2_so.gds b/tests/gds_ref_si220/mmi1x2_so.gds
new file mode 100644
index 0000000..7b76284
Binary files /dev/null and b/tests/gds_ref_si220/mmi1x2_so.gds differ
diff --git a/tests/gds_ref_si220/mmi2x2_rc.gds b/tests/gds_ref_si220/mmi2x2_rc.gds
new file mode 100644
index 0000000..25b60c7
Binary files /dev/null and b/tests/gds_ref_si220/mmi2x2_rc.gds differ
diff --git a/tests/gds_ref_si220/mmi2x2_ro.gds b/tests/gds_ref_si220/mmi2x2_ro.gds
new file mode 100644
index 0000000..66aa709
Binary files /dev/null and b/tests/gds_ref_si220/mmi2x2_ro.gds differ
diff --git a/tests/gds_ref_si220/mmi2x2_sc.gds b/tests/gds_ref_si220/mmi2x2_sc.gds
new file mode 100644
index 0000000..5471106
Binary files /dev/null and b/tests/gds_ref_si220/mmi2x2_sc.gds differ
diff --git a/tests/gds_ref_si220/mmi2x2_so.gds b/tests/gds_ref_si220/mmi2x2_so.gds
new file mode 100644
index 0000000..bbcb80d
Binary files /dev/null and b/tests/gds_ref_si220/mmi2x2_so.gds differ
diff --git a/tests/gds_ref_si220/mzi_rc.gds b/tests/gds_ref_si220/mzi_rc.gds
new file mode 100644
index 0000000..68ac018
Binary files /dev/null and b/tests/gds_ref_si220/mzi_rc.gds differ
diff --git a/tests/gds_ref_si220/mzi_ro.gds b/tests/gds_ref_si220/mzi_ro.gds
new file mode 100644
index 0000000..6960ea8
Binary files /dev/null and b/tests/gds_ref_si220/mzi_ro.gds differ
diff --git a/tests/gds_ref/mzi.gds b/tests/gds_ref_si220/mzi_sc.gds
similarity index 61%
rename from tests/gds_ref/mzi.gds
rename to tests/gds_ref_si220/mzi_sc.gds
index f1cb13a..66f0aa6 100644
Binary files a/tests/gds_ref/mzi.gds and b/tests/gds_ref_si220/mzi_sc.gds differ
diff --git a/tests/gds_ref/mzi_so.gds b/tests/gds_ref_si220/mzi_so.gds
similarity index 60%
rename from tests/gds_ref/mzi_so.gds
rename to tests/gds_ref_si220/mzi_so.gds
index 80bece1..b62bd95 100644
Binary files a/tests/gds_ref/mzi_so.gds and b/tests/gds_ref_si220/mzi_so.gds differ
diff --git a/tests/gds_ref_si220/pad.gds b/tests/gds_ref_si220/pad.gds
new file mode 100644
index 0000000..bc585bf
Binary files /dev/null and b/tests/gds_ref_si220/pad.gds differ
diff --git a/tests/gds_ref_si220/rectangle.gds b/tests/gds_ref_si220/rectangle.gds
new file mode 100644
index 0000000..be4b642
Binary files /dev/null and b/tests/gds_ref_si220/rectangle.gds differ
diff --git a/tests/gds_ref_si220/straight_rc.gds b/tests/gds_ref_si220/straight_rc.gds
new file mode 100644
index 0000000..392de27
Binary files /dev/null and b/tests/gds_ref_si220/straight_rc.gds differ
diff --git a/tests/gds_ref_si220/straight_ro.gds b/tests/gds_ref_si220/straight_ro.gds
new file mode 100644
index 0000000..9e3a590
Binary files /dev/null and b/tests/gds_ref_si220/straight_ro.gds differ
diff --git a/tests/gds_ref/_straight.gds b/tests/gds_ref_si220/straight_sc.gds
similarity index 63%
rename from tests/gds_ref/_straight.gds
rename to tests/gds_ref_si220/straight_sc.gds
index 4072cfe..54b2b95 100644
Binary files a/tests/gds_ref/_straight.gds and b/tests/gds_ref_si220/straight_sc.gds differ
diff --git a/tests/gds_ref_si220/straight_sc.oas b/tests/gds_ref_si220/straight_sc.oas
new file mode 100644
index 0000000..df1c8a4
Binary files /dev/null and b/tests/gds_ref_si220/straight_sc.oas differ
diff --git a/tests/gds_ref_si220/straight_so.gds b/tests/gds_ref_si220/straight_so.gds
new file mode 100644
index 0000000..14c1605
Binary files /dev/null and b/tests/gds_ref_si220/straight_so.gds differ
diff --git a/tests/gds_ref/taper_rc.gds b/tests/gds_ref_si220/taper_rc.gds
similarity index 100%
rename from tests/gds_ref/taper_rc.gds
rename to tests/gds_ref_si220/taper_rc.gds
diff --git a/tests/gds_ref/taper_ro.gds b/tests/gds_ref_si220/taper_ro.gds
similarity index 100%
rename from tests/gds_ref/taper_ro.gds
rename to tests/gds_ref_si220/taper_ro.gds
diff --git a/tests/gds_ref/taper_sc.gds b/tests/gds_ref_si220/taper_sc.gds
similarity index 100%
rename from tests/gds_ref/taper_sc.gds
rename to tests/gds_ref_si220/taper_sc.gds
diff --git a/tests/gds_ref_si220/taper_sc.oas b/tests/gds_ref_si220/taper_sc.oas
new file mode 100644
index 0000000..41a3261
Binary files /dev/null and b/tests/gds_ref_si220/taper_sc.oas differ
diff --git a/tests/gds_ref/taper_so.gds b/tests/gds_ref_si220/taper_so.gds
similarity index 100%
rename from tests/gds_ref/taper_so.gds
rename to tests/gds_ref_si220/taper_so.gds
diff --git a/tests/gds_ref_si220/trans_sc_rc10.gds b/tests/gds_ref_si220/trans_sc_rc10.gds
new file mode 100644
index 0000000..6df7a23
Binary files /dev/null and b/tests/gds_ref_si220/trans_sc_rc10.gds differ
diff --git a/tests/gds_ref_si220/trans_sc_rc10.oas b/tests/gds_ref_si220/trans_sc_rc10.oas
new file mode 100644
index 0000000..3dc5fa1
Binary files /dev/null and b/tests/gds_ref_si220/trans_sc_rc10.oas differ
diff --git a/tests/gds_ref_si220/trans_sc_rc20.gds b/tests/gds_ref_si220/trans_sc_rc20.gds
new file mode 100644
index 0000000..8dd0846
Binary files /dev/null and b/tests/gds_ref_si220/trans_sc_rc20.gds differ
diff --git a/tests/gds_ref_si220/trans_sc_rc20.oas b/tests/gds_ref_si220/trans_sc_rc20.oas
new file mode 100644
index 0000000..fc427a5
Binary files /dev/null and b/tests/gds_ref_si220/trans_sc_rc20.oas differ
diff --git a/tests/gds_ref_si220/trans_sc_rc50.gds b/tests/gds_ref_si220/trans_sc_rc50.gds
new file mode 100644
index 0000000..6db1f5e
Binary files /dev/null and b/tests/gds_ref_si220/trans_sc_rc50.gds differ
diff --git a/tests/gds_ref_si220/trans_sc_rc50.oas b/tests/gds_ref_si220/trans_sc_rc50.oas
new file mode 100644
index 0000000..2ef859d
Binary files /dev/null and b/tests/gds_ref_si220/trans_sc_rc50.oas differ
diff --git a/tests/gds_ref_si220/wire_corner.gds b/tests/gds_ref_si220/wire_corner.gds
new file mode 100644
index 0000000..ce978d9
Binary files /dev/null and b/tests/gds_ref_si220/wire_corner.gds differ
diff --git a/tests/gds_ref_sin300/array.gds b/tests/gds_ref_sin300/array.gds
new file mode 100644
index 0000000..fb52ed8
Binary files /dev/null and b/tests/gds_ref_sin300/array.gds differ
diff --git a/tests/gds_ref/bend_nc.gds b/tests/gds_ref_sin300/bend_nc.gds
similarity index 95%
rename from tests/gds_ref/bend_nc.gds
rename to tests/gds_ref_sin300/bend_nc.gds
index 054b9a0..abde302 100644
Binary files a/tests/gds_ref/bend_nc.gds and b/tests/gds_ref_sin300/bend_nc.gds differ
diff --git a/tests/gds_ref/bend_no.gds b/tests/gds_ref_sin300/bend_no.gds
similarity index 95%
rename from tests/gds_ref/bend_no.gds
rename to tests/gds_ref_sin300/bend_no.gds
index da65ad3..75605ed 100644
Binary files a/tests/gds_ref/bend_no.gds and b/tests/gds_ref_sin300/bend_no.gds differ
diff --git a/tests/gds_ref_sin300/bend_s.gds b/tests/gds_ref_sin300/bend_s.gds
new file mode 100644
index 0000000..e57e4d5
Binary files /dev/null and b/tests/gds_ref_sin300/bend_s.gds differ
diff --git a/tests/gds_ref/coupler_nc.gds b/tests/gds_ref_sin300/coupler_nc.gds
similarity index 100%
rename from tests/gds_ref/coupler_nc.gds
rename to tests/gds_ref_sin300/coupler_nc.gds
diff --git a/tests/gds_ref/coupler_no.gds b/tests/gds_ref_sin300/coupler_no.gds
similarity index 100%
rename from tests/gds_ref/coupler_no.gds
rename to tests/gds_ref_sin300/coupler_no.gds
diff --git a/tests/gds_ref/die_nc.gds b/tests/gds_ref_sin300/die_nc.gds
similarity index 69%
rename from tests/gds_ref/die_nc.gds
rename to tests/gds_ref_sin300/die_nc.gds
index c898412..9ca56da 100644
Binary files a/tests/gds_ref/die_nc.gds and b/tests/gds_ref_sin300/die_nc.gds differ
diff --git a/tests/gds_ref/die_no.gds b/tests/gds_ref_sin300/die_no.gds
similarity index 69%
rename from tests/gds_ref/die_no.gds
rename to tests/gds_ref_sin300/die_no.gds
index cf1fdcf..b7f07b2 100644
Binary files a/tests/gds_ref/die_no.gds and b/tests/gds_ref_sin300/die_no.gds differ
diff --git a/tests/gds_ref_sin300/gc_elliptical_nc.gds b/tests/gds_ref_sin300/gc_elliptical_nc.gds
new file mode 100644
index 0000000..319e9ea
Binary files /dev/null and b/tests/gds_ref_sin300/gc_elliptical_nc.gds differ
diff --git a/tests/gds_ref_sin300/gc_elliptical_no.gds b/tests/gds_ref_sin300/gc_elliptical_no.gds
new file mode 100644
index 0000000..747967f
Binary files /dev/null and b/tests/gds_ref_sin300/gc_elliptical_no.gds differ
diff --git a/tests/gds_ref_sin300/gc_rectangular_nc.gds b/tests/gds_ref_sin300/gc_rectangular_nc.gds
new file mode 100644
index 0000000..835abc3
Binary files /dev/null and b/tests/gds_ref_sin300/gc_rectangular_nc.gds differ
diff --git a/tests/gds_ref_sin300/gc_rectangular_no.gds b/tests/gds_ref_sin300/gc_rectangular_no.gds
new file mode 100644
index 0000000..ea7788e
Binary files /dev/null and b/tests/gds_ref_sin300/gc_rectangular_no.gds differ
diff --git a/tests/gds_ref_sin300/grating_coupler_array.gds b/tests/gds_ref_sin300/grating_coupler_array.gds
new file mode 100644
index 0000000..2f96407
Binary files /dev/null and b/tests/gds_ref_sin300/grating_coupler_array.gds differ
diff --git a/tests/gds_ref/mmi1x2_nc.gds b/tests/gds_ref_sin300/mmi1x2_nc.gds
similarity index 100%
rename from tests/gds_ref/mmi1x2_nc.gds
rename to tests/gds_ref_sin300/mmi1x2_nc.gds
diff --git a/tests/gds_ref/mmi1x2_no.gds b/tests/gds_ref_sin300/mmi1x2_no.gds
similarity index 100%
rename from tests/gds_ref/mmi1x2_no.gds
rename to tests/gds_ref_sin300/mmi1x2_no.gds
diff --git a/tests/gds_ref/mmi2x2_nc.gds b/tests/gds_ref_sin300/mmi2x2_nc.gds
similarity index 100%
rename from tests/gds_ref/mmi2x2_nc.gds
rename to tests/gds_ref_sin300/mmi2x2_nc.gds
diff --git a/tests/gds_ref/mmi2x2_no.gds b/tests/gds_ref_sin300/mmi2x2_no.gds
similarity index 100%
rename from tests/gds_ref/mmi2x2_no.gds
rename to tests/gds_ref_sin300/mmi2x2_no.gds
diff --git a/tests/gds_ref/mzi_nc.gds b/tests/gds_ref_sin300/mzi_nc.gds
similarity index 52%
rename from tests/gds_ref/mzi_nc.gds
rename to tests/gds_ref_sin300/mzi_nc.gds
index a4231a6..75883f3 100644
Binary files a/tests/gds_ref/mzi_nc.gds and b/tests/gds_ref_sin300/mzi_nc.gds differ
diff --git a/tests/gds_ref/mzi_no.gds b/tests/gds_ref_sin300/mzi_no.gds
similarity index 91%
rename from tests/gds_ref/mzi_no.gds
rename to tests/gds_ref_sin300/mzi_no.gds
index 7831222..59da158 100644
Binary files a/tests/gds_ref/mzi_no.gds and b/tests/gds_ref_sin300/mzi_no.gds differ
diff --git a/tests/gds_ref_sin300/pad.gds b/tests/gds_ref_sin300/pad.gds
new file mode 100644
index 0000000..bc585bf
Binary files /dev/null and b/tests/gds_ref_sin300/pad.gds differ
diff --git a/tests/gds_ref_sin300/rectangle.gds b/tests/gds_ref_sin300/rectangle.gds
new file mode 100644
index 0000000..be4b642
Binary files /dev/null and b/tests/gds_ref_sin300/rectangle.gds differ
diff --git a/tests/gds_ref_sin300/straight_nc.gds b/tests/gds_ref_sin300/straight_nc.gds
new file mode 100644
index 0000000..3685775
Binary files /dev/null and b/tests/gds_ref_sin300/straight_nc.gds differ
diff --git a/tests/gds_ref_sin300/straight_no.gds b/tests/gds_ref_sin300/straight_no.gds
new file mode 100644
index 0000000..fdc0155
Binary files /dev/null and b/tests/gds_ref_sin300/straight_no.gds differ
diff --git a/tests/gds_ref/taper_nc.gds b/tests/gds_ref_sin300/taper_nc.gds
similarity index 100%
rename from tests/gds_ref/taper_nc.gds
rename to tests/gds_ref_sin300/taper_nc.gds
diff --git a/tests/gds_ref/taper_no.gds b/tests/gds_ref_sin300/taper_no.gds
similarity index 100%
rename from tests/gds_ref/taper_no.gds
rename to tests/gds_ref_sin300/taper_no.gds
diff --git a/tests/gds_ref_sin300/wire_corner.gds b/tests/gds_ref_sin300/wire_corner.gds
new file mode 100644
index 0000000..ce978d9
Binary files /dev/null and b/tests/gds_ref_sin300/wire_corner.gds differ
diff --git a/tests/test_netlists/test_netlists_gc_rectangular_.yml b/tests/test_netlists/test_netlists_gc_rectangular_.yml
deleted file mode 100644
index d351a0b..0000000
--- a/tests/test_netlists/test_netlists_gc_rectangular_.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-connections: {}
-instances: {}
-name: gc_rectangular
-placements: {}
-ports: {}
diff --git a/tests/test_netlists/test_netlists_mmi1x2_.yml b/tests/test_netlists/test_netlists_mmi1x2_.yml
deleted file mode 100644
index e2c95eb..0000000
--- a/tests/test_netlists/test_netlists_mmi1x2_.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-connections: {}
-instances: {}
-name: mmi1x2
-placements: {}
-ports: {}
diff --git a/tests/test_netlists/test_netlists_mmi2x2_.yml b/tests/test_netlists/test_netlists_mmi2x2_.yml
deleted file mode 100644
index b8136c1..0000000
--- a/tests/test_netlists/test_netlists_mmi2x2_.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-connections: {}
-instances: {}
-name: mmi2x2
-placements: {}
-ports: {}
diff --git a/tests/test_netlists/test_netlists_mzi_.yml b/tests/test_netlists/test_netlists_mzi_.yml
deleted file mode 100644
index 79f36f5..0000000
--- a/tests/test_netlists/test_netlists_mzi_.yml
+++ /dev/null
@@ -1,681 +0,0 @@
-connections:
- bend_euler_1,o1: cp1,o3
- bend_euler_1,o2: syl,o1
- bend_euler_2,o1: syl,o2
- bend_euler_2,o2: sxb,o1
- bend_euler_3,o1: cp1,o2
- bend_euler_3,o2: sytl,o1
- bend_euler_4,o1: sxt,o1
- bend_euler_4,o2: sytl,o2
- bend_euler_5,o1: straight_5,o2
- bend_euler_5,o2: straight_6,o1
- bend_euler_6,o1: straight_6,o2
- bend_euler_6,o2: straight_7,o1
- bend_euler_7,o1: straight_8,o2
- bend_euler_7,o2: straight_9,o1
- bend_euler_8,o1: straight_9,o2
- bend_euler_8,o2: straight_10,o1
- cp2,o2: straight_7,o2
- cp2,o3: straight_10,o2
- straight_5,o1: sxt,o2
- straight_8,o1: sxb,o2
-instances:
- bend_euler_1:
- component: bend_euler
- info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
- settings:
- angle: 90.0
- cross_section: xs_sc
- direction: ccw
- npoints: null
- p: 0.5
- radius: null
- with_arc_floorplan: true
- bend_euler_2:
- component: bend_euler
- info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
- settings:
- angle: 90.0
- cross_section: xs_sc
- direction: ccw
- npoints: null
- p: 0.5
- radius: null
- with_arc_floorplan: true
- bend_euler_3:
- component: bend_euler
- info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
- settings:
- angle: 90.0
- cross_section: xs_sc
- direction: ccw
- npoints: null
- p: 0.5
- radius: null
- with_arc_floorplan: true
- bend_euler_4:
- component: bend_euler
- info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
- settings:
- angle: 90.0
- cross_section: xs_sc
- direction: ccw
- npoints: null
- p: 0.5
- radius: null
- with_arc_floorplan: true
- bend_euler_5:
- component: bend_euler
- info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
- settings:
- angle: 90.0
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- direction: ccw
- npoints: null
- p: 0.5
- radius: null
- with_arc_floorplan: true
- bend_euler_6:
- component: bend_euler
- info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
- settings:
- angle: 90.0
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- direction: ccw
- npoints: null
- p: 0.5
- radius: null
- with_arc_floorplan: true
- bend_euler_7:
- component: bend_euler
- info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
- settings:
- angle: 90.0
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- direction: ccw
- npoints: null
- p: 0.5
- radius: null
- with_arc_floorplan: true
- bend_euler_8:
- component: bend_euler
- info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
- settings:
- angle: 90.0
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- direction: ccw
- npoints: null
- p: 0.5
- radius: null
- with_arc_floorplan: true
- cp1:
- component: mmi1x2
- info: {}
- settings:
- cross_section: xs_sc
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 10.0
- taper:
- function: taper
- width: null
- width_mmi: 2.5
- width_taper: 1.0
- cp2:
- component: mmi1x2
- info: {}
- settings:
- cross_section: xs_sc
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 10.0
- taper:
- function: taper
- width: null
- width_mmi: 2.5
- width_taper: 1.0
- straight_10:
- component: straight
- info:
- length: 0.01
- route_info_length: 0.01
- route_info_type: xs_sc
- route_info_weight: 0.01
- route_info_xs_sc_length: 0.01
- width: 0.45
- settings:
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- length: 0.01
- npoints: 2
- straight_5:
- component: straight
- info:
- length: 0.01
- route_info_length: 0.01
- route_info_type: xs_sc
- route_info_weight: 0.01
- route_info_xs_sc_length: 0.01
- width: 0.45
- settings:
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- length: 0.01
- npoints: 2
- straight_6:
- component: straight
- info:
- length: 2.0
- route_info_length: 2.0
- route_info_type: xs_sc
- route_info_weight: 2.0
- route_info_xs_sc_length: 2.0
- width: 0.45
- settings:
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- length: 2.0
- npoints: 2
- straight_7:
- component: straight
- info:
- length: 0.01
- route_info_length: 0.01
- route_info_type: xs_sc
- route_info_weight: 0.01
- route_info_xs_sc_length: 0.01
- width: 0.45
- settings:
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- length: 0.01
- npoints: 2
- straight_8:
- component: straight
- info:
- length: 0.01
- route_info_length: 0.01
- route_info_type: xs_sc
- route_info_weight: 0.01
- route_info_xs_sc_length: 0.01
- width: 0.45
- settings:
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- length: 0.01
- npoints: 2
- straight_9:
- component: straight
- info:
- length: 7.0
- route_info_length: 7.0
- route_info_type: xs_sc
- route_info_weight: 7.0
- route_info_xs_sc_length: 7.0
- width: 0.45
- settings:
- cross_section:
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- radius: 10.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 3
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.45
- width_function: null
- length: 7.0
- npoints: 2
- sxb:
- component: straight
- info:
- length: 0.1
- route_info_length: 0.1
- route_info_type: xs_sc
- route_info_weight: 0.1
- route_info_xs_sc_length: 0.1
- width: 0.45
- settings:
- cross_section: xs_sc
- length: 0.1
- npoints: 2
- sxt:
- component: straight
- info:
- length: 0.1
- route_info_length: 0.1
- route_info_type: xs_sc
- route_info_weight: 0.1
- route_info_xs_sc_length: 0.1
- width: 0.45
- settings:
- cross_section: xs_sc
- length: 0.1
- npoints: 2
- syl:
- component: straight
- info:
- length: 7.0
- route_info_length: 7.0
- route_info_type: xs_sc
- route_info_weight: 7.0
- route_info_xs_sc_length: 7.0
- width: 0.45
- settings:
- cross_section: xs_sc
- length: 7.0
- npoints: 2
- sytl:
- component: straight
- info:
- length: 2.0
- route_info_length: 2.0
- route_info_type: xs_sc
- route_info_weight: 2.0
- route_info_xs_sc_length: 2.0
- width: 0.45
- settings:
- cross_section: xs_sc
- length: 2.0
- npoints: 2
-name: mzi
-placements:
- bend_euler_1:
- mirror: true
- rotation: 0
- x: 15.5
- y: -0.625
- bend_euler_2:
- mirror: 0
- rotation: 270
- x: 25.5
- y: -17.625
- bend_euler_3:
- mirror: 0
- rotation: 0
- x: 15.5
- y: 0.625
- bend_euler_4:
- mirror: 0
- rotation: 180
- x: 35.5
- y: 22.625
- bend_euler_5:
- mirror: true
- rotation: 0
- x: 35.61
- y: 22.625
- bend_euler_6:
- mirror: 0
- rotation: 270
- x: 45.61
- y: 10.625
- bend_euler_7:
- mirror: 0
- rotation: 0
- x: 35.61
- y: -27.625
- bend_euler_8:
- mirror: true
- rotation: 90
- x: 45.61
- y: -10.625
- cp1:
- mirror: 0
- rotation: 0
- x: 0.0
- y: 0.0
- cp2:
- mirror: true
- rotation: 180
- x: 71.12
- y: 0.0
- straight_10:
- mirror: 0
- rotation: 0
- x: 55.61
- y: -0.625
- straight_5:
- mirror: 0
- rotation: 0
- x: 35.6
- y: 22.625
- straight_6:
- mirror: 0
- rotation: 270
- x: 45.61
- y: 12.625
- straight_7:
- mirror: 0
- rotation: 0
- x: 55.61
- y: 0.625
- straight_8:
- mirror: 0
- rotation: 0
- x: 35.6
- y: -27.625
- straight_9:
- mirror: 0
- rotation: 90
- x: 45.61
- y: -17.625
- sxb:
- mirror: 0
- rotation: 0
- x: 35.5
- y: -27.625
- sxt:
- mirror: 0
- rotation: 0
- x: 35.5
- y: 22.625
- syl:
- mirror: 0
- rotation: 270
- x: 25.5
- y: -10.625
- sytl:
- mirror: 0
- rotation: 90
- x: 25.5
- y: 10.625
-ports:
- o1: cp1,o1
- o2: cp2,o1
diff --git a/tests/test_netlists/test_netlists_straight_.yml b/tests/test_netlists/test_netlists_straight_.yml
deleted file mode 100644
index dc6aa4d..0000000
--- a/tests/test_netlists/test_netlists_straight_.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-connections: {}
-instances: {}
-name: straight
-placements: {}
-ports: {}
diff --git a/tests/test_netlists/test_netlists_taper_.yml b/tests/test_netlists/test_netlists_taper_.yml
deleted file mode 100644
index 472c945..0000000
--- a/tests/test_netlists/test_netlists_taper_.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-connections: {}
-instances: {}
-name: taper
-placements: {}
-ports: {}
diff --git a/tests/test_netlists/test_netlists_taper_cross_section_.yml b/tests/test_netlists/test_netlists_taper_cross_section_.yml
deleted file mode 100644
index 3196c53..0000000
--- a/tests/test_netlists/test_netlists_taper_cross_section_.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-connections: {}
-instances: {}
-name: taper_cross_section
-placements: {}
-ports: {}
diff --git a/tests/test_netlists.py b/tests/test_netlists_si220.py
similarity index 84%
rename from tests/test_netlists.py
rename to tests/test_netlists_si220.py
index 86b1ce5..1989829 100644
--- a/tests/test_netlists.py
+++ b/tests/test_netlists_si220.py
@@ -6,11 +6,18 @@
from omegaconf import OmegaConf
from pytest_regressions.data_regression import DataRegressionFixture
-from cspdk import PDK
+from cspdk.si220 import PDK
+
+
+@pytest.fixture(autouse=True)
+def activate_pdk():
+ PDK.activate()
+
cells = PDK.cells
skip_test = set()
cell_names = cells.keys() - skip_test
+cell_names = [name for name in cell_names if not name.startswith("_")]
@pytest.mark.parametrize("component_type", cell_names)
diff --git a/tests/test_netlists/test_netlists_array_.yml b/tests/test_netlists_si220/test_netlists_array_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_array_.yml
rename to tests/test_netlists_si220/test_netlists_array_.yml
diff --git a/tests/test_netlists/test_netlists_bend_rc_.yml b/tests/test_netlists_si220/test_netlists_bend_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_bend_rc_.yml
rename to tests/test_netlists_si220/test_netlists_bend_rc_.yml
diff --git a/tests/test_netlists/test_netlists_bend_ro_.yml b/tests/test_netlists_si220/test_netlists_bend_ro_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_bend_ro_.yml
rename to tests/test_netlists_si220/test_netlists_bend_ro_.yml
diff --git a/tests/test_netlists/test_netlists_bend_s_.yml b/tests/test_netlists_si220/test_netlists_bend_s_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_bend_s_.yml
rename to tests/test_netlists_si220/test_netlists_bend_s_.yml
diff --git a/tests/test_netlists/test_netlists_bend_sc_.yml b/tests/test_netlists_si220/test_netlists_bend_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_bend_sc_.yml
rename to tests/test_netlists_si220/test_netlists_bend_sc_.yml
diff --git a/tests/test_netlists/test_netlists_bend_so_.yml b/tests/test_netlists_si220/test_netlists_bend_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_bend_so_.yml
rename to tests/test_netlists_si220/test_netlists_bend_so_.yml
diff --git a/tests/test_netlists/test_netlists_coupler_rc_.yml b/tests/test_netlists_si220/test_netlists_coupler_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_coupler_rc_.yml
rename to tests/test_netlists_si220/test_netlists_coupler_rc_.yml
diff --git a/tests/test_netlists/test_netlists_coupler_ro_.yml b/tests/test_netlists_si220/test_netlists_coupler_ro_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_coupler_ro_.yml
rename to tests/test_netlists_si220/test_netlists_coupler_ro_.yml
diff --git a/tests/test_netlists/test_netlists_coupler_sc_.yml b/tests/test_netlists_si220/test_netlists_coupler_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_coupler_sc_.yml
rename to tests/test_netlists_si220/test_netlists_coupler_sc_.yml
diff --git a/tests/test_netlists/test_netlists_coupler_so_.yml b/tests/test_netlists_si220/test_netlists_coupler_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_coupler_so_.yml
rename to tests/test_netlists_si220/test_netlists_coupler_so_.yml
diff --git a/tests/test_netlists/test_netlists_crossing_rc_.yml b/tests/test_netlists_si220/test_netlists_crossing_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_crossing_rc_.yml
rename to tests/test_netlists_si220/test_netlists_crossing_rc_.yml
diff --git a/tests/test_netlists/test_netlists_crossing_sc_.yml b/tests/test_netlists_si220/test_netlists_crossing_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_crossing_sc_.yml
rename to tests/test_netlists_si220/test_netlists_crossing_sc_.yml
diff --git a/tests/test_netlists/test_netlists_crossing_so_.yml b/tests/test_netlists_si220/test_netlists_crossing_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_crossing_so_.yml
rename to tests/test_netlists_si220/test_netlists_crossing_so_.yml
diff --git a/tests/test_netlists/test_netlists_die_rc_.yml b/tests/test_netlists_si220/test_netlists_die_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_die_rc_.yml
rename to tests/test_netlists_si220/test_netlists_die_rc_.yml
diff --git a/tests/test_netlists/test_netlists_die_ro_.yml b/tests/test_netlists_si220/test_netlists_die_ro_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_die_ro_.yml
rename to tests/test_netlists_si220/test_netlists_die_ro_.yml
diff --git a/tests/test_netlists/test_netlists_die_sc_.yml b/tests/test_netlists_si220/test_netlists_die_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_die_sc_.yml
rename to tests/test_netlists_si220/test_netlists_die_sc_.yml
diff --git a/tests/test_netlists/test_netlists_die_so_.yml b/tests/test_netlists_si220/test_netlists_die_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_die_so_.yml
rename to tests/test_netlists_si220/test_netlists_die_so_.yml
diff --git a/tests/test_netlists/test_netlists_gc_elliptical_sc_.yml b/tests/test_netlists_si220/test_netlists_gc_elliptical_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_gc_elliptical_sc_.yml
rename to tests/test_netlists_si220/test_netlists_gc_elliptical_sc_.yml
diff --git a/tests/test_netlists/test_netlists_gc_elliptical_so_.yml b/tests/test_netlists_si220/test_netlists_gc_elliptical_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_gc_elliptical_so_.yml
rename to tests/test_netlists_si220/test_netlists_gc_elliptical_so_.yml
diff --git a/tests/test_netlists/test_netlists_gc_rectangular_rc_.yml b/tests/test_netlists_si220/test_netlists_gc_rectangular_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_gc_rectangular_rc_.yml
rename to tests/test_netlists_si220/test_netlists_gc_rectangular_rc_.yml
diff --git a/tests/test_netlists/test_netlists_gc_rectangular_ro_.yml b/tests/test_netlists_si220/test_netlists_gc_rectangular_ro_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_gc_rectangular_ro_.yml
rename to tests/test_netlists_si220/test_netlists_gc_rectangular_ro_.yml
diff --git a/tests/test_netlists/test_netlists_gc_rectangular_sc_.yml b/tests/test_netlists_si220/test_netlists_gc_rectangular_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_gc_rectangular_sc_.yml
rename to tests/test_netlists_si220/test_netlists_gc_rectangular_sc_.yml
diff --git a/tests/test_netlists/test_netlists_gc_rectangular_so_.yml b/tests/test_netlists_si220/test_netlists_gc_rectangular_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_gc_rectangular_so_.yml
rename to tests/test_netlists_si220/test_netlists_gc_rectangular_so_.yml
diff --git a/tests/test_netlists_si220/test_netlists_grating_coupler_array_.yml b/tests/test_netlists_si220/test_netlists_grating_coupler_array_.yml
new file mode 100644
index 0000000..7b3905b
--- /dev/null
+++ b/tests/test_netlists_si220/test_netlists_grating_coupler_array_.yml
@@ -0,0 +1,107 @@
+connections: {}
+instances:
+ gc_rectangular_sc_1:
+ component: gc_rectangular_sc
+ info:
+ fiber_angle: 10
+ polarization: te
+ wavelength: 1.55
+ settings: {}
+ gc_rectangular_sc_2:
+ component: gc_rectangular_sc
+ info:
+ fiber_angle: 10
+ polarization: te
+ wavelength: 1.55
+ settings: {}
+ gc_rectangular_sc_3:
+ component: gc_rectangular_sc
+ info:
+ fiber_angle: 10
+ polarization: te
+ wavelength: 1.55
+ settings: {}
+ gc_rectangular_sc_4:
+ component: gc_rectangular_sc
+ info:
+ fiber_angle: 10
+ polarization: te
+ wavelength: 1.55
+ settings: {}
+ gc_rectangular_sc_5:
+ component: gc_rectangular_sc
+ info:
+ fiber_angle: 10
+ polarization: te
+ wavelength: 1.55
+ settings: {}
+ gc_rectangular_sc_6:
+ component: gc_rectangular_sc
+ info:
+ fiber_angle: 10
+ polarization: te
+ wavelength: 1.55
+ settings: {}
+name: grating_coupler_array
+placements:
+ gc_rectangular_sc_1:
+ mirror: 0
+ rotation: 0
+ x: -193.743
+ y: 0.0
+ gc_rectangular_sc_2:
+ mirror: 0
+ rotation: 0
+ x: -66.743
+ y: 0.0
+ gc_rectangular_sc_3:
+ mirror: 0
+ rotation: 0
+ x: 60.257
+ y: 0.0
+ gc_rectangular_sc_4:
+ mirror: 0
+ rotation: 0
+ x: 187.257
+ y: 0.0
+ gc_rectangular_sc_5:
+ mirror: 0
+ rotation: 0
+ x: 314.257
+ y: 0.0
+ gc_rectangular_sc_6:
+ mirror: 0
+ rotation: 0
+ x: 441.257
+ y: 0.0
+ports:
+ o1: gc_rectangular_sc_1,o1
+ o2: gc_rectangular_sc_2,o1
+ o3: gc_rectangular_sc_3,o1
+ o4: gc_rectangular_sc_4,o1
+ o5: gc_rectangular_sc_5,o1
+ o6: gc_rectangular_sc_6,o1
+warnings:
+ vertical_te:
+ unconnected_ports:
+ - message: 6 unconnected vertical_te ports!
+ ports:
+ - gc_rectangular_sc_1,o2
+ - gc_rectangular_sc_2,o2
+ - gc_rectangular_sc_3,o2
+ - gc_rectangular_sc_4,o2
+ - gc_rectangular_sc_5,o2
+ - gc_rectangular_sc_6,o2
+ values:
+ - - 174.921
+ - 0.0
+ - - 301.921
+ - 0.0
+ - - 428.921
+ - 0.0
+ - - 555.921
+ - 0.0
+ - - 682.921
+ - 0.0
+ - - 809.921
+ - 0.0
diff --git a/tests/test_netlists/test_netlists_heater_.yml b/tests/test_netlists_si220/test_netlists_heater_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_heater_.yml
rename to tests/test_netlists_si220/test_netlists_heater_.yml
diff --git a/tests/test_netlists/test_netlists_mmi1x2_rc_.yml b/tests/test_netlists_si220/test_netlists_mmi1x2_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi1x2_rc_.yml
rename to tests/test_netlists_si220/test_netlists_mmi1x2_rc_.yml
diff --git a/tests/test_netlists/test_netlists_mmi1x2_ro_.yml b/tests/test_netlists_si220/test_netlists_mmi1x2_ro_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi1x2_ro_.yml
rename to tests/test_netlists_si220/test_netlists_mmi1x2_ro_.yml
diff --git a/tests/test_netlists/test_netlists_mmi1x2_sc_.yml b/tests/test_netlists_si220/test_netlists_mmi1x2_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi1x2_sc_.yml
rename to tests/test_netlists_si220/test_netlists_mmi1x2_sc_.yml
diff --git a/tests/test_netlists/test_netlists_mmi1x2_so_.yml b/tests/test_netlists_si220/test_netlists_mmi1x2_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi1x2_so_.yml
rename to tests/test_netlists_si220/test_netlists_mmi1x2_so_.yml
diff --git a/tests/test_netlists/test_netlists_mmi2x2_rc_.yml b/tests/test_netlists_si220/test_netlists_mmi2x2_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi2x2_rc_.yml
rename to tests/test_netlists_si220/test_netlists_mmi2x2_rc_.yml
diff --git a/tests/test_netlists/test_netlists_mmi2x2_ro_.yml b/tests/test_netlists_si220/test_netlists_mmi2x2_ro_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi2x2_ro_.yml
rename to tests/test_netlists_si220/test_netlists_mmi2x2_ro_.yml
diff --git a/tests/test_netlists/test_netlists_mmi2x2_sc_.yml b/tests/test_netlists_si220/test_netlists_mmi2x2_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi2x2_sc_.yml
rename to tests/test_netlists_si220/test_netlists_mmi2x2_sc_.yml
diff --git a/tests/test_netlists/test_netlists_mmi2x2_so_.yml b/tests/test_netlists_si220/test_netlists_mmi2x2_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi2x2_so_.yml
rename to tests/test_netlists_si220/test_netlists_mmi2x2_so_.yml
diff --git a/tests/test_netlists/test_netlists_mzi_rc_.yml b/tests/test_netlists_si220/test_netlists_mzi_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mzi_rc_.yml
rename to tests/test_netlists_si220/test_netlists_mzi_rc_.yml
diff --git a/tests/test_netlists/test_netlists_mzi_ro_.yml b/tests/test_netlists_si220/test_netlists_mzi_ro_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mzi_ro_.yml
rename to tests/test_netlists_si220/test_netlists_mzi_ro_.yml
diff --git a/tests/test_netlists/test_netlists_mzi_sc_.yml b/tests/test_netlists_si220/test_netlists_mzi_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mzi_sc_.yml
rename to tests/test_netlists_si220/test_netlists_mzi_sc_.yml
diff --git a/tests/test_netlists/test_netlists_mzi_so_.yml b/tests/test_netlists_si220/test_netlists_mzi_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mzi_so_.yml
rename to tests/test_netlists_si220/test_netlists_mzi_so_.yml
diff --git a/tests/test_netlists/test_netlists_pad_.yml b/tests/test_netlists_si220/test_netlists_pad_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_pad_.yml
rename to tests/test_netlists_si220/test_netlists_pad_.yml
diff --git a/tests/test_netlists/test_netlists_rectangle_.yml b/tests/test_netlists_si220/test_netlists_rectangle_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_rectangle_.yml
rename to tests/test_netlists_si220/test_netlists_rectangle_.yml
diff --git a/tests/test_netlists/test_netlists_straight_rc_.yml b/tests/test_netlists_si220/test_netlists_straight_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_straight_rc_.yml
rename to tests/test_netlists_si220/test_netlists_straight_rc_.yml
diff --git a/tests/test_netlists/test_netlists_straight_ro_.yml b/tests/test_netlists_si220/test_netlists_straight_ro_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_straight_ro_.yml
rename to tests/test_netlists_si220/test_netlists_straight_ro_.yml
diff --git a/tests/test_netlists/test_netlists_straight_sc_.yml b/tests/test_netlists_si220/test_netlists_straight_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_straight_sc_.yml
rename to tests/test_netlists_si220/test_netlists_straight_sc_.yml
diff --git a/tests/test_netlists/test_netlists_straight_so_.yml b/tests/test_netlists_si220/test_netlists_straight_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_straight_so_.yml
rename to tests/test_netlists_si220/test_netlists_straight_so_.yml
diff --git a/tests/test_netlists/test_netlists_taper_rc_.yml b/tests/test_netlists_si220/test_netlists_taper_rc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_taper_rc_.yml
rename to tests/test_netlists_si220/test_netlists_taper_rc_.yml
diff --git a/tests/test_netlists/test_netlists_taper_ro_.yml b/tests/test_netlists_si220/test_netlists_taper_ro_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_taper_ro_.yml
rename to tests/test_netlists_si220/test_netlists_taper_ro_.yml
diff --git a/tests/test_netlists/test_netlists_taper_sc_.yml b/tests/test_netlists_si220/test_netlists_taper_sc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_taper_sc_.yml
rename to tests/test_netlists_si220/test_netlists_taper_sc_.yml
diff --git a/tests/test_netlists/test_netlists_taper_so_.yml b/tests/test_netlists_si220/test_netlists_taper_so_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_taper_so_.yml
rename to tests/test_netlists_si220/test_netlists_taper_so_.yml
diff --git a/tests/test_netlists/test_netlists_trans_sc_rc10_.yml b/tests/test_netlists_si220/test_netlists_trans_sc_rc10_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_trans_sc_rc10_.yml
rename to tests/test_netlists_si220/test_netlists_trans_sc_rc10_.yml
diff --git a/tests/test_netlists/test_netlists_trans_sc_rc20_.yml b/tests/test_netlists_si220/test_netlists_trans_sc_rc20_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_trans_sc_rc20_.yml
rename to tests/test_netlists_si220/test_netlists_trans_sc_rc20_.yml
diff --git a/tests/test_netlists/test_netlists_trans_sc_rc50_.yml b/tests/test_netlists_si220/test_netlists_trans_sc_rc50_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_trans_sc_rc50_.yml
rename to tests/test_netlists_si220/test_netlists_trans_sc_rc50_.yml
diff --git a/tests/test_netlists/test_netlists_wire_corner_.yml b/tests/test_netlists_si220/test_netlists_wire_corner_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_wire_corner_.yml
rename to tests/test_netlists_si220/test_netlists_wire_corner_.yml
diff --git a/tests/test_netlists_sin300.py b/tests/test_netlists_sin300.py
new file mode 100644
index 0000000..9327e8a
--- /dev/null
+++ b/tests/test_netlists_sin300.py
@@ -0,0 +1,46 @@
+from __future__ import annotations
+
+import gdsfactory as gf
+import jsondiff
+import pytest
+from omegaconf import OmegaConf
+from pytest_regressions.data_regression import DataRegressionFixture
+
+from cspdk.sin300 import PDK
+
+
+@pytest.fixture(autouse=True)
+def activate_pdk():
+ PDK.activate()
+
+
+cells = PDK.cells
+skip_test = set()
+cell_names = cells.keys() - skip_test
+cell_names = [name for name in cell_names if not name.startswith("_")]
+
+
+@pytest.mark.parametrize("component_type", cell_names)
+def test_netlists(
+ component_type: str,
+ data_regression: DataRegressionFixture,
+ check: bool = True,
+ component_factory=cells,
+) -> None:
+ """Write netlists for hierarchical circuits.
+
+ Checks that both netlists are the same jsondiff does a hierarchical diff.
+
+ Component -> netlist -> Component -> netlist
+
+ """
+ c = component_factory[component_type]()
+ n = c.get_netlist()
+ if check:
+ data_regression.check(n)
+
+ yaml_str = OmegaConf.to_yaml(n, sort_keys=True)
+ c2 = gf.read.from_yaml(yaml_str, name=c.name)
+ n2 = c2.get_netlist()
+ d = jsondiff.diff(n, n2)
+ assert len(d) == 0, d
diff --git a/tests/test_netlists_sin300/test_netlists_array_.yml b/tests/test_netlists_sin300/test_netlists_array_.yml
new file mode 100644
index 0000000..6d301e6
--- /dev/null
+++ b/tests/test_netlists_sin300/test_netlists_array_.yml
@@ -0,0 +1,197 @@
+connections: {}
+instances:
+ pad_1__1_1:
+ component: pad
+ info:
+ layer:
+ - 41
+ - 0
+ size:
+ - 100.0
+ - 100.0
+ xsize: 100.0
+ ysize: 100.0
+ settings:
+ bbox_layers: null
+ bbox_offsets: null
+ layer:
+ - 41
+ - 0
+ port_inclusion: 0.0
+ port_orientation: null
+ size:
+ - 100.0
+ - 100.0
+ pad_1__1_2:
+ component: pad
+ info:
+ layer:
+ - 41
+ - 0
+ size:
+ - 100.0
+ - 100.0
+ xsize: 100.0
+ ysize: 100.0
+ settings:
+ bbox_layers: null
+ bbox_offsets: null
+ layer:
+ - 41
+ - 0
+ port_inclusion: 0.0
+ port_orientation: null
+ size:
+ - 100.0
+ - 100.0
+ pad_1__1_3:
+ component: pad
+ info:
+ layer:
+ - 41
+ - 0
+ size:
+ - 100.0
+ - 100.0
+ xsize: 100.0
+ ysize: 100.0
+ settings:
+ bbox_layers: null
+ bbox_offsets: null
+ layer:
+ - 41
+ - 0
+ port_inclusion: 0.0
+ port_orientation: null
+ size:
+ - 100.0
+ - 100.0
+ pad_1__1_4:
+ component: pad
+ info:
+ layer:
+ - 41
+ - 0
+ size:
+ - 100.0
+ - 100.0
+ xsize: 100.0
+ ysize: 100.0
+ settings:
+ bbox_layers: null
+ bbox_offsets: null
+ layer:
+ - 41
+ - 0
+ port_inclusion: 0.0
+ port_orientation: null
+ size:
+ - 100.0
+ - 100.0
+ pad_1__1_5:
+ component: pad
+ info:
+ layer:
+ - 41
+ - 0
+ size:
+ - 100.0
+ - 100.0
+ xsize: 100.0
+ ysize: 100.0
+ settings:
+ bbox_layers: null
+ bbox_offsets: null
+ layer:
+ - 41
+ - 0
+ port_inclusion: 0.0
+ port_orientation: null
+ size:
+ - 100.0
+ - 100.0
+ pad_1__1_6:
+ component: pad
+ info:
+ layer:
+ - 41
+ - 0
+ size:
+ - 100.0
+ - 100.0
+ xsize: 100.0
+ ysize: 100.0
+ settings:
+ bbox_layers: null
+ bbox_offsets: null
+ layer:
+ - 41
+ - 0
+ port_inclusion: 0.0
+ port_orientation: null
+ size:
+ - 100.0
+ - 100.0
+name: pad_array
+placements:
+ pad_1__1_1:
+ mirror: 0
+ rotation: 0
+ x: 0.0
+ y: 0.0
+ pad_1__1_2:
+ mirror: 0
+ rotation: 0
+ x: 150.0
+ y: 0.0
+ pad_1__1_3:
+ mirror: 0
+ rotation: 0
+ x: 300.0
+ y: 0.0
+ pad_1__1_4:
+ mirror: 0
+ rotation: 0
+ x: 450.0
+ y: 0.0
+ pad_1__1_5:
+ mirror: 0
+ rotation: 0
+ x: 600.0
+ y: 0.0
+ pad_1__1_6:
+ mirror: 0
+ rotation: 0
+ x: 750.0
+ y: 0.0
+ports:
+ e1_1_1: pad_1__1_1,e1
+ e1_1_2: pad_1__1_2,e1
+ e1_1_3: pad_1__1_3,e1
+ e1_1_4: pad_1__1_4,e1
+ e1_1_5: pad_1__1_5,e1
+ e1_1_6: pad_1__1_6,e1
+ e2_1_1: pad_1__1_1,e2
+ e2_1_2: pad_1__1_2,e2
+ e2_1_3: pad_1__1_3,e2
+ e2_1_4: pad_1__1_4,e2
+ e2_1_5: pad_1__1_5,e2
+ e2_1_6: pad_1__1_6,e2
+ e3_1_1: pad_1__1_1,e3
+ e3_1_2: pad_1__1_2,e3
+ e3_1_3: pad_1__1_3,e3
+ e3_1_4: pad_1__1_4,e3
+ e3_1_5: pad_1__1_5,e3
+ e3_1_6: pad_1__1_6,e3
+ e4_1_1: pad_1__1_1,e4
+ e4_1_2: pad_1__1_2,e4
+ e4_1_3: pad_1__1_3,e4
+ e4_1_4: pad_1__1_4,e4
+ e4_1_5: pad_1__1_5,e4
+ e4_1_6: pad_1__1_6,e4
+ pad_1_1: pad_1__1_1,pad
+ pad_1_2: pad_1__1_2,pad
+ pad_1_3: pad_1__1_3,pad
+ pad_1_4: pad_1__1_4,pad
+ pad_1_5: pad_1__1_5,pad
+ pad_1_6: pad_1__1_6,pad
diff --git a/tests/test_netlists/test_netlists_bend_nc_.yml b/tests/test_netlists_sin300/test_netlists_bend_nc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_bend_nc_.yml
rename to tests/test_netlists_sin300/test_netlists_bend_nc_.yml
diff --git a/tests/test_netlists/test_netlists_bend_no_.yml b/tests/test_netlists_sin300/test_netlists_bend_no_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_bend_no_.yml
rename to tests/test_netlists_sin300/test_netlists_bend_no_.yml
diff --git a/tests/test_netlists_sin300/test_netlists_bend_s_.yml b/tests/test_netlists_sin300/test_netlists_bend_s_.yml
new file mode 100644
index 0000000..14f136e
--- /dev/null
+++ b/tests/test_netlists_sin300/test_netlists_bend_s_.yml
@@ -0,0 +1,35 @@
+connections: {}
+instances:
+ bezier_1:
+ component: bezier
+ info:
+ end_angle: 0
+ length: 11.206
+ min_bend_radius: 13.012
+ start_angle: 0
+ settings:
+ bend_radius_error_type: null
+ control_points:
+ - - 0
+ - 0
+ - - 5.5
+ - 0
+ - - 5.5
+ - 1.8
+ - - 11.0
+ - 1.8
+ cross_section: xs_nc
+ end_angle: null
+ npoints: 99
+ start_angle: null
+ with_manhattan_facing_angles: true
+name: bend_s
+placements:
+ bezier_1:
+ mirror: 0
+ rotation: 0
+ x: 0.0
+ y: 0.0
+ports:
+ o1: bezier_1,o1
+ o2: bezier_1,o2
diff --git a/tests/test_netlists/test_netlists_coupler_nc_.yml b/tests/test_netlists_sin300/test_netlists_coupler_nc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_coupler_nc_.yml
rename to tests/test_netlists_sin300/test_netlists_coupler_nc_.yml
diff --git a/tests/test_netlists/test_netlists_coupler_no_.yml b/tests/test_netlists_sin300/test_netlists_coupler_no_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_coupler_no_.yml
rename to tests/test_netlists_sin300/test_netlists_coupler_no_.yml
diff --git a/tests/test_netlists/test_netlists_die_nc_.yml b/tests/test_netlists_sin300/test_netlists_die_nc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_die_nc_.yml
rename to tests/test_netlists_sin300/test_netlists_die_nc_.yml
diff --git a/tests/test_netlists/test_netlists_die_no_.yml b/tests/test_netlists_sin300/test_netlists_die_no_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_die_no_.yml
rename to tests/test_netlists_sin300/test_netlists_die_no_.yml
diff --git a/tests/test_netlists/test_netlists__straight_.yml b/tests/test_netlists_sin300/test_netlists_gc_elliptical_nc_.yml
similarity index 70%
rename from tests/test_netlists/test_netlists__straight_.yml
rename to tests/test_netlists_sin300/test_netlists_gc_elliptical_nc_.yml
index 4300f36..e8f6d9f 100644
--- a/tests/test_netlists/test_netlists__straight_.yml
+++ b/tests/test_netlists_sin300/test_netlists_gc_elliptical_nc_.yml
@@ -1,5 +1,5 @@
connections: {}
instances: {}
-name: _straight
+name: gc_elliptical_nc
placements: {}
ports: {}
diff --git a/tests/test_netlists/test_netlists__taper_.yml b/tests/test_netlists_sin300/test_netlists_gc_elliptical_no_.yml
similarity index 70%
rename from tests/test_netlists/test_netlists__taper_.yml
rename to tests/test_netlists_sin300/test_netlists_gc_elliptical_no_.yml
index 34af8fe..4c5f1e9 100644
--- a/tests/test_netlists/test_netlists__taper_.yml
+++ b/tests/test_netlists_sin300/test_netlists_gc_elliptical_no_.yml
@@ -1,5 +1,5 @@
connections: {}
instances: {}
-name: _taper
+name: gc_elliptical_no
placements: {}
ports: {}
diff --git a/tests/test_netlists/test_netlists_gc_rectangular_nc_.yml b/tests/test_netlists_sin300/test_netlists_gc_rectangular_nc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_gc_rectangular_nc_.yml
rename to tests/test_netlists_sin300/test_netlists_gc_rectangular_nc_.yml
diff --git a/tests/test_netlists/test_netlists_gc_rectangular_no_.yml b/tests/test_netlists_sin300/test_netlists_gc_rectangular_no_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_gc_rectangular_no_.yml
rename to tests/test_netlists_sin300/test_netlists_gc_rectangular_no_.yml
diff --git a/tests/test_netlists/test_netlists_grating_coupler_array_.yml b/tests/test_netlists_sin300/test_netlists_grating_coupler_array_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_grating_coupler_array_.yml
rename to tests/test_netlists_sin300/test_netlists_grating_coupler_array_.yml
diff --git a/tests/test_netlists/test_netlists_mmi1x2_nc_.yml b/tests/test_netlists_sin300/test_netlists_mmi1x2_nc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi1x2_nc_.yml
rename to tests/test_netlists_sin300/test_netlists_mmi1x2_nc_.yml
diff --git a/tests/test_netlists/test_netlists_mmi1x2_no_.yml b/tests/test_netlists_sin300/test_netlists_mmi1x2_no_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi1x2_no_.yml
rename to tests/test_netlists_sin300/test_netlists_mmi1x2_no_.yml
diff --git a/tests/test_netlists/test_netlists_mmi2x2_nc_.yml b/tests/test_netlists_sin300/test_netlists_mmi2x2_nc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi2x2_nc_.yml
rename to tests/test_netlists_sin300/test_netlists_mmi2x2_nc_.yml
diff --git a/tests/test_netlists/test_netlists_mmi2x2_no_.yml b/tests/test_netlists_sin300/test_netlists_mmi2x2_no_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mmi2x2_no_.yml
rename to tests/test_netlists_sin300/test_netlists_mmi2x2_no_.yml
diff --git a/tests/test_netlists/test_netlists_mzi_nc_.yml b/tests/test_netlists_sin300/test_netlists_mzi_nc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mzi_nc_.yml
rename to tests/test_netlists_sin300/test_netlists_mzi_nc_.yml
diff --git a/tests/test_netlists/test_netlists_mzi_no_.yml b/tests/test_netlists_sin300/test_netlists_mzi_no_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_mzi_no_.yml
rename to tests/test_netlists_sin300/test_netlists_mzi_no_.yml
diff --git a/tests/test_netlists/test_netlists__bend_.yml b/tests/test_netlists_sin300/test_netlists_pad_.yml
similarity index 82%
rename from tests/test_netlists/test_netlists__bend_.yml
rename to tests/test_netlists_sin300/test_netlists_pad_.yml
index d9fb972..a1f29ef 100644
--- a/tests/test_netlists/test_netlists__bend_.yml
+++ b/tests/test_netlists_sin300/test_netlists_pad_.yml
@@ -1,5 +1,5 @@
connections: {}
instances: {}
-name: _bend
+name: pad
placements: {}
ports: {}
diff --git a/tests/test_netlists_sin300/test_netlists_rectangle_.yml b/tests/test_netlists_sin300/test_netlists_rectangle_.yml
new file mode 100644
index 0000000..febfde9
--- /dev/null
+++ b/tests/test_netlists_sin300/test_netlists_rectangle_.yml
@@ -0,0 +1,31 @@
+connections: {}
+instances:
+ compass_1:
+ component: compass
+ info: {}
+ settings:
+ layer:
+ - 99
+ - 0
+ port_inclusion: 0.0
+ port_orientations:
+ - 180.0
+ - 90.0
+ - 0.0
+ - -90.0
+ port_type: electrical
+ size:
+ - 4.0
+ - 2.0
+name: rectangle
+placements:
+ compass_1:
+ mirror: 0
+ rotation: 0
+ x: 2.0
+ y: 1.0
+ports:
+ e1: compass_1,e1
+ e2: compass_1,e2
+ e3: compass_1,e3
+ e4: compass_1,e4
diff --git a/tests/test_netlists/test_netlists_straight_nc_.yml b/tests/test_netlists_sin300/test_netlists_straight_nc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_straight_nc_.yml
rename to tests/test_netlists_sin300/test_netlists_straight_nc_.yml
diff --git a/tests/test_netlists/test_netlists_straight_no_.yml b/tests/test_netlists_sin300/test_netlists_straight_no_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_straight_no_.yml
rename to tests/test_netlists_sin300/test_netlists_straight_no_.yml
diff --git a/tests/test_netlists/test_netlists_taper_nc_.yml b/tests/test_netlists_sin300/test_netlists_taper_nc_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_taper_nc_.yml
rename to tests/test_netlists_sin300/test_netlists_taper_nc_.yml
diff --git a/tests/test_netlists/test_netlists_taper_no_.yml b/tests/test_netlists_sin300/test_netlists_taper_no_.yml
similarity index 100%
rename from tests/test_netlists/test_netlists_taper_no_.yml
rename to tests/test_netlists_sin300/test_netlists_taper_no_.yml
diff --git a/tests/test_netlists/test_netlists_bend_euler_.yml b/tests/test_netlists_sin300/test_netlists_wire_corner_.yml
similarity index 55%
rename from tests/test_netlists/test_netlists_bend_euler_.yml
rename to tests/test_netlists_sin300/test_netlists_wire_corner_.yml
index 47a57e9..abe20c9 100644
--- a/tests/test_netlists/test_netlists_bend_euler_.yml
+++ b/tests/test_netlists_sin300/test_netlists_wire_corner_.yml
@@ -1,5 +1,6 @@
connections: {}
instances: {}
-name: bend_euler
+name: wire_corner$1
placements: {}
-ports: {}
+ports:
+ e1: e2
diff --git a/tests/test_pdk/test_settings__bend_.yml b/tests/test_pdk/test_settings__bend_.yml
deleted file mode 100644
index 22e6d92..0000000
--- a/tests/test_pdk/test_settings__bend_.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-function: _bend
-info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
-module: cspdk.cells
-name: _bend
-settings:
- angle: 90.0
- cross_section: xs_sc
- direction: ccw
- npoints: null
- p: 0.5
- radius: null
- with_arc_floorplan: true
diff --git a/tests/test_pdk/test_settings__gc_rectangular_.yml b/tests/test_pdk/test_settings__gc_rectangular_.yml
deleted file mode 100644
index 77608b6..0000000
--- a/tests/test_pdk/test_settings__gc_rectangular_.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-function: grating_coupler_rectangular
-info:
- fiber_angle: 10
- polarization: te
- wavelength: 1.55
-module: gdsfactory.components.grating_coupler_rectangular
-name: grating_coupler_rectangular_fcb0b7aa
-settings:
- cross_section: xs_sc
- fiber_angle: 10
- fill_factor: 0.5
- layer_grating:
- - 6
- - 0
- layer_slab:
- - 3
- - 0
- length_taper: 350
- n_periods: 30
- period: 0.75
- polarization: te
- slab_offset: 0
- slab_xmin: -1.0
- taper:
- function: taper
- wavelength: 1.55
- width_grating: 11.0
diff --git a/tests/test_pdk/test_settings__mm1x2_nitride_cband_.yml b/tests/test_pdk/test_settings__mm1x2_nitride_cband_.yml
deleted file mode 100644
index 7ccbdca..0000000
--- a/tests/test_pdk/test_settings__mm1x2_nitride_cband_.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-function: mmi1x2
-info: {}
-module: gdsfactory.components.mmi1x2
-name: mmi1x2_c06ba645
-settings:
- cross_section:
- add_pins_function_module: gdsfactory.add_pins
- add_pins_function_name: null
- auto_widen: false
- auto_widen_minimum_length: 200.0
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- end_straight_length: 0.01
- gap: 3.0
- info: {}
- min_length: 0.01
- radius: 25.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 203
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 1.2
- width_function: null
- start_straight_length: 0.01
- taper_length: 10.0
- width_wide: null
- gap: 0.4
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 50
- post_process: null
- straight:
- function: straight
- taper:
- function: taper
- width: null
- width_mmi: 12
- width_taper: 5.5
- with_bbox: true
diff --git a/tests/test_pdk/test_settings__mm2x2_nitride_cband_.yml b/tests/test_pdk/test_settings__mm2x2_nitride_cband_.yml
deleted file mode 100644
index ef401cc..0000000
--- a/tests/test_pdk/test_settings__mm2x2_nitride_cband_.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-function: mmi2x2
-info: {}
-module: gdsfactory.components.mmi2x2
-name: mmi2x2_c06ba645
-settings:
- cross_section:
- add_pins_function_module: gdsfactory.add_pins
- add_pins_function_name: null
- auto_widen: false
- auto_widen_minimum_length: 200.0
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- end_straight_length: 0.01
- gap: 3.0
- info: {}
- min_length: 0.01
- radius: 25.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 203
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 1.2
- width_function: null
- start_straight_length: 0.01
- taper_length: 10.0
- width_wide: null
- gap: 0.4
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 50
- post_process: null
- straight:
- function: straight
- taper:
- function: taper
- width: null
- width_mmi: 12
- width_taper: 5.5
- with_bbox: true
diff --git a/tests/test_pdk/test_settings__mmi1x2_.yml b/tests/test_pdk/test_settings__mmi1x2_.yml
deleted file mode 100644
index a00f5fb..0000000
--- a/tests/test_pdk/test_settings__mmi1x2_.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-function: mmi1x2
-info: {}
-module: gdsfactory.components.mmi1x2
-name: mmi1x2_18da61b4
-settings:
- cross_section: xs_sc
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 20
- post_process: null
- straight:
- function: straight
- taper:
- function: taper
- width: null
- width_mmi: 6
- width_taper: 1.5
- with_bbox: true
diff --git a/tests/test_pdk/test_settings__mmi1x2_nitride_oband_.yml b/tests/test_pdk/test_settings__mmi1x2_nitride_oband_.yml
deleted file mode 100644
index b0d942d..0000000
--- a/tests/test_pdk/test_settings__mmi1x2_nitride_oband_.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-function: mmi1x2
-info: {}
-module: gdsfactory.components.mmi1x2
-name: mmi1x2_c514a145
-settings:
- cross_section:
- add_pins_function_module: gdsfactory.add_pins
- add_pins_function_name: null
- auto_widen: false
- auto_widen_minimum_length: 200.0
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- end_straight_length: 0.01
- gap: 3.0
- info: {}
- min_length: 0.01
- radius: 25.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 203
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.95
- width_function: null
- start_straight_length: 0.01
- taper_length: 10.0
- width_wide: null
- gap: 0.4
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 50
- post_process: null
- straight:
- function: straight
- taper:
- function: taper
- width: null
- width_mmi: 12
- width_taper: 5.5
- with_bbox: true
diff --git a/tests/test_pdk/test_settings__mmi2x2_.yml b/tests/test_pdk/test_settings__mmi2x2_.yml
deleted file mode 100644
index c91d788..0000000
--- a/tests/test_pdk/test_settings__mmi2x2_.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-function: mmi2x2
-info: {}
-module: gdsfactory.components.mmi2x2
-name: mmi2x2_18da61b4
-settings:
- cross_section: xs_sc
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 20
- post_process: null
- straight:
- function: straight
- taper:
- function: taper
- width: null
- width_mmi: 6
- width_taper: 1.5
- with_bbox: true
diff --git a/tests/test_pdk/test_settings__mmi2x2_nitride_oband_.yml b/tests/test_pdk/test_settings__mmi2x2_nitride_oband_.yml
deleted file mode 100644
index 3cfab10..0000000
--- a/tests/test_pdk/test_settings__mmi2x2_nitride_oband_.yml
+++ /dev/null
@@ -1,53 +0,0 @@
-function: mmi2x2
-info: {}
-module: gdsfactory.components.mmi2x2
-name: mmi2x2_c514a145
-settings:
- cross_section:
- add_pins_function_module: gdsfactory.add_pins
- add_pins_function_name: null
- auto_widen: false
- auto_widen_minimum_length: 200.0
- bbox_layers: null
- bbox_offsets: null
- components_along_path: []
- end_straight_length: 0.01
- gap: 3.0
- info: {}
- min_length: 0.01
- radius: 25.0
- radius_min: 5.0
- sections:
- - hidden: false
- insets: null
- layer:
- - 203
- - 0
- name: _default
- offset: 0.0
- offset_function: null
- port_names:
- - o1
- - o2
- port_types:
- - optical
- - optical
- simplify: null
- width: 0.95
- width_function: null
- start_straight_length: 0.01
- taper_length: 10.0
- width_wide: null
- gap: 0.4
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 50
- post_process: null
- straight:
- function: straight
- taper:
- function: taper
- width: null
- width_mmi: 12
- width_taper: 5.5
- with_bbox: true
diff --git a/tests/test_pdk/test_settings__straight_.yml b/tests/test_pdk/test_settings__straight_.yml
deleted file mode 100644
index 5b8e41c..0000000
--- a/tests/test_pdk/test_settings__straight_.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-function: _straight
-info:
- length: 10.0
- route_info_length: 10.0
- route_info_type: xs_sc
- route_info_weight: 10.0
- route_info_xs_sc_length: 10.0
- width: 0.45
-module: cspdk.cells
-name: _straight
-settings:
- cross_section: xs_sc
- length: 10.0
diff --git a/tests/test_pdk/test_settings__taper_.yml b/tests/test_pdk/test_settings__taper_.yml
deleted file mode 100644
index 5f64ac8..0000000
--- a/tests/test_pdk/test_settings__taper_.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-function: _taper
-info:
- length: 10.0
- width1: 0.5
- width2: 0.5
-module: cspdk.cells
-name: _taper
-settings:
- cross_section: xs_sc
- length: 10.0
- port: null
- width1: 0.5
- width2: null
diff --git a/tests/test_pdk/test_settings_bend_euler_.yml b/tests/test_pdk/test_settings_bend_euler_.yml
deleted file mode 100644
index 8b3a9c3..0000000
--- a/tests/test_pdk/test_settings_bend_euler_.yml
+++ /dev/null
@@ -1,24 +0,0 @@
-function: bend_euler
-info:
- dy: 10.0
- length: 16.637
- radius: 10.0
- radius_min: 7.061
- route_info_length: 16.637
- route_info_n_bend_90: 1.0
- route_info_type: xs_sc
- route_info_weight: 16.637
- route_info_xs_sc_length: 16.637
- width: 0.45
-module: gdsfactory.components.bend_euler
-name: bend_euler
-settings:
- angle: 90.0
- cross_section: xs_sc
- direction: ccw
- info: null
- npoints: null
- p: 0.5
- post_process: null
- radius: null
- with_arc_floorplan: true
diff --git a/tests/test_pdk/test_settings_gc_rectangular_.yml b/tests/test_pdk/test_settings_gc_rectangular_.yml
deleted file mode 100644
index 5db460c..0000000
--- a/tests/test_pdk/test_settings_gc_rectangular_.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-function: gc_rectangular
-info:
- fiber_angle: 10
- polarization: te
- wavelength: 1.55
-module: cspdk.cells
-name: gc_rectangular
-settings:
- fiber_angle: 10
- fill_factor: 0.5
- layer_grating:
- - 6
- - 0
- layer_slab:
- - 3
- - 0
- length_taper: 350
- n_periods: 30
- slab_offset: 0
diff --git a/tests/test_pdk/test_settings_mmi1x2_.yml b/tests/test_pdk/test_settings_mmi1x2_.yml
deleted file mode 100644
index 57995a7..0000000
--- a/tests/test_pdk/test_settings_mmi1x2_.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-function: mmi1x2
-info: {}
-module: gdsfactory.components.mmi1x2
-name: mmi1x2
-settings:
- cross_section: xs_sc
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 10.0
- taper:
- function: taper
- width: null
- width_mmi: 2.5
- width_taper: 1.0
diff --git a/tests/test_pdk/test_settings_mmi2x2_.yml b/tests/test_pdk/test_settings_mmi2x2_.yml
deleted file mode 100644
index 7bfa3d6..0000000
--- a/tests/test_pdk/test_settings_mmi2x2_.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-function: mmi2x2
-info: {}
-module: gdsfactory.components.mmi2x2
-name: mmi2x2
-settings:
- cross_section: xs_sc
- gap_mmi: 0.25
- length_mmi: 5.5
- length_taper: 10.0
- taper:
- function: taper
- width: null
- width_mmi: 2.5
- width_taper: 1.0
diff --git a/tests/test_pdk/test_settings_mzi_.yml b/tests/test_pdk/test_settings_mzi_.yml
deleted file mode 100644
index 33b23d0..0000000
--- a/tests/test_pdk/test_settings_mzi_.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-function: mzi
-info: {}
-module: gdsfactory.components.mzi
-name: mzi
-settings:
- add_electrical_ports_bot: true
- add_optical_ports_arms: false
- bend:
- function: bend_euler
- combiner: null
- cross_section: xs_sc
- cross_section_x_bot: null
- cross_section_x_top: null
- delta_length: 10.0
- extend_ports_straight_x: null
- length_x: 0.1
- length_y: 2.0
- min_length: 0.01
- mirror_bot: false
- nbends: 2
- port_e0_combiner: o3
- port_e0_splitter: o3
- port_e1_combiner: o2
- port_e1_splitter: o2
- splitter: mmi1x2
- straight:
- function: straight
- straight_x_bot: null
- straight_x_top: null
- straight_y: null
- with_splitter: true
diff --git a/tests/test_pdk/test_settings_straight_.yml b/tests/test_pdk/test_settings_straight_.yml
deleted file mode 100644
index 9da98e8..0000000
--- a/tests/test_pdk/test_settings_straight_.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-function: straight
-info:
- length: 10.0
- route_info_length: 10.0
- route_info_type: xs_sc
- route_info_weight: 10.0
- route_info_xs_sc_length: 10.0
- width: 0.45
-module: gdsfactory.components.straight
-name: straight
-settings:
- cross_section: xs_sc
- info: null
- length: 10.0
- npoints: 2
- post_process: null
diff --git a/tests/test_pdk/test_settings_taper_.yml b/tests/test_pdk/test_settings_taper_.yml
deleted file mode 100644
index d945786..0000000
--- a/tests/test_pdk/test_settings_taper_.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-function: taper
-info:
- length: 10.0
- width1: 0.5
- width2: 0.5
-module: gdsfactory.components.taper
-name: taper
-settings:
- cross_section: xs_sc
- length: 10.0
- port: null
- port_order_name:
- - o1
- - o2
- port_order_types:
- - optical
- - optical
- width1: 0.5
- width2: null
- with_two_ports: true
diff --git a/tests/test_pdk/test_settings_taper_cross_section_.yml b/tests/test_pdk/test_settings_taper_cross_section_.yml
deleted file mode 100644
index eae24bf..0000000
--- a/tests/test_pdk/test_settings_taper_cross_section_.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-function: taper_cross_section
-info:
- length: 10
- route_info_length: 10.0
- route_info_type: xs_rc_tip
- route_info_weight: 10.0
- route_info_xs_rc_tip_length: 10.0
- route_info_xs_rc_tip_taper_length: 10
-module: cspdk.cells
-name: taper_cross_section
-settings:
- cross_section1: xs_rc_tip
- cross_section2: xs_rc
- length: 10
- linear: true
- npoints: 2
diff --git a/tests/test_pdk.py b/tests/test_pdk_si220.py
similarity index 76%
rename from tests/test_pdk.py
rename to tests/test_pdk_si220.py
index b4bf751..d4ed59a 100644
--- a/tests/test_pdk.py
+++ b/tests/test_pdk_si220.py
@@ -4,18 +4,25 @@
from gdsfactory.difftest import difftest
from pytest_regressions.data_regression import DataRegressionFixture
-from cspdk import PDK
+from cspdk.si220 import PDK
+
+
+@pytest.fixture(autouse=True)
+def activate_pdk():
+ PDK.activate()
+
cells = PDK.cells
skip_test = {"import_gds"}
-component_names = set(cells.keys()) - set(skip_test)
-dirpath = pathlib.Path(__file__).absolute().with_suffix(".gds").parent / "gds_ref"
+cell_names = set(cells.keys()) - set(skip_test)
+cell_names = [name for name in cell_names if not name.startswith("_")]
+dirpath = pathlib.Path(__file__).absolute().with_suffix(".gds").parent / "gds_ref_si220"
dirpath.mkdir(exist_ok=True, parents=True)
-@pytest.fixture(params=component_names, scope="function")
+@pytest.fixture(params=cell_names, scope="function")
def component_name(request) -> str:
return request.param
diff --git a/tests/test_pdk/test_settings_array_.yml b/tests/test_pdk_si220/test_settings_array_.yml
similarity index 100%
rename from tests/test_pdk/test_settings_array_.yml
rename to tests/test_pdk_si220/test_settings_array_.yml
diff --git a/tests/test_pdk/test_settings_bend_rc_.yml b/tests/test_pdk_si220/test_settings_bend_rc_.yml
similarity index 91%
rename from tests/test_pdk/test_settings_bend_rc_.yml
rename to tests/test_pdk_si220/test_settings_bend_rc_.yml
index 160b3db..ebb0607 100644
--- a/tests/test_pdk/test_settings_bend_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_bend_rc_.yml
@@ -10,7 +10,7 @@ info:
route_info_weight: 41.592
route_info_xs_rc_length: 41.592
width: 0.45
-module: cspdk.cells
+module: cspdk.si220.cells
name: bend_rc
settings:
angle: 90.0
diff --git a/tests/test_pdk/test_settings_bend_ro_.yml b/tests/test_pdk_si220/test_settings_bend_ro_.yml
similarity index 91%
rename from tests/test_pdk/test_settings_bend_ro_.yml
rename to tests/test_pdk_si220/test_settings_bend_ro_.yml
index 1f51621..f6f1cff 100644
--- a/tests/test_pdk/test_settings_bend_ro_.yml
+++ b/tests/test_pdk_si220/test_settings_bend_ro_.yml
@@ -10,7 +10,7 @@ info:
route_info_weight: 41.592
route_info_xs_ro_length: 41.592
width: 0.4
-module: cspdk.cells
+module: cspdk.si220.cells
name: bend_ro
settings:
angle: 90.0
diff --git a/tests/test_pdk/test_settings_bend_s_.yml b/tests/test_pdk_si220/test_settings_bend_s_.yml
similarity index 86%
rename from tests/test_pdk/test_settings_bend_s_.yml
rename to tests/test_pdk_si220/test_settings_bend_s_.yml
index 84490b5..d972f2a 100644
--- a/tests/test_pdk/test_settings_bend_s_.yml
+++ b/tests/test_pdk_si220/test_settings_bend_s_.yml
@@ -4,7 +4,7 @@ info:
length: 11.206
min_bend_radius: 13.012
start_angle: 0
-module: cspdk.cells
+module: cspdk.si220.cells
name: bend_s$1
settings:
cross_section: xs_sc
diff --git a/tests/test_pdk/test_settings_bend_sc_.yml b/tests/test_pdk_si220/test_settings_bend_sc_.yml
similarity index 91%
rename from tests/test_pdk/test_settings_bend_sc_.yml
rename to tests/test_pdk_si220/test_settings_bend_sc_.yml
index 6e484c9..18d5baf 100644
--- a/tests/test_pdk/test_settings_bend_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_bend_sc_.yml
@@ -10,7 +10,7 @@ info:
route_info_weight: 16.637
route_info_xs_sc_length: 16.637
width: 0.45
-module: cspdk.cells
+module: cspdk.si220.cells
name: bend_sc
settings:
angle: 90.0
diff --git a/tests/test_pdk/test_settings_bend_so_.yml b/tests/test_pdk_si220/test_settings_bend_so_.yml
similarity index 91%
rename from tests/test_pdk/test_settings_bend_so_.yml
rename to tests/test_pdk_si220/test_settings_bend_so_.yml
index 394d4d4..63c66d7 100644
--- a/tests/test_pdk/test_settings_bend_so_.yml
+++ b/tests/test_pdk_si220/test_settings_bend_so_.yml
@@ -10,7 +10,7 @@ info:
route_info_weight: 16.637
route_info_xs_so_length: 16.637
width: 0.4
-module: cspdk.cells
+module: cspdk.si220.cells
name: bend_so
settings:
angle: 90.0
diff --git a/tests/test_pdk/test_settings_coupler_rc_.yml b/tests/test_pdk_si220/test_settings_coupler_rc_.yml
similarity index 84%
rename from tests/test_pdk/test_settings_coupler_rc_.yml
rename to tests/test_pdk_si220/test_settings_coupler_rc_.yml
index e571155..62142ff 100644
--- a/tests/test_pdk/test_settings_coupler_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_coupler_rc_.yml
@@ -2,7 +2,7 @@ function: coupler_rc
info:
length: 10.192
min_bend_radius: 11.701
-module: cspdk.cells
+module: cspdk.si220.cells
name: coupler_rc
settings:
dx: 10.0
diff --git a/tests/test_pdk/test_settings_coupler_ro_.yml b/tests/test_pdk_si220/test_settings_coupler_ro_.yml
similarity index 84%
rename from tests/test_pdk/test_settings_coupler_ro_.yml
rename to tests/test_pdk_si220/test_settings_coupler_ro_.yml
index d11cf23..5d70fa4 100644
--- a/tests/test_pdk/test_settings_coupler_ro_.yml
+++ b/tests/test_pdk_si220/test_settings_coupler_ro_.yml
@@ -2,7 +2,7 @@ function: coupler_ro
info:
length: 10.198
min_bend_radius: 11.548
-module: cspdk.cells
+module: cspdk.si220.cells
name: coupler_ro
settings:
dx: 10.0
diff --git a/tests/test_pdk/test_settings_coupler_sc_.yml b/tests/test_pdk_si220/test_settings_coupler_sc_.yml
similarity index 84%
rename from tests/test_pdk/test_settings_coupler_sc_.yml
rename to tests/test_pdk_si220/test_settings_coupler_sc_.yml
index 0a95e62..846ac0d 100644
--- a/tests/test_pdk/test_settings_coupler_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_coupler_sc_.yml
@@ -2,7 +2,7 @@ function: coupler_sc
info:
length: 10.192
min_bend_radius: 11.701
-module: cspdk.cells
+module: cspdk.si220.cells
name: coupler_sc
settings:
dx: 10.0
diff --git a/tests/test_pdk/test_settings_coupler_so_.yml b/tests/test_pdk_si220/test_settings_coupler_so_.yml
similarity index 84%
rename from tests/test_pdk/test_settings_coupler_so_.yml
rename to tests/test_pdk_si220/test_settings_coupler_so_.yml
index b0162cb..cad8cb9 100644
--- a/tests/test_pdk/test_settings_coupler_so_.yml
+++ b/tests/test_pdk_si220/test_settings_coupler_so_.yml
@@ -2,7 +2,7 @@ function: coupler_so
info:
length: 10.198
min_bend_radius: 11.548
-module: cspdk.cells
+module: cspdk.si220.cells
name: coupler_so
settings:
dx: 10.0
diff --git a/tests/test_pdk/test_settings_crossing_rc_.yml b/tests/test_pdk_si220/test_settings_crossing_rc_.yml
similarity index 70%
rename from tests/test_pdk/test_settings_crossing_rc_.yml
rename to tests/test_pdk_si220/test_settings_crossing_rc_.yml
index e6615ba..8d3c338 100644
--- a/tests/test_pdk/test_settings_crossing_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_crossing_rc_.yml
@@ -1,5 +1,5 @@
function: crossing_rc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: crossing_rc
settings: {}
diff --git a/tests/test_pdk/test_settings_crossing_sc_.yml b/tests/test_pdk_si220/test_settings_crossing_sc_.yml
similarity index 70%
rename from tests/test_pdk/test_settings_crossing_sc_.yml
rename to tests/test_pdk_si220/test_settings_crossing_sc_.yml
index 30edf92..cd35aee 100644
--- a/tests/test_pdk/test_settings_crossing_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_crossing_sc_.yml
@@ -1,5 +1,5 @@
function: crossing_sc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: crossing_sc
settings: {}
diff --git a/tests/test_pdk/test_settings_crossing_so_.yml b/tests/test_pdk_si220/test_settings_crossing_so_.yml
similarity index 70%
rename from tests/test_pdk/test_settings_crossing_so_.yml
rename to tests/test_pdk_si220/test_settings_crossing_so_.yml
index a1f4578..dde3317 100644
--- a/tests/test_pdk/test_settings_crossing_so_.yml
+++ b/tests/test_pdk_si220/test_settings_crossing_so_.yml
@@ -1,5 +1,5 @@
function: crossing_so
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: crossing_so
settings: {}
diff --git a/tests/test_pdk/test_settings_die_rc_.yml b/tests/test_pdk_si220/test_settings_die_rc_.yml
similarity index 66%
rename from tests/test_pdk/test_settings_die_rc_.yml
rename to tests/test_pdk_si220/test_settings_die_rc_.yml
index d04838b..3e79da3 100644
--- a/tests/test_pdk/test_settings_die_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_die_rc_.yml
@@ -1,5 +1,5 @@
function: die_rc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: die_rc
settings: {}
diff --git a/tests/test_pdk/test_settings_die_ro_.yml b/tests/test_pdk_si220/test_settings_die_ro_.yml
similarity index 66%
rename from tests/test_pdk/test_settings_die_ro_.yml
rename to tests/test_pdk_si220/test_settings_die_ro_.yml
index f770ef3..3349239 100644
--- a/tests/test_pdk/test_settings_die_ro_.yml
+++ b/tests/test_pdk_si220/test_settings_die_ro_.yml
@@ -1,5 +1,5 @@
function: die_ro
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: die_ro
settings: {}
diff --git a/tests/test_pdk/test_settings_die_sc_.yml b/tests/test_pdk_si220/test_settings_die_sc_.yml
similarity index 66%
rename from tests/test_pdk/test_settings_die_sc_.yml
rename to tests/test_pdk_si220/test_settings_die_sc_.yml
index e502ddf..1725211 100644
--- a/tests/test_pdk/test_settings_die_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_die_sc_.yml
@@ -1,5 +1,5 @@
function: die_sc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: die_sc
settings: {}
diff --git a/tests/test_pdk/test_settings_die_so_.yml b/tests/test_pdk_si220/test_settings_die_so_.yml
similarity index 66%
rename from tests/test_pdk/test_settings_die_so_.yml
rename to tests/test_pdk_si220/test_settings_die_so_.yml
index bce5550..fb72e3f 100644
--- a/tests/test_pdk/test_settings_die_so_.yml
+++ b/tests/test_pdk_si220/test_settings_die_so_.yml
@@ -1,5 +1,5 @@
function: die_so
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: die_so
settings: {}
diff --git a/tests/test_pdk/test_settings_gc_elliptical_sc_.yml b/tests/test_pdk_si220/test_settings_gc_elliptical_sc_.yml
similarity index 88%
rename from tests/test_pdk/test_settings_gc_elliptical_sc_.yml
rename to tests/test_pdk_si220/test_settings_gc_elliptical_sc_.yml
index 8af7c6a..ddbaafb 100644
--- a/tests/test_pdk/test_settings_gc_elliptical_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_gc_elliptical_sc_.yml
@@ -3,7 +3,7 @@ info:
period: 0.6759999999999999
polarization: te
wavelength: 1.53
-module: cspdk.cells
+module: cspdk.si220.cells
name: gc_elliptical_sc
settings:
fiber_angle: 15
diff --git a/tests/test_pdk/test_settings_gc_elliptical_so_.yml b/tests/test_pdk_si220/test_settings_gc_elliptical_so_.yml
similarity index 87%
rename from tests/test_pdk/test_settings_gc_elliptical_so_.yml
rename to tests/test_pdk_si220/test_settings_gc_elliptical_so_.yml
index 10ffbfc..58bf882 100644
--- a/tests/test_pdk/test_settings_gc_elliptical_so_.yml
+++ b/tests/test_pdk_si220/test_settings_gc_elliptical_so_.yml
@@ -3,7 +3,7 @@ info:
period: 0.579
polarization: te
wavelength: 1.31
-module: cspdk.cells
+module: cspdk.si220.cells
name: gc_elliptical_so
settings:
fiber_angle: 15
diff --git a/tests/test_pdk/test_settings_gc_rectangular_rc_.yml b/tests/test_pdk_si220/test_settings_gc_rectangular_rc_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_gc_rectangular_rc_.yml
rename to tests/test_pdk_si220/test_settings_gc_rectangular_rc_.yml
index d533742..cdfafbb 100644
--- a/tests/test_pdk/test_settings_gc_rectangular_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_gc_rectangular_rc_.yml
@@ -3,6 +3,6 @@ info:
fiber_angle: 10.0
polarization: te
wavelength: 1.55
-module: cspdk.cells
+module: cspdk.si220.cells
name: gc_rectangular_rc
settings: {}
diff --git a/tests/test_pdk/test_settings_gc_rectangular_ro_.yml b/tests/test_pdk_si220/test_settings_gc_rectangular_ro_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_gc_rectangular_ro_.yml
rename to tests/test_pdk_si220/test_settings_gc_rectangular_ro_.yml
index 9061ecf..0f1b092 100644
--- a/tests/test_pdk/test_settings_gc_rectangular_ro_.yml
+++ b/tests/test_pdk_si220/test_settings_gc_rectangular_ro_.yml
@@ -3,6 +3,6 @@ info:
fiber_angle: 10.0
polarization: te
wavelength: 1.55
-module: cspdk.cells
+module: cspdk.si220.cells
name: gc_rectangular_ro
settings: {}
diff --git a/tests/test_pdk/test_settings_gc_rectangular_sc_.yml b/tests/test_pdk_si220/test_settings_gc_rectangular_sc_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_gc_rectangular_sc_.yml
rename to tests/test_pdk_si220/test_settings_gc_rectangular_sc_.yml
index 4b7e359..4fd9ee5 100644
--- a/tests/test_pdk/test_settings_gc_rectangular_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_gc_rectangular_sc_.yml
@@ -3,6 +3,6 @@ info:
fiber_angle: 10
polarization: te
wavelength: 1.55
-module: cspdk.cells
+module: cspdk.si220.cells
name: gc_rectangular_sc
settings: {}
diff --git a/tests/test_pdk/test_settings_gc_rectangular_so_.yml b/tests/test_pdk_si220/test_settings_gc_rectangular_so_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_gc_rectangular_so_.yml
rename to tests/test_pdk_si220/test_settings_gc_rectangular_so_.yml
index dbaff68..d9f70d3 100644
--- a/tests/test_pdk/test_settings_gc_rectangular_so_.yml
+++ b/tests/test_pdk_si220/test_settings_gc_rectangular_so_.yml
@@ -3,6 +3,6 @@ info:
fiber_angle: 10.0
polarization: te
wavelength: 1.55
-module: cspdk.cells
+module: cspdk.si220.cells
name: gc_rectangular_so
settings: {}
diff --git a/tests/test_pdk_si220/test_settings_grating_coupler_array_.yml b/tests/test_pdk_si220/test_settings_grating_coupler_array_.yml
new file mode 100644
index 0000000..23e9d5b
--- /dev/null
+++ b/tests/test_pdk_si220/test_settings_grating_coupler_array_.yml
@@ -0,0 +1,16 @@
+function: grating_coupler_array
+info: {}
+module: cspdk.si220.cells
+name: grating_coupler_array
+settings:
+ bend:
+ function: _bend
+ cross_section: xs_sc
+ grating_coupler:
+ function: gc_rectangular_sc
+ grating_coupler_spacing: 0.0
+ n: 6
+ pitch: 127.0
+ port_name: o1
+ rotation: 0.0
+ with_loopback: false
diff --git a/tests/test_pdk/test_settings_heater_.yml b/tests/test_pdk_si220/test_settings_heater_.yml
similarity index 67%
rename from tests/test_pdk/test_settings_heater_.yml
rename to tests/test_pdk_si220/test_settings_heater_.yml
index 1ab76c1..4c1952c 100644
--- a/tests/test_pdk/test_settings_heater_.yml
+++ b/tests/test_pdk_si220/test_settings_heater_.yml
@@ -1,5 +1,5 @@
function: heater
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: heater$1
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi1x2_rc_.yml b/tests/test_pdk_si220/test_settings_mmi1x2_rc_.yml
similarity index 69%
rename from tests/test_pdk/test_settings_mmi1x2_rc_.yml
rename to tests/test_pdk_si220/test_settings_mmi1x2_rc_.yml
index 603b4fc..b0381cb 100644
--- a/tests/test_pdk/test_settings_mmi1x2_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_mmi1x2_rc_.yml
@@ -1,5 +1,5 @@
function: mmi1x2_rc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mmi1x2_rc
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi1x2_ro_.yml b/tests/test_pdk_si220/test_settings_mmi1x2_ro_.yml
similarity index 69%
rename from tests/test_pdk/test_settings_mmi1x2_ro_.yml
rename to tests/test_pdk_si220/test_settings_mmi1x2_ro_.yml
index 5fdd6f0..3e3d448 100644
--- a/tests/test_pdk/test_settings_mmi1x2_ro_.yml
+++ b/tests/test_pdk_si220/test_settings_mmi1x2_ro_.yml
@@ -1,5 +1,5 @@
function: mmi1x2_ro
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mmi1x2_ro
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi1x2_sc_.yml b/tests/test_pdk_si220/test_settings_mmi1x2_sc_.yml
similarity index 69%
rename from tests/test_pdk/test_settings_mmi1x2_sc_.yml
rename to tests/test_pdk_si220/test_settings_mmi1x2_sc_.yml
index 000abd4..c23570f 100644
--- a/tests/test_pdk/test_settings_mmi1x2_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_mmi1x2_sc_.yml
@@ -1,5 +1,5 @@
function: mmi1x2_sc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mmi1x2_sc
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi1x2_so_.yml b/tests/test_pdk_si220/test_settings_mmi1x2_so_.yml
similarity index 69%
rename from tests/test_pdk/test_settings_mmi1x2_so_.yml
rename to tests/test_pdk_si220/test_settings_mmi1x2_so_.yml
index bf3637b..b8d4fd7 100644
--- a/tests/test_pdk/test_settings_mmi1x2_so_.yml
+++ b/tests/test_pdk_si220/test_settings_mmi1x2_so_.yml
@@ -1,5 +1,5 @@
function: mmi1x2_so
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mmi1x2_so
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi2x2_rc_.yml b/tests/test_pdk_si220/test_settings_mmi2x2_rc_.yml
similarity index 69%
rename from tests/test_pdk/test_settings_mmi2x2_rc_.yml
rename to tests/test_pdk_si220/test_settings_mmi2x2_rc_.yml
index 974a9d7..8acd7dd 100644
--- a/tests/test_pdk/test_settings_mmi2x2_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_mmi2x2_rc_.yml
@@ -1,5 +1,5 @@
function: mmi2x2_rc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mmi2x2_rc
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi2x2_ro_.yml b/tests/test_pdk_si220/test_settings_mmi2x2_ro_.yml
similarity index 69%
rename from tests/test_pdk/test_settings_mmi2x2_ro_.yml
rename to tests/test_pdk_si220/test_settings_mmi2x2_ro_.yml
index 9c4813d..a3aef5f 100644
--- a/tests/test_pdk/test_settings_mmi2x2_ro_.yml
+++ b/tests/test_pdk_si220/test_settings_mmi2x2_ro_.yml
@@ -1,5 +1,5 @@
function: mmi2x2_ro
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mmi2x2_ro
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi2x2_sc_.yml b/tests/test_pdk_si220/test_settings_mmi2x2_sc_.yml
similarity index 69%
rename from tests/test_pdk/test_settings_mmi2x2_sc_.yml
rename to tests/test_pdk_si220/test_settings_mmi2x2_sc_.yml
index 295aec9..858953f 100644
--- a/tests/test_pdk/test_settings_mmi2x2_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_mmi2x2_sc_.yml
@@ -1,5 +1,5 @@
function: mmi2x2_sc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mmi2x2_sc
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi2x2_so_.yml b/tests/test_pdk_si220/test_settings_mmi2x2_so_.yml
similarity index 69%
rename from tests/test_pdk/test_settings_mmi2x2_so_.yml
rename to tests/test_pdk_si220/test_settings_mmi2x2_so_.yml
index cd07874..fdcefe4 100644
--- a/tests/test_pdk/test_settings_mmi2x2_so_.yml
+++ b/tests/test_pdk_si220/test_settings_mmi2x2_so_.yml
@@ -1,5 +1,5 @@
function: mmi2x2_so
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mmi2x2_so
settings: {}
diff --git a/tests/test_pdk/test_settings_mzi_rc_.yml b/tests/test_pdk_si220/test_settings_mzi_rc_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_mzi_rc_.yml
rename to tests/test_pdk_si220/test_settings_mzi_rc_.yml
index a6ab51c..faf80b5 100644
--- a/tests/test_pdk/test_settings_mzi_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_mzi_rc_.yml
@@ -1,6 +1,6 @@
function: mzi_rc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mzi_rc
settings:
add_electrical_ports_bot: true
diff --git a/tests/test_pdk/test_settings_mzi_ro_.yml b/tests/test_pdk_si220/test_settings_mzi_ro_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_mzi_ro_.yml
rename to tests/test_pdk_si220/test_settings_mzi_ro_.yml
index ea56e4c..00df37d 100644
--- a/tests/test_pdk/test_settings_mzi_ro_.yml
+++ b/tests/test_pdk_si220/test_settings_mzi_ro_.yml
@@ -1,6 +1,6 @@
function: mzi_ro
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mzi_ro
settings:
add_electrical_ports_bot: true
diff --git a/tests/test_pdk/test_settings_mzi_sc_.yml b/tests/test_pdk_si220/test_settings_mzi_sc_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_mzi_sc_.yml
rename to tests/test_pdk_si220/test_settings_mzi_sc_.yml
index 8361c09..a16ae25 100644
--- a/tests/test_pdk/test_settings_mzi_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_mzi_sc_.yml
@@ -1,6 +1,6 @@
function: mzi_sc
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mzi_sc
settings:
add_electrical_ports_bot: true
diff --git a/tests/test_pdk/test_settings_mzi_so_.yml b/tests/test_pdk_si220/test_settings_mzi_so_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_mzi_so_.yml
rename to tests/test_pdk_si220/test_settings_mzi_so_.yml
index a1e3918..5bc5e6f 100644
--- a/tests/test_pdk/test_settings_mzi_so_.yml
+++ b/tests/test_pdk_si220/test_settings_mzi_so_.yml
@@ -1,6 +1,6 @@
function: mzi_so
info: {}
-module: cspdk.cells
+module: cspdk.si220.cells
name: mzi_so
settings:
add_electrical_ports_bot: true
diff --git a/tests/test_pdk/test_settings_pad_.yml b/tests/test_pdk_si220/test_settings_pad_.yml
similarity index 90%
rename from tests/test_pdk/test_settings_pad_.yml
rename to tests/test_pdk_si220/test_settings_pad_.yml
index 5389ff7..fc7ba00 100644
--- a/tests/test_pdk/test_settings_pad_.yml
+++ b/tests/test_pdk_si220/test_settings_pad_.yml
@@ -8,7 +8,7 @@ info:
- 100.0
xsize: 100.0
ysize: 100.0
-module: cspdk.cells
+module: cspdk.si220.cells
name: pad
settings:
bbox_layers: null
diff --git a/tests/test_pdk/test_settings_rectangle_.yml b/tests/test_pdk_si220/test_settings_rectangle_.yml
similarity index 91%
rename from tests/test_pdk/test_settings_rectangle_.yml
rename to tests/test_pdk_si220/test_settings_rectangle_.yml
index adcfc82..82242d0 100644
--- a/tests/test_pdk/test_settings_rectangle_.yml
+++ b/tests/test_pdk_si220/test_settings_rectangle_.yml
@@ -1,7 +1,7 @@
function: rectangle
info:
area: 8.0
-module: cspdk.cells
+module: cspdk.si220.cells
name: rectangle
settings:
centered: false
diff --git a/tests/test_pdk/test_settings_straight_rc_.yml b/tests/test_pdk_si220/test_settings_straight_rc_.yml
similarity index 88%
rename from tests/test_pdk/test_settings_straight_rc_.yml
rename to tests/test_pdk_si220/test_settings_straight_rc_.yml
index 3144127..3634542 100644
--- a/tests/test_pdk/test_settings_straight_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_straight_rc_.yml
@@ -6,7 +6,7 @@ info:
route_info_weight: 10.0
route_info_xs_rc_length: 10.0
width: 0.45
-module: cspdk.cells
+module: cspdk.si220.cells
name: straight_rc
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_straight_ro_.yml b/tests/test_pdk_si220/test_settings_straight_ro_.yml
similarity index 88%
rename from tests/test_pdk/test_settings_straight_ro_.yml
rename to tests/test_pdk_si220/test_settings_straight_ro_.yml
index a11ed70..8d37ef0 100644
--- a/tests/test_pdk/test_settings_straight_ro_.yml
+++ b/tests/test_pdk_si220/test_settings_straight_ro_.yml
@@ -6,7 +6,7 @@ info:
route_info_weight: 10.0
route_info_xs_ro_length: 10.0
width: 0.4
-module: cspdk.cells
+module: cspdk.si220.cells
name: straight_ro
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_straight_sc_.yml b/tests/test_pdk_si220/test_settings_straight_sc_.yml
similarity index 88%
rename from tests/test_pdk/test_settings_straight_sc_.yml
rename to tests/test_pdk_si220/test_settings_straight_sc_.yml
index c91c649..7554a25 100644
--- a/tests/test_pdk/test_settings_straight_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_straight_sc_.yml
@@ -6,7 +6,7 @@ info:
route_info_weight: 10.0
route_info_xs_sc_length: 10.0
width: 0.45
-module: cspdk.cells
+module: cspdk.si220.cells
name: straight_sc
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_straight_so_.yml b/tests/test_pdk_si220/test_settings_straight_so_.yml
similarity index 88%
rename from tests/test_pdk/test_settings_straight_so_.yml
rename to tests/test_pdk_si220/test_settings_straight_so_.yml
index 0ded88a..415a9d4 100644
--- a/tests/test_pdk/test_settings_straight_so_.yml
+++ b/tests/test_pdk_si220/test_settings_straight_so_.yml
@@ -6,7 +6,7 @@ info:
route_info_weight: 10.0
route_info_xs_so_length: 10.0
width: 0.4
-module: cspdk.cells
+module: cspdk.si220.cells
name: straight_so
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_taper_rc_.yml b/tests/test_pdk_si220/test_settings_taper_rc_.yml
similarity index 85%
rename from tests/test_pdk/test_settings_taper_rc_.yml
rename to tests/test_pdk_si220/test_settings_taper_rc_.yml
index a1f062b..d1a7c17 100644
--- a/tests/test_pdk/test_settings_taper_rc_.yml
+++ b/tests/test_pdk_si220/test_settings_taper_rc_.yml
@@ -3,7 +3,7 @@ info:
length: 10.0
width1: 0.5
width2: 0.5
-module: cspdk.cells
+module: cspdk.si220.cells
name: taper_rc
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_taper_ro_.yml b/tests/test_pdk_si220/test_settings_taper_ro_.yml
similarity index 85%
rename from tests/test_pdk/test_settings_taper_ro_.yml
rename to tests/test_pdk_si220/test_settings_taper_ro_.yml
index e96be0a..6d8b02e 100644
--- a/tests/test_pdk/test_settings_taper_ro_.yml
+++ b/tests/test_pdk_si220/test_settings_taper_ro_.yml
@@ -3,7 +3,7 @@ info:
length: 10.0
width1: 0.5
width2: 0.5
-module: cspdk.cells
+module: cspdk.si220.cells
name: taper_ro
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_taper_sc_.yml b/tests/test_pdk_si220/test_settings_taper_sc_.yml
similarity index 85%
rename from tests/test_pdk/test_settings_taper_sc_.yml
rename to tests/test_pdk_si220/test_settings_taper_sc_.yml
index fa050eb..b0f1f0f 100644
--- a/tests/test_pdk/test_settings_taper_sc_.yml
+++ b/tests/test_pdk_si220/test_settings_taper_sc_.yml
@@ -3,7 +3,7 @@ info:
length: 10.0
width1: 0.5
width2: 0.5
-module: cspdk.cells
+module: cspdk.si220.cells
name: taper_sc
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_taper_so_.yml b/tests/test_pdk_si220/test_settings_taper_so_.yml
similarity index 85%
rename from tests/test_pdk/test_settings_taper_so_.yml
rename to tests/test_pdk_si220/test_settings_taper_so_.yml
index 1e164ae..3cfd060 100644
--- a/tests/test_pdk/test_settings_taper_so_.yml
+++ b/tests/test_pdk_si220/test_settings_taper_so_.yml
@@ -3,7 +3,7 @@ info:
length: 10.0
width1: 0.5
width2: 0.5
-module: cspdk.cells
+module: cspdk.si220.cells
name: taper_so
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_trans_sc_rc10_.yml b/tests/test_pdk_si220/test_settings_trans_sc_rc10_.yml
similarity index 89%
rename from tests/test_pdk/test_settings_trans_sc_rc10_.yml
rename to tests/test_pdk_si220/test_settings_trans_sc_rc10_.yml
index 2a0de03..9b4aac7 100644
--- a/tests/test_pdk/test_settings_trans_sc_rc10_.yml
+++ b/tests/test_pdk_si220/test_settings_trans_sc_rc10_.yml
@@ -6,6 +6,6 @@ info:
route_info_weight: 10.0
route_info_xs_rc_tip_length: 10.0
route_info_xs_rc_tip_taper_length: 10
-module: cspdk.cells
+module: cspdk.si220.cells
name: trans_sc_rc10
settings: {}
diff --git a/tests/test_pdk/test_settings_trans_sc_rc20_.yml b/tests/test_pdk_si220/test_settings_trans_sc_rc20_.yml
similarity index 89%
rename from tests/test_pdk/test_settings_trans_sc_rc20_.yml
rename to tests/test_pdk_si220/test_settings_trans_sc_rc20_.yml
index 4872e2a..c2ceb81 100644
--- a/tests/test_pdk/test_settings_trans_sc_rc20_.yml
+++ b/tests/test_pdk_si220/test_settings_trans_sc_rc20_.yml
@@ -6,6 +6,6 @@ info:
route_info_weight: 20.0
route_info_xs_rc_tip_length: 20.0
route_info_xs_rc_tip_taper_length: 20
-module: cspdk.cells
+module: cspdk.si220.cells
name: trans_sc_rc20
settings: {}
diff --git a/tests/test_pdk/test_settings_trans_sc_rc50_.yml b/tests/test_pdk_si220/test_settings_trans_sc_rc50_.yml
similarity index 89%
rename from tests/test_pdk/test_settings_trans_sc_rc50_.yml
rename to tests/test_pdk_si220/test_settings_trans_sc_rc50_.yml
index eec65e3..f121ad2 100644
--- a/tests/test_pdk/test_settings_trans_sc_rc50_.yml
+++ b/tests/test_pdk_si220/test_settings_trans_sc_rc50_.yml
@@ -6,6 +6,6 @@ info:
route_info_weight: 50.0
route_info_xs_rc_tip_length: 50.0
route_info_xs_rc_tip_taper_length: 50
-module: cspdk.cells
+module: cspdk.si220.cells
name: trans_sc_rc50
settings: {}
diff --git a/tests/test_pdk/test_settings_wire_corner_.yml b/tests/test_pdk_si220/test_settings_wire_corner_.yml
similarity index 81%
rename from tests/test_pdk/test_settings_wire_corner_.yml
rename to tests/test_pdk_si220/test_settings_wire_corner_.yml
index 3a5ab9a..8ebfc9b 100644
--- a/tests/test_pdk/test_settings_wire_corner_.yml
+++ b/tests/test_pdk_si220/test_settings_wire_corner_.yml
@@ -2,7 +2,7 @@ function: wire_corner
info:
dy: 10.0
length: 10.0
-module: cspdk.cells
+module: cspdk.si220.cells
name: wire_corner$1
settings:
cross_section: xs_metal_routing
diff --git a/tests/test_pdk_sin300.py b/tests/test_pdk_sin300.py
new file mode 100644
index 0000000..5d821a1
--- /dev/null
+++ b/tests/test_pdk_sin300.py
@@ -0,0 +1,44 @@
+import pathlib
+
+import pytest
+from gdsfactory.difftest import difftest
+from pytest_regressions.data_regression import DataRegressionFixture
+
+from cspdk.sin300 import PDK
+
+
+@pytest.fixture(autouse=True)
+def activate_pdk():
+ PDK.activate()
+
+
+cells = PDK.cells
+skip_test = {"import_gds"}
+cell_names = set(cells.keys()) - set(skip_test)
+cell_names = [name for name in cell_names if not name.startswith("_")]
+dirpath = (
+ pathlib.Path(__file__).absolute().with_suffix(".gds").parent / "gds_ref_sin300"
+)
+dirpath.mkdir(exist_ok=True, parents=True)
+
+
+@pytest.fixture(params=cell_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 = cells[component_name]()
+ difftest(component, test_name=component_name, dirpath=dirpath)
+
+
+def test_settings(component_name: str, data_regression: DataRegressionFixture) -> None:
+ """Avoid regressions when exporting settings."""
+ component = cells[component_name]()
+ data_regression.check(component.to_dict())
+
+
+def test_assert_ports_on_grid(component_name: str) -> None:
+ component = cells[component_name]()
+ component.assert_ports_on_grid()
diff --git a/tests/test_pdk_sin300/test_settings_array_.yml b/tests/test_pdk_sin300/test_settings_array_.yml
new file mode 100644
index 0000000..a3682d4
--- /dev/null
+++ b/tests/test_pdk_sin300/test_settings_array_.yml
@@ -0,0 +1,22 @@
+function: array
+info:
+ layer:
+ - 41
+ - 0
+ size:
+ - 100.0
+ - 100.0
+ xsize: 100.0
+ ysize: 100.0
+module: gdsfactory.components.array_component
+name: pad_array
+settings:
+ add_ports: true
+ centered: false
+ columns: 6
+ component: pad
+ rows: 1
+ size: null
+ spacing:
+ - 150.0
+ - 150.0
diff --git a/tests/test_pdk/test_settings_bend_nc_.yml b/tests/test_pdk_sin300/test_settings_bend_nc_.yml
similarity index 91%
rename from tests/test_pdk/test_settings_bend_nc_.yml
rename to tests/test_pdk_sin300/test_settings_bend_nc_.yml
index 5525477..2f07c75 100644
--- a/tests/test_pdk/test_settings_bend_nc_.yml
+++ b/tests/test_pdk_sin300/test_settings_bend_nc_.yml
@@ -10,7 +10,7 @@ info:
route_info_weight: 41.592
route_info_xs_nc_length: 41.592
width: 1.2
-module: cspdk.cells
+module: cspdk.sin300.cells
name: bend_nc
settings:
angle: 90.0
diff --git a/tests/test_pdk/test_settings_bend_no_.yml b/tests/test_pdk_sin300/test_settings_bend_no_.yml
similarity index 91%
rename from tests/test_pdk/test_settings_bend_no_.yml
rename to tests/test_pdk_sin300/test_settings_bend_no_.yml
index 68ea6bb..b741f2e 100644
--- a/tests/test_pdk/test_settings_bend_no_.yml
+++ b/tests/test_pdk_sin300/test_settings_bend_no_.yml
@@ -10,7 +10,7 @@ info:
route_info_weight: 41.592
route_info_xs_no_length: 41.592
width: 0.95
-module: cspdk.cells
+module: cspdk.sin300.cells
name: bend_no
settings:
angle: 90.0
diff --git a/tests/test_pdk_sin300/test_settings_bend_s_.yml b/tests/test_pdk_sin300/test_settings_bend_s_.yml
new file mode 100644
index 0000000..53024e0
--- /dev/null
+++ b/tests/test_pdk_sin300/test_settings_bend_s_.yml
@@ -0,0 +1,13 @@
+function: bend_s
+info:
+ end_angle: 0
+ length: 11.206
+ min_bend_radius: 13.012
+ start_angle: 0
+module: cspdk.sin300.cells
+name: bend_s
+settings:
+ cross_section: xs_nc
+ size:
+ - 11.0
+ - 1.8
diff --git a/tests/test_pdk/test_settings_coupler_nc_.yml b/tests/test_pdk_sin300/test_settings_coupler_nc_.yml
similarity index 84%
rename from tests/test_pdk/test_settings_coupler_nc_.yml
rename to tests/test_pdk_sin300/test_settings_coupler_nc_.yml
index bf4bb92..764c71d 100644
--- a/tests/test_pdk/test_settings_coupler_nc_.yml
+++ b/tests/test_pdk_sin300/test_settings_coupler_nc_.yml
@@ -2,7 +2,7 @@ function: coupler_nc
info:
length: 10.102
min_bend_radius: 15.665
-module: cspdk.cells
+module: cspdk.sin300.cells
name: coupler_nc
settings:
dx: 10.0
diff --git a/tests/test_pdk/test_settings_coupler_no_.yml b/tests/test_pdk_sin300/test_settings_coupler_no_.yml
similarity index 84%
rename from tests/test_pdk/test_settings_coupler_no_.yml
rename to tests/test_pdk_sin300/test_settings_coupler_no_.yml
index c3081a5..7dc8d70 100644
--- a/tests/test_pdk/test_settings_coupler_no_.yml
+++ b/tests/test_pdk_sin300/test_settings_coupler_no_.yml
@@ -2,7 +2,7 @@ function: coupler_no
info:
length: 10.124
min_bend_radius: 14.295
-module: cspdk.cells
+module: cspdk.sin300.cells
name: coupler_no
settings:
dx: 10.0
diff --git a/tests/test_pdk/test_settings_die_nc_.yml b/tests/test_pdk_sin300/test_settings_die_nc_.yml
similarity index 65%
rename from tests/test_pdk/test_settings_die_nc_.yml
rename to tests/test_pdk_sin300/test_settings_die_nc_.yml
index 3bc7ce2..95f285e 100644
--- a/tests/test_pdk/test_settings_die_nc_.yml
+++ b/tests/test_pdk_sin300/test_settings_die_nc_.yml
@@ -1,5 +1,5 @@
function: die_nc
info: {}
-module: cspdk.cells
+module: cspdk.sin300.cells
name: die_nc
settings: {}
diff --git a/tests/test_pdk/test_settings_die_no_.yml b/tests/test_pdk_sin300/test_settings_die_no_.yml
similarity index 65%
rename from tests/test_pdk/test_settings_die_no_.yml
rename to tests/test_pdk_sin300/test_settings_die_no_.yml
index b416c12..2863d07 100644
--- a/tests/test_pdk/test_settings_die_no_.yml
+++ b/tests/test_pdk_sin300/test_settings_die_no_.yml
@@ -1,5 +1,5 @@
function: die_no
info: {}
-module: cspdk.cells
+module: cspdk.sin300.cells
name: die_no
settings: {}
diff --git a/tests/test_pdk_sin300/test_settings_gc_elliptical_nc_.yml b/tests/test_pdk_sin300/test_settings_gc_elliptical_nc_.yml
new file mode 100644
index 0000000..fc484c9
--- /dev/null
+++ b/tests/test_pdk_sin300/test_settings_gc_elliptical_nc_.yml
@@ -0,0 +1,13 @@
+function: gc_elliptical_nc
+info:
+ period: 1.383
+ polarization: te
+ wavelength: 1.53
+module: cspdk.sin300.cells
+name: gc_elliptical_nc
+settings:
+ cross_section: xs_nc
+ fiber_angle: 20
+ grating_line_width: 0.343
+ neff: 1.6
+ wavelength: 1.53
diff --git a/tests/test_pdk_sin300/test_settings_gc_elliptical_no_.yml b/tests/test_pdk_sin300/test_settings_gc_elliptical_no_.yml
new file mode 100644
index 0000000..9866156
--- /dev/null
+++ b/tests/test_pdk_sin300/test_settings_gc_elliptical_no_.yml
@@ -0,0 +1,13 @@
+function: gc_elliptical_no
+info:
+ period: 1.153
+ polarization: te
+ wavelength: 1.31
+module: cspdk.sin300.cells
+name: gc_elliptical_no
+settings:
+ cross_section: xs_no
+ fiber_angle: 20
+ grating_line_width: 0.343
+ neff: 1.63
+ wavelength: 1.31
diff --git a/tests/test_pdk/test_settings_gc_rectangular_nc_.yml b/tests/test_pdk_sin300/test_settings_gc_rectangular_nc_.yml
similarity index 82%
rename from tests/test_pdk/test_settings_gc_rectangular_nc_.yml
rename to tests/test_pdk_sin300/test_settings_gc_rectangular_nc_.yml
index b8565c6..a33d357 100644
--- a/tests/test_pdk/test_settings_gc_rectangular_nc_.yml
+++ b/tests/test_pdk_sin300/test_settings_gc_rectangular_nc_.yml
@@ -3,6 +3,6 @@ info:
fiber_angle: 20
polarization: te
wavelength: 1.55
-module: cspdk.cells
+module: cspdk.sin300.cells
name: gc_rectangular_nc
settings: {}
diff --git a/tests/test_pdk/test_settings_gc_rectangular_no_.yml b/tests/test_pdk_sin300/test_settings_gc_rectangular_no_.yml
similarity index 82%
rename from tests/test_pdk/test_settings_gc_rectangular_no_.yml
rename to tests/test_pdk_sin300/test_settings_gc_rectangular_no_.yml
index 3ae7bd3..bfe85f9 100644
--- a/tests/test_pdk/test_settings_gc_rectangular_no_.yml
+++ b/tests/test_pdk_sin300/test_settings_gc_rectangular_no_.yml
@@ -3,6 +3,6 @@ info:
fiber_angle: 20
polarization: te
wavelength: 1.55
-module: cspdk.cells
+module: cspdk.sin300.cells
name: gc_rectangular_no
settings: {}
diff --git a/tests/test_pdk/test_settings_grating_coupler_array_.yml b/tests/test_pdk_sin300/test_settings_grating_coupler_array_.yml
similarity index 91%
rename from tests/test_pdk/test_settings_grating_coupler_array_.yml
rename to tests/test_pdk_sin300/test_settings_grating_coupler_array_.yml
index f995f7a..f2bf322 100644
--- a/tests/test_pdk/test_settings_grating_coupler_array_.yml
+++ b/tests/test_pdk_sin300/test_settings_grating_coupler_array_.yml
@@ -1,6 +1,6 @@
function: grating_coupler_array
info: {}
-module: cspdk.cells
+module: cspdk.sin300.cells
name: grating_coupler_array
settings:
bend:
diff --git a/tests/test_pdk/test_settings_mmi1x2_nc_.yml b/tests/test_pdk_sin300/test_settings_mmi1x2_nc_.yml
similarity index 68%
rename from tests/test_pdk/test_settings_mmi1x2_nc_.yml
rename to tests/test_pdk_sin300/test_settings_mmi1x2_nc_.yml
index 56cbdc2..b056deb 100644
--- a/tests/test_pdk/test_settings_mmi1x2_nc_.yml
+++ b/tests/test_pdk_sin300/test_settings_mmi1x2_nc_.yml
@@ -1,5 +1,5 @@
function: mmi1x2_nc
info: {}
-module: cspdk.cells
+module: cspdk.sin300.cells
name: mmi1x2_nc
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi1x2_no_.yml b/tests/test_pdk_sin300/test_settings_mmi1x2_no_.yml
similarity index 68%
rename from tests/test_pdk/test_settings_mmi1x2_no_.yml
rename to tests/test_pdk_sin300/test_settings_mmi1x2_no_.yml
index f43f842..754a7ca 100644
--- a/tests/test_pdk/test_settings_mmi1x2_no_.yml
+++ b/tests/test_pdk_sin300/test_settings_mmi1x2_no_.yml
@@ -1,5 +1,5 @@
function: mmi1x2_no
info: {}
-module: cspdk.cells
+module: cspdk.sin300.cells
name: mmi1x2_no
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi2x2_nc_.yml b/tests/test_pdk_sin300/test_settings_mmi2x2_nc_.yml
similarity index 68%
rename from tests/test_pdk/test_settings_mmi2x2_nc_.yml
rename to tests/test_pdk_sin300/test_settings_mmi2x2_nc_.yml
index 87ef9ca..d3c30e7 100644
--- a/tests/test_pdk/test_settings_mmi2x2_nc_.yml
+++ b/tests/test_pdk_sin300/test_settings_mmi2x2_nc_.yml
@@ -1,5 +1,5 @@
function: mmi2x2_nc
info: {}
-module: cspdk.cells
+module: cspdk.sin300.cells
name: mmi2x2_nc
settings: {}
diff --git a/tests/test_pdk/test_settings_mmi2x2_no_.yml b/tests/test_pdk_sin300/test_settings_mmi2x2_no_.yml
similarity index 68%
rename from tests/test_pdk/test_settings_mmi2x2_no_.yml
rename to tests/test_pdk_sin300/test_settings_mmi2x2_no_.yml
index e106824..8a8a760 100644
--- a/tests/test_pdk/test_settings_mmi2x2_no_.yml
+++ b/tests/test_pdk_sin300/test_settings_mmi2x2_no_.yml
@@ -1,5 +1,5 @@
function: mmi2x2_no
info: {}
-module: cspdk.cells
+module: cspdk.sin300.cells
name: mmi2x2_no
settings: {}
diff --git a/tests/test_pdk/test_settings_mzi_nc_.yml b/tests/test_pdk_sin300/test_settings_mzi_nc_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_mzi_nc_.yml
rename to tests/test_pdk_sin300/test_settings_mzi_nc_.yml
index a7a15bc..fbf5ad0 100644
--- a/tests/test_pdk/test_settings_mzi_nc_.yml
+++ b/tests/test_pdk_sin300/test_settings_mzi_nc_.yml
@@ -1,6 +1,6 @@
function: mzi_nc
info: {}
-module: cspdk.cells
+module: cspdk.sin300.cells
name: mzi_nc
settings:
add_electrical_ports_bot: true
diff --git a/tests/test_pdk/test_settings_mzi_no_.yml b/tests/test_pdk_sin300/test_settings_mzi_no_.yml
similarity index 83%
rename from tests/test_pdk/test_settings_mzi_no_.yml
rename to tests/test_pdk_sin300/test_settings_mzi_no_.yml
index 7bbbdf3..5e75b60 100644
--- a/tests/test_pdk/test_settings_mzi_no_.yml
+++ b/tests/test_pdk_sin300/test_settings_mzi_no_.yml
@@ -1,6 +1,6 @@
function: mzi_no
info: {}
-module: cspdk.cells
+module: cspdk.sin300.cells
name: mzi_no
settings:
add_electrical_ports_bot: true
diff --git a/tests/test_pdk_sin300/test_settings_pad_.yml b/tests/test_pdk_sin300/test_settings_pad_.yml
new file mode 100644
index 0000000..5719a58
--- /dev/null
+++ b/tests/test_pdk_sin300/test_settings_pad_.yml
@@ -0,0 +1,23 @@
+function: pad
+info:
+ layer:
+ - 41
+ - 0
+ size:
+ - 100.0
+ - 100.0
+ xsize: 100.0
+ ysize: 100.0
+module: cspdk.sin300.cells
+name: pad
+settings:
+ bbox_layers: null
+ bbox_offsets: null
+ layer:
+ - 41
+ - 0
+ port_inclusion: 0.0
+ port_orientation: null
+ size:
+ - 100.0
+ - 100.0
diff --git a/tests/test_pdk_sin300/test_settings_rectangle_.yml b/tests/test_pdk_sin300/test_settings_rectangle_.yml
new file mode 100644
index 0000000..93f15e4
--- /dev/null
+++ b/tests/test_pdk_sin300/test_settings_rectangle_.yml
@@ -0,0 +1,21 @@
+function: rectangle
+info:
+ area: 8.0
+module: cspdk.sin300.cells
+name: rectangle
+settings:
+ centered: false
+ layer:
+ - 99
+ - 0
+ port_orientations:
+ - 180.0
+ - 90.0
+ - 0.0
+ - -90.0
+ port_type: electrical
+ round_corners_east_west: false
+ round_corners_north_south: false
+ size:
+ - 4.0
+ - 2.0
diff --git a/tests/test_pdk/test_settings_straight_nc_.yml b/tests/test_pdk_sin300/test_settings_straight_nc_.yml
similarity index 88%
rename from tests/test_pdk/test_settings_straight_nc_.yml
rename to tests/test_pdk_sin300/test_settings_straight_nc_.yml
index bcd0ed6..9a0c6fd 100644
--- a/tests/test_pdk/test_settings_straight_nc_.yml
+++ b/tests/test_pdk_sin300/test_settings_straight_nc_.yml
@@ -6,7 +6,7 @@ info:
route_info_weight: 10.0
route_info_xs_nc_length: 10.0
width: 1.2
-module: cspdk.cells
+module: cspdk.sin300.cells
name: straight_nc
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_straight_no_.yml b/tests/test_pdk_sin300/test_settings_straight_no_.yml
similarity index 88%
rename from tests/test_pdk/test_settings_straight_no_.yml
rename to tests/test_pdk_sin300/test_settings_straight_no_.yml
index 2583541..863b8a3 100644
--- a/tests/test_pdk/test_settings_straight_no_.yml
+++ b/tests/test_pdk_sin300/test_settings_straight_no_.yml
@@ -6,7 +6,7 @@ info:
route_info_weight: 10.0
route_info_xs_no_length: 10.0
width: 0.95
-module: cspdk.cells
+module: cspdk.sin300.cells
name: straight_no
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_taper_nc_.yml b/tests/test_pdk_sin300/test_settings_taper_nc_.yml
similarity index 84%
rename from tests/test_pdk/test_settings_taper_nc_.yml
rename to tests/test_pdk_sin300/test_settings_taper_nc_.yml
index a332928..8adab36 100644
--- a/tests/test_pdk/test_settings_taper_nc_.yml
+++ b/tests/test_pdk_sin300/test_settings_taper_nc_.yml
@@ -3,7 +3,7 @@ info:
length: 10.0
width1: 0.5
width2: 0.5
-module: cspdk.cells
+module: cspdk.sin300.cells
name: taper_nc
settings:
length: 10.0
diff --git a/tests/test_pdk/test_settings_taper_no_.yml b/tests/test_pdk_sin300/test_settings_taper_no_.yml
similarity index 84%
rename from tests/test_pdk/test_settings_taper_no_.yml
rename to tests/test_pdk_sin300/test_settings_taper_no_.yml
index 2535a5e..8d012dc 100644
--- a/tests/test_pdk/test_settings_taper_no_.yml
+++ b/tests/test_pdk_sin300/test_settings_taper_no_.yml
@@ -3,7 +3,7 @@ info:
length: 10.0
width1: 0.5
width2: 0.5
-module: cspdk.cells
+module: cspdk.sin300.cells
name: taper_no
settings:
length: 10.0
diff --git a/tests/test_pdk_sin300/test_settings_wire_corner_.yml b/tests/test_pdk_sin300/test_settings_wire_corner_.yml
new file mode 100644
index 0000000..d748b7f
--- /dev/null
+++ b/tests/test_pdk_sin300/test_settings_wire_corner_.yml
@@ -0,0 +1,8 @@
+function: wire_corner
+info:
+ dy: 10.0
+ length: 10.0
+module: cspdk.sin300.cells
+name: wire_corner$1
+settings:
+ cross_section: xs_metal_routing