diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index c841434..1b35ccc 100644 Binary files a/docs/build/doctrees/environment.pickle and b/docs/build/doctrees/environment.pickle differ diff --git a/docs/build/doctrees/mxpic/components/composites/LoopMirror.doctree b/docs/build/doctrees/mxpic/components/composites/LoopMirror.doctree index 3c9f7d5..63c26b8 100644 Binary files a/docs/build/doctrees/mxpic/components/composites/LoopMirror.doctree and b/docs/build/doctrees/mxpic/components/composites/LoopMirror.doctree differ diff --git a/docs/build/doctrees/mxpic/components/composites/MZI.doctree b/docs/build/doctrees/mxpic/components/composites/MZI.doctree index 61a570e..833bae0 100644 Binary files a/docs/build/doctrees/mxpic/components/composites/MZI.doctree and b/docs/build/doctrees/mxpic/components/composites/MZI.doctree differ diff --git a/docs/build/doctrees/mxpic/components/composites/MZI_mesh.doctree b/docs/build/doctrees/mxpic/components/composites/MZI_mesh.doctree index 5deb0e9..5885027 100644 Binary files a/docs/build/doctrees/mxpic/components/composites/MZI_mesh.doctree and b/docs/build/doctrees/mxpic/components/composites/MZI_mesh.doctree differ diff --git a/docs/build/doctrees/mxpic/components/composites/SptTree.doctree b/docs/build/doctrees/mxpic/components/composites/SptTree.doctree index f438b0f..e7688c4 100644 Binary files a/docs/build/doctrees/mxpic/components/composites/SptTree.doctree and b/docs/build/doctrees/mxpic/components/composites/SptTree.doctree differ diff --git a/docs/build/doctrees/mxpic/components/electronics/eic_units.doctree b/docs/build/doctrees/mxpic/components/electronics/eic_units.doctree index 7187b2f..2a994cb 100644 Binary files a/docs/build/doctrees/mxpic/components/electronics/eic_units.doctree and b/docs/build/doctrees/mxpic/components/electronics/eic_units.doctree differ diff --git a/docs/build/doctrees/mxpic/components/gds_devices.doctree b/docs/build/doctrees/mxpic/components/gds_devices.doctree index be34d2e..39ffcaf 100644 Binary files a/docs/build/doctrees/mxpic/components/gds_devices.doctree and b/docs/build/doctrees/mxpic/components/gds_devices.doctree differ diff --git a/docs/build/doctrees/mxpic/components/geometry/curves.doctree b/docs/build/doctrees/mxpic/components/geometry/curves.doctree index 5a7127b..0bcfc0f 100644 Binary files a/docs/build/doctrees/mxpic/components/geometry/curves.doctree and b/docs/build/doctrees/mxpic/components/geometry/curves.doctree differ diff --git a/docs/build/doctrees/mxpic/components/geometry/index.doctree b/docs/build/doctrees/mxpic/components/geometry/index.doctree index 39e6a23..69d63e9 100644 Binary files a/docs/build/doctrees/mxpic/components/geometry/index.doctree and b/docs/build/doctrees/mxpic/components/geometry/index.doctree differ diff --git a/docs/build/doctrees/mxpic/components/geometry/polygons.doctree b/docs/build/doctrees/mxpic/components/geometry/polygons.doctree index 9e19b2e..ceffed8 100644 Binary files a/docs/build/doctrees/mxpic/components/geometry/polygons.doctree and b/docs/build/doctrees/mxpic/components/geometry/polygons.doctree differ diff --git a/docs/build/doctrees/mxpic/components/geometry/racetrack.doctree b/docs/build/doctrees/mxpic/components/geometry/racetrack.doctree index 15263d6..1f0c0e2 100644 Binary files a/docs/build/doctrees/mxpic/components/geometry/racetrack.doctree and b/docs/build/doctrees/mxpic/components/geometry/racetrack.doctree differ diff --git a/docs/build/doctrees/mxpic/components/geometry/rings.doctree b/docs/build/doctrees/mxpic/components/geometry/rings.doctree index a16310a..121b0c9 100644 Binary files a/docs/build/doctrees/mxpic/components/geometry/rings.doctree and b/docs/build/doctrees/mxpic/components/geometry/rings.doctree differ diff --git a/docs/build/doctrees/mxpic/components/index.doctree b/docs/build/doctrees/mxpic/components/index.doctree index 8d0c2c2..6e375b0 100644 Binary files a/docs/build/doctrees/mxpic/components/index.doctree and b/docs/build/doctrees/mxpic/components/index.doctree differ diff --git a/docs/build/doctrees/mxpic/components/others/simulation/DualPortElements.doctree b/docs/build/doctrees/mxpic/components/others/simulation/DualPortElements.doctree index ea7681f..81799d3 100644 Binary files a/docs/build/doctrees/mxpic/components/others/simulation/DualPortElements.doctree and b/docs/build/doctrees/mxpic/components/others/simulation/DualPortElements.doctree differ diff --git a/docs/build/doctrees/mxpic/components/pdks/AMF_pdk.doctree b/docs/build/doctrees/mxpic/components/pdks/AMF_pdk.doctree index bf36258..70d78bb 100644 Binary files a/docs/build/doctrees/mxpic/components/pdks/AMF_pdk.doctree and b/docs/build/doctrees/mxpic/components/pdks/AMF_pdk.doctree differ diff --git a/docs/build/doctrees/mxpic/components/pdks/CUMEC_pdk.doctree b/docs/build/doctrees/mxpic/components/pdks/CUMEC_pdk.doctree index df1b508..24b1a73 100644 Binary files a/docs/build/doctrees/mxpic/components/pdks/CUMEC_pdk.doctree and b/docs/build/doctrees/mxpic/components/pdks/CUMEC_pdk.doctree differ diff --git a/docs/build/doctrees/mxpic/components/pdks/IMECAS_pdk.doctree b/docs/build/doctrees/mxpic/components/pdks/IMECAS_pdk.doctree index a4f8bf8..0e31d5c 100644 Binary files a/docs/build/doctrees/mxpic/components/pdks/IMECAS_pdk.doctree and b/docs/build/doctrees/mxpic/components/pdks/IMECAS_pdk.doctree differ diff --git a/docs/build/doctrees/mxpic/components/pdks/hgl_pdk_A.doctree b/docs/build/doctrees/mxpic/components/pdks/hgl_pdk_A.doctree index 0e18506..335a63a 100644 Binary files a/docs/build/doctrees/mxpic/components/pdks/hgl_pdk_A.doctree and b/docs/build/doctrees/mxpic/components/pdks/hgl_pdk_A.doctree differ diff --git a/docs/build/doctrees/mxpic/components/pdks/qy_pdk_A.doctree b/docs/build/doctrees/mxpic/components/pdks/qy_pdk_A.doctree index 57a954b..45bdbfb 100644 Binary files a/docs/build/doctrees/mxpic/components/pdks/qy_pdk_A.doctree and b/docs/build/doctrees/mxpic/components/pdks/qy_pdk_A.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/EC_dual_layer_px3.doctree b/docs/build/doctrees/mxpic/components/primitives/EC_dual_layer_px3.doctree index d918542..2b1e53f 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/EC_dual_layer_px3.doctree and b/docs/build/doctrees/mxpic/components/primitives/EC_dual_layer_px3.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/active/dev_ps.doctree b/docs/build/doctrees/mxpic/components/primitives/active/dev_ps.doctree index 60eb4fc..2557ea1 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/active/dev_ps.doctree and b/docs/build/doctrees/mxpic/components/primitives/active/dev_ps.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/active/pin_wg.doctree b/docs/build/doctrees/mxpic/components/primitives/active/pin_wg.doctree index 77624e9..90dd10e 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/active/pin_wg.doctree and b/docs/build/doctrees/mxpic/components/primitives/active/pin_wg.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/active/rings.doctree b/docs/build/doctrees/mxpic/components/primitives/active/rings.doctree index 1dc656c..e6bb1ee 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/active/rings.doctree and b/docs/build/doctrees/mxpic/components/primitives/active/rings.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/beam_splitters.doctree b/docs/build/doctrees/mxpic/components/primitives/beam_splitters.doctree index e35a37e..235ebce 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/beam_splitters.doctree and b/docs/build/doctrees/mxpic/components/primitives/beam_splitters.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/directional_couplers.doctree b/docs/build/doctrees/mxpic/components/primitives/directional_couplers.doctree index 532fdc5..d279a23 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/directional_couplers.doctree and b/docs/build/doctrees/mxpic/components/primitives/directional_couplers.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/grating_couplers.doctree b/docs/build/doctrees/mxpic/components/primitives/grating_couplers.doctree index c6b296b..7851c6a 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/grating_couplers.doctree and b/docs/build/doctrees/mxpic/components/primitives/grating_couplers.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/index.doctree b/docs/build/doctrees/mxpic/components/primitives/index.doctree index cf0b769..e2159d7 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/index.doctree and b/docs/build/doctrees/mxpic/components/primitives/index.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/multimode_interferometers.doctree b/docs/build/doctrees/mxpic/components/primitives/multimode_interferometers.doctree index 515273e..0ea1389 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/multimode_interferometers.doctree and b/docs/build/doctrees/mxpic/components/primitives/multimode_interferometers.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/passive/crows.doctree b/docs/build/doctrees/mxpic/components/primitives/passive/crows.doctree index 5831245..3affe51 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/passive/crows.doctree and b/docs/build/doctrees/mxpic/components/primitives/passive/crows.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/passive/rings.doctree b/docs/build/doctrees/mxpic/components/primitives/passive/rings.doctree index b4e3ab4..f78622f 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/passive/rings.doctree and b/docs/build/doctrees/mxpic/components/primitives/passive/rings.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/passive/unit.doctree b/docs/build/doctrees/mxpic/components/primitives/passive/unit.doctree index 651cc78..e87caaf 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/passive/unit.doctree and b/docs/build/doctrees/mxpic/components/primitives/passive/unit.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/PBS.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/PBS.doctree index c8eac8f..c4455c2 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/PBS.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/PBS.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/YBS.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/YBS.doctree index 9417203..15aaacb 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/YBS.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/YBS.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/bragg.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/bragg.doctree index e61dfa3..bb9e474 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/bragg.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/bragg.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/couplers.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/couplers.doctree index 548cd0f..3ba5cd3 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/couplers.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/couplers.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/cross.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/cross.doctree index 93f233d..8c1f5fa 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/cross.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/cross.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/gratings.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/gratings.doctree index 786123b..bad0812 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/gratings.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/gratings.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/mmi.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/mmi.doctree index 5d44811..988dd91 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/mmi.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/mmi.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/racetrack.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/racetrack.doctree index 091a355..837c39a 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/racetrack.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/racetrack.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/rings.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/rings.doctree index 1f92449..4ef2370 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/rings.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/rings.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/spiral.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/spiral.doctree index a9306b0..d341e2a 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/spiral.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/spiral.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/pic/taper.doctree b/docs/build/doctrees/mxpic/components/primitives/pic/taper.doctree index 733bcf0..a90a37f 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/pic/taper.doctree and b/docs/build/doctrees/mxpic/components/primitives/pic/taper.doctree differ diff --git a/docs/build/doctrees/mxpic/components/primitives/spiral.doctree b/docs/build/doctrees/mxpic/components/primitives/spiral.doctree index 4af6f26..15a7ec5 100644 Binary files a/docs/build/doctrees/mxpic/components/primitives/spiral.doctree and b/docs/build/doctrees/mxpic/components/primitives/spiral.doctree differ diff --git a/docs/build/doctrees/mxpic/components/routing.doctree b/docs/build/doctrees/mxpic/components/routing.doctree index 0562dbd..df84b0c 100644 Binary files a/docs/build/doctrees/mxpic/components/routing.doctree and b/docs/build/doctrees/mxpic/components/routing.doctree differ diff --git a/docs/build/html/_images/ADC_STD_2x2.png b/docs/build/html/_images/ADC_STD_2x2.png index 74e800f..2bdd6e6 100644 Binary files a/docs/build/html/_images/ADC_STD_2x2.png and b/docs/build/html/_images/ADC_STD_2x2.png differ diff --git a/docs/build/html/_images/AED_Ring_PIN.png b/docs/build/html/_images/AED_Ring_PIN.png new file mode 100644 index 0000000..04d7151 Binary files /dev/null and b/docs/build/html/_images/AED_Ring_PIN.png differ diff --git a/docs/build/html/_images/AED_ring.png b/docs/build/html/_images/AED_ring.png new file mode 100644 index 0000000..62a79a2 Binary files /dev/null and b/docs/build/html/_images/AED_ring.png differ diff --git a/docs/build/html/_images/BS_tdc.png b/docs/build/html/_images/BS_tdc.png index cca00f3..bd602c8 100644 Binary files a/docs/build/html/_images/BS_tdc.png and b/docs/build/html/_images/BS_tdc.png differ diff --git a/docs/build/html/_images/Brag_WDM.png b/docs/build/html/_images/Brag_WDM.png new file mode 100644 index 0000000..a3d8bbd Binary files /dev/null and b/docs/build/html/_images/Brag_WDM.png differ diff --git a/docs/build/html/_images/Bragg.png b/docs/build/html/_images/Bragg.png new file mode 100644 index 0000000..a704faf Binary files /dev/null and b/docs/build/html/_images/Bragg.png differ diff --git a/docs/build/html/_images/Bragg_apodized.png b/docs/build/html/_images/Bragg_apodized.png new file mode 100644 index 0000000..e7be6d0 Binary files /dev/null and b/docs/build/html/_images/Bragg_apodized.png differ diff --git a/docs/build/html/_images/CROW_AED.png b/docs/build/html/_images/CROW_AED.png new file mode 100644 index 0000000..b18b4a0 Binary files /dev/null and b/docs/build/html/_images/CROW_AED.png differ diff --git a/docs/build/html/_images/CROW_Eul_RCK.png b/docs/build/html/_images/CROW_Eul_RCK.png new file mode 100644 index 0000000..4d3802d Binary files /dev/null and b/docs/build/html/_images/CROW_Eul_RCK.png differ diff --git a/docs/build/html/_images/CROW_Eul_Ring.png b/docs/build/html/_images/CROW_Eul_Ring.png new file mode 100644 index 0000000..ffe4412 Binary files /dev/null and b/docs/build/html/_images/CROW_Eul_Ring.png differ diff --git a/docs/build/html/_images/CROW_STD_Adddrop.png b/docs/build/html/_images/CROW_STD_Adddrop.png new file mode 100644 index 0000000..eda53e4 Binary files /dev/null and b/docs/build/html/_images/CROW_STD_Adddrop.png differ diff --git a/docs/build/html/_images/CROW_STD_Allpass.png b/docs/build/html/_images/CROW_STD_Allpass.png new file mode 100644 index 0000000..b657058 Binary files /dev/null and b/docs/build/html/_images/CROW_STD_Allpass.png differ diff --git a/docs/build/html/_images/Cross.png b/docs/build/html/_images/Cross.png new file mode 100644 index 0000000..9f68d6d Binary files /dev/null and b/docs/build/html/_images/Cross.png differ diff --git a/docs/build/html/_images/Cross_Sine.png b/docs/build/html/_images/Cross_Sine.png new file mode 100644 index 0000000..11d94a0 Binary files /dev/null and b/docs/build/html/_images/Cross_Sine.png differ diff --git a/docs/build/html/_images/DC.png b/docs/build/html/_images/DC.png index 3fc001a..5733b54 100644 Binary files a/docs/build/html/_images/DC.png and b/docs/build/html/_images/DC.png differ diff --git a/docs/build/html/_images/DC_bend.png b/docs/build/html/_images/DC_bend.png index f68d998..c6fa387 100644 Binary files a/docs/build/html/_images/DC_bend.png and b/docs/build/html/_images/DC_bend.png differ diff --git a/docs/build/html/_images/DC_pX_3sg.png b/docs/build/html/_images/DC_pX_3sg.png index a21782c..60fdd99 100644 Binary files a/docs/build/html/_images/DC_pX_3sg.png and b/docs/build/html/_images/DC_pX_3sg.png differ diff --git a/docs/build/html/_images/Heater_NDoped.png b/docs/build/html/_images/Heater_NDoped.png new file mode 100644 index 0000000..3b2cfd8 Binary files /dev/null and b/docs/build/html/_images/Heater_NDoped.png differ diff --git a/docs/build/html/_images/MDM.png b/docs/build/html/_images/MDM.png index 4fc73ba..7c469d6 100644 Binary files a/docs/build/html/_images/MDM.png and b/docs/build/html/_images/MDM.png differ diff --git a/docs/build/html/_images/MMI_ML.png b/docs/build/html/_images/MMI_ML.png index c886a18..cc25e60 100644 Binary files a/docs/build/html/_images/MMI_ML.png and b/docs/build/html/_images/MMI_ML.png differ diff --git a/docs/build/html/_images/MMI_STD.png b/docs/build/html/_images/MMI_STD.png index 91c18cc..af3a34b 100644 Binary files a/docs/build/html/_images/MMI_STD.png and b/docs/build/html/_images/MMI_STD.png differ diff --git a/docs/build/html/_images/MRR_DW_Adddrop.png b/docs/build/html/_images/MRR_DW_Adddrop.png new file mode 100644 index 0000000..6516148 Binary files /dev/null and b/docs/build/html/_images/MRR_DW_Adddrop.png differ diff --git a/docs/build/html/_images/MRR_DW_Allpass.png b/docs/build/html/_images/MRR_DW_Allpass.png new file mode 100644 index 0000000..f016ad6 Binary files /dev/null and b/docs/build/html/_images/MRR_DW_Allpass.png differ diff --git a/docs/build/html/_images/MRR_MM_Adddrop.png b/docs/build/html/_images/MRR_MM_Adddrop.png new file mode 100644 index 0000000..15e1867 Binary files /dev/null and b/docs/build/html/_images/MRR_MM_Adddrop.png differ diff --git a/docs/build/html/_images/MRR_MM_Allpass.png b/docs/build/html/_images/MRR_MM_Allpass.png new file mode 100644 index 0000000..4e6a5c9 Binary files /dev/null and b/docs/build/html/_images/MRR_MM_Allpass.png differ diff --git a/docs/build/html/_images/MRR_STD_Adddrop.png b/docs/build/html/_images/MRR_STD_Adddrop.png new file mode 100644 index 0000000..2d29ced Binary files /dev/null and b/docs/build/html/_images/MRR_STD_Adddrop.png differ diff --git a/docs/build/html/_images/MRR_STD_Allpass.png b/docs/build/html/_images/MRR_STD_Allpass.png new file mode 100644 index 0000000..118f983 Binary files /dev/null and b/docs/build/html/_images/MRR_STD_Allpass.png differ diff --git a/docs/build/html/_images/PBS_3wg.png b/docs/build/html/_images/PBS_3wg.png new file mode 100644 index 0000000..47ac7f9 Binary files /dev/null and b/docs/build/html/_images/PBS_3wg.png differ diff --git a/docs/build/html/_images/PIN_MRR_MM_Adddrop.png b/docs/build/html/_images/PIN_MRR_MM_Adddrop.png new file mode 100644 index 0000000..9ac8089 Binary files /dev/null and b/docs/build/html/_images/PIN_MRR_MM_Adddrop.png differ diff --git a/docs/build/html/_images/PIN_MRR_MM_Allpass.png b/docs/build/html/_images/PIN_MRR_MM_Allpass.png new file mode 100644 index 0000000..57c1444 Binary files /dev/null and b/docs/build/html/_images/PIN_MRR_MM_Allpass.png differ diff --git a/docs/build/html/_images/PIN_MRR_STD_Allpass.png b/docs/build/html/_images/PIN_MRR_STD_Allpass.png new file mode 100644 index 0000000..cd4de93 Binary files /dev/null and b/docs/build/html/_images/PIN_MRR_STD_Allpass.png differ diff --git a/docs/build/html/_images/PSR.png b/docs/build/html/_images/PSR.png new file mode 100644 index 0000000..884d166 Binary files /dev/null and b/docs/build/html/_images/PSR.png differ diff --git a/docs/build/html/_images/PSR_1x2.png b/docs/build/html/_images/PSR_1x2.png new file mode 100644 index 0000000..c75ed8e Binary files /dev/null and b/docs/build/html/_images/PSR_1x2.png differ diff --git a/docs/build/html/_images/PS_2st.png b/docs/build/html/_images/PS_2st.png new file mode 100644 index 0000000..f5f9156 Binary files /dev/null and b/docs/build/html/_images/PS_2st.png differ diff --git a/docs/build/html/_images/PS_2st_Straight.png b/docs/build/html/_images/PS_2st_Straight.png new file mode 100644 index 0000000..51bb9dd Binary files /dev/null and b/docs/build/html/_images/PS_2st_Straight.png differ diff --git a/docs/build/html/_images/PS_PIN.png b/docs/build/html/_images/PS_PIN.png new file mode 100644 index 0000000..c36920e Binary files /dev/null and b/docs/build/html/_images/PS_PIN.png differ diff --git a/docs/build/html/_images/RacetrackResonator.png b/docs/build/html/_images/RacetrackResonator.png new file mode 100644 index 0000000..0724714 Binary files /dev/null and b/docs/build/html/_images/RacetrackResonator.png differ diff --git a/docs/build/html/_images/Racetrack_MM_Adddrop.png b/docs/build/html/_images/Racetrack_MM_Adddrop.png new file mode 100644 index 0000000..d68d9b7 Binary files /dev/null and b/docs/build/html/_images/Racetrack_MM_Adddrop.png differ diff --git a/docs/build/html/_images/Racetrack_MM_Allpass.png b/docs/build/html/_images/Racetrack_MM_Allpass.png new file mode 100644 index 0000000..3841212 Binary files /dev/null and b/docs/build/html/_images/Racetrack_MM_Allpass.png differ diff --git a/docs/build/html/_images/Racetrack_STD_Allpass.png b/docs/build/html/_images/Racetrack_STD_Allpass.png new file mode 100644 index 0000000..cdae78e Binary files /dev/null and b/docs/build/html/_images/Racetrack_STD_Allpass.png differ diff --git a/docs/build/html/_images/STD_PIC_Rings.png b/docs/build/html/_images/STD_PIC_Rings.png new file mode 100644 index 0000000..6f919d7 Binary files /dev/null and b/docs/build/html/_images/STD_PIC_Rings.png differ diff --git a/docs/build/html/_images/STD_Ring_PIN.png b/docs/build/html/_images/STD_Ring_PIN.png new file mode 100644 index 0000000..3550754 Binary files /dev/null and b/docs/build/html/_images/STD_Ring_PIN.png differ diff --git a/docs/build/html/_images/STD_ring_AMZI_adddrop.png b/docs/build/html/_images/STD_ring_AMZI_adddrop.png new file mode 100644 index 0000000..dd9260d Binary files /dev/null and b/docs/build/html/_images/STD_ring_AMZI_adddrop.png differ diff --git a/docs/build/html/_images/Spiral_Cicle_MM.png b/docs/build/html/_images/Spiral_Cicle_MM.png index e498b86..3b168c7 100644 Binary files a/docs/build/html/_images/Spiral_Cicle_MM.png and b/docs/build/html/_images/Spiral_Cicle_MM.png differ diff --git a/docs/build/html/_images/Spiral_Cicle_STD.png b/docs/build/html/_images/Spiral_Cicle_STD.png index d1d2b88..d6e4bc8 100644 Binary files a/docs/build/html/_images/Spiral_Cicle_STD.png and b/docs/build/html/_images/Spiral_Cicle_STD.png differ diff --git a/docs/build/html/_images/Spiral_Rect_STD.png b/docs/build/html/_images/Spiral_Rect_STD.png index ecf9369..3b8b9e6 100644 Binary files a/docs/build/html/_images/Spiral_Rect_STD.png and b/docs/build/html/_images/Spiral_Rect_STD.png differ diff --git a/docs/build/html/_images/WGDoped.png b/docs/build/html/_images/WGDoped.png new file mode 100644 index 0000000..0f2ed71 Binary files /dev/null and b/docs/build/html/_images/WGDoped.png differ diff --git a/docs/build/html/_images/YBranch.png b/docs/build/html/_images/YBranch.png index ee4394e..fefb931 100644 Binary files a/docs/build/html/_images/YBranch.png and b/docs/build/html/_images/YBranch.png differ diff --git a/docs/build/html/_images/Ybranch_3wg.png b/docs/build/html/_images/Ybranch_3wg.png index cde08d3..18887d0 100644 Binary files a/docs/build/html/_images/Ybranch_3wg.png and b/docs/build/html/_images/Ybranch_3wg.png differ diff --git a/docs/build/html/_images/ring_bus_wg.png b/docs/build/html/_images/ring_bus_wg.png index 1600145..a8b3a25 100644 Binary files a/docs/build/html/_images/ring_bus_wg.png and b/docs/build/html/_images/ring_bus_wg.png differ diff --git a/docs/build/html/_images/spiral.png b/docs/build/html/_images/spiral.png index d72b82b..d6b5d03 100644 Binary files a/docs/build/html/_images/spiral.png and b/docs/build/html/_images/spiral.png differ diff --git a/docs/build/html/_images/spiral_circle.png b/docs/build/html/_images/spiral_circle.png index 3b36483..6a5157e 100644 Binary files a/docs/build/html/_images/spiral_circle.png and b/docs/build/html/_images/spiral_circle.png differ diff --git a/docs/build/html/_images/spiral_rectangle.png b/docs/build/html/_images/spiral_rectangle.png index c45a6b1..8e6e73f 100644 Binary files a/docs/build/html/_images/spiral_rectangle.png and b/docs/build/html/_images/spiral_rectangle.png differ diff --git a/docs/build/html/_images/taper_xs2xs.png b/docs/build/html/_images/taper_xs2xs.png new file mode 100644 index 0000000..571ed0b Binary files /dev/null and b/docs/build/html/_images/taper_xs2xs.png differ diff --git a/docs/build/html/_images/transition.png b/docs/build/html/_images/transition.png new file mode 100644 index 0000000..07f9c58 Binary files /dev/null and b/docs/build/html/_images/transition.png differ diff --git a/docs/build/html/_images/waveguide.png b/docs/build/html/_images/waveguide.png new file mode 100644 index 0000000..aefd9ac Binary files /dev/null and b/docs/build/html/_images/waveguide.png differ diff --git a/docs/build/html/_images/waveguide_PIN.png b/docs/build/html/_images/waveguide_PIN.png new file mode 100644 index 0000000..e6ca13a Binary files /dev/null and b/docs/build/html/_images/waveguide_PIN.png differ diff --git a/docs/build/html/_sources/mxpic/components/geometry/index.md.txt b/docs/build/html/_sources/mxpic/components/geometry/index.md.txt index 8284e52..b6168ff 100644 --- a/docs/build/html/_sources/mxpic/components/geometry/index.md.txt +++ b/docs/build/html/_sources/mxpic/components/geometry/index.md.txt @@ -1,12 +1,10 @@ # Geometry -Reusable geometry structures used by component and primitive generators. - ```{toctree} :maxdepth: 2 -polygons -rings curves +polygons racetrack +rings ``` diff --git a/docs/build/html/_sources/mxpic/components/index.md.txt b/docs/build/html/_sources/mxpic/components/index.md.txt index 32b47a3..f7891b5 100644 --- a/docs/build/html/_sources/mxpic/components/index.md.txt +++ b/docs/build/html/_sources/mxpic/components/index.md.txt @@ -5,12 +5,11 @@ composites/index electronics/index +geometry/index others/index -pdks/index primitives/index basic gds_devices pins routing -geometry/index ``` diff --git a/docs/build/html/_sources/mxpic/components/primitives/EC_dual_layer_px3.md.txt b/docs/build/html/_sources/mxpic/components/primitives/EC_dual_layer_px3.md.txt index 64504cf..73c6493 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/EC_dual_layer_px3.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/EC_dual_layer_px3.md.txt @@ -8,10 +8,6 @@ ## EC_dual_layer_px3 ```{eval-rst} -.. image:: EC_dual_layer_px3.png - :align: center - :width: 600px - .. autoclass:: mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3 :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/active/dev_ps.md.txt b/docs/build/html/_sources/mxpic/components/primitives/active/dev_ps.md.txt index 4662e8a..ebfe92b 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/active/dev_ps.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/active/dev_ps.md.txt @@ -17,6 +17,10 @@ ## Heater_NDoped ```{eval-rst} +.. image:: ../../../../images/active/Heater_NDoped.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.dev_ps.Heater_NDoped :members: :undoc-members: @@ -26,6 +30,10 @@ ## PS_PIN ```{eval-rst} +.. image:: ../../../../images/active/PS_PIN.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.dev_ps.PS_PIN :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/active/pin_wg.md.txt b/docs/build/html/_sources/mxpic/components/primitives/active/pin_wg.md.txt index 38a8483..702b7f0 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/active/pin_wg.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/active/pin_wg.md.txt @@ -8,6 +8,10 @@ ## waveguide_PIN ```{eval-rst} +.. image:: ../../../../images/active/waveguide_PIN.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.pin_wg.waveguide_PIN :members: :undoc-members: @@ -17,6 +21,10 @@ ## WGDoped ```{eval-rst} +.. image:: ../../../../images/active/WGDoped.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.pin_wg.WGDoped :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/active/rings.md.txt b/docs/build/html/_sources/mxpic/components/primitives/active/rings.md.txt index c440905..f792da4 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/active/rings.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/active/rings.md.txt @@ -17,6 +17,10 @@ ## AED_Ring_PIN ```{eval-rst} +.. image:: ../../../../images/active/AED_Ring_PIN.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.AED_Ring_PIN :members: :undoc-members: @@ -26,6 +30,10 @@ ## STD_Ring_PIN ```{eval-rst} +.. image:: ../../../../images/active/STD_Ring_PIN.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.STD_Ring_PIN :members: :undoc-members: @@ -35,6 +43,10 @@ ## PIN_MRR_MM_Allpass ```{eval-rst} +.. image:: ../../../../images/active/PIN_MRR_MM_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.PIN_MRR_MM_Allpass :members: :undoc-members: @@ -44,6 +56,10 @@ ## PIN_MRR_MM_Adddrop ```{eval-rst} +.. image:: ../../../../images/active/PIN_MRR_MM_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.PIN_MRR_MM_Adddrop :members: :undoc-members: @@ -53,6 +69,10 @@ ## PIN_MRR_STD_Allpass ```{eval-rst} +.. image:: ../../../../images/active/PIN_MRR_STD_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.PIN_MRR_STD_Allpass :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/grating_couplers.md.txt b/docs/build/html/_sources/mxpic/components/primitives/grating_couplers.md.txt index d80e76b..5f7343f 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/grating_couplers.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/grating_couplers.md.txt @@ -5,80 +5,6 @@ :no-members: ``` -## Nano_ant - -```{eval-rst} -.. image:: Nano_ant.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.Nano_ant - :members: - :undoc-members: - :show-inheritance: -``` - -## Taper - -```{eval-rst} -.. image:: Taper.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.Taper - :members: - :undoc-members: - :show-inheritance: -``` - -## Grating_2D_Hole - -```{eval-rst} -.. image:: Grating_2D_Hole.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.Grating_2D_Hole - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_STD_2D - -```{eval-rst} -.. image:: GC_STD_2D.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.GC_STD_2D - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_STD_1D - -```{eval-rst} -.. image:: GC_STD_1D.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.GC_STD_1D - :members: - :undoc-members: - :show-inheritance: -``` - -## FA - -```{eval-rst} -.. autoclass:: mxpic.components.primitives.grating_couplers.FA - :members: - :undoc-members: - :show-inheritance: -``` - ## GC_SiN_Si_Dual_Layer ```{eval-rst} diff --git a/docs/build/html/_sources/mxpic/components/primitives/index.md.txt b/docs/build/html/_sources/mxpic/components/primitives/index.md.txt index e582776..56eff7b 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/index.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/index.md.txt @@ -7,9 +7,5 @@ active/index passive/index pic/index EC_dual_layer_px3 -beam_splitters -directional_couplers grating_couplers -multimode_interferometers -spiral ``` diff --git a/docs/build/html/_sources/mxpic/components/primitives/passive/crows.md.txt b/docs/build/html/_sources/mxpic/components/primitives/passive/crows.md.txt index e1d0c25..c4460fc 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/passive/crows.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/passive/crows.md.txt @@ -17,6 +17,10 @@ ## CROW_Eul_Ring ```{eval-rst} +.. image:: ../../../../images/passive/CROW_Eul_Ring.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_Eul_Ring :members: :undoc-members: @@ -26,6 +30,10 @@ ## CROW_Eul_RCK ```{eval-rst} +.. image:: ../../../../images/passive/CROW_Eul_RCK.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_Eul_RCK :members: :undoc-members: @@ -44,6 +52,10 @@ ## CROW_STD_Allpass ```{eval-rst} +.. image:: ../../../../images/passive/CROW_STD_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_STD_Allpass :members: :undoc-members: @@ -53,6 +65,10 @@ ## CROW_STD_Adddrop ```{eval-rst} +.. image:: ../../../../images/passive/CROW_STD_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_STD_Adddrop :members: :undoc-members: @@ -62,6 +78,10 @@ ## CROW_AED ```{eval-rst} +.. image:: ../../../../images/passive/CROW_AED.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_AED :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/passive/rings.md.txt b/docs/build/html/_sources/mxpic/components/primitives/passive/rings.md.txt index deff422..ebf046f 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/passive/rings.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/passive/rings.md.txt @@ -71,6 +71,10 @@ ## MRR_STD_Allpass ```{eval-rst} +.. image:: ../../../../images/passive/MRR_STD_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_STD_Allpass :members: :undoc-members: @@ -80,6 +84,10 @@ ## MRR_STD_Adddrop ```{eval-rst} +.. image:: ../../../../images/passive/MRR_STD_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_STD_Adddrop :members: :undoc-members: @@ -89,6 +97,10 @@ ## MRR_MM_Allpass ```{eval-rst} +.. image:: ../../../../images/passive/MRR_MM_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_MM_Allpass :members: :undoc-members: @@ -98,6 +110,10 @@ ## MRR_MM_Adddrop ```{eval-rst} +.. image:: ../../../../images/passive/MRR_MM_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_MM_Adddrop :members: :undoc-members: @@ -107,6 +123,10 @@ ## MRR_DW_Adddrop ```{eval-rst} +.. image:: ../../../../images/passive/MRR_DW_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_DW_Adddrop :members: :undoc-members: @@ -116,6 +136,10 @@ ## MRR_DW_Allpass ```{eval-rst} +.. image:: ../../../../images/passive/MRR_DW_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_DW_Allpass :members: :undoc-members: @@ -125,6 +149,10 @@ ## STD_ring_AMZI_adddrop ```{eval-rst} +.. image:: ../../../../images/passive/STD_ring_AMZI_adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/passive/unit.md.txt b/docs/build/html/_sources/mxpic/components/primitives/passive/unit.md.txt index 05ada25..a673f4e 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/passive/unit.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/passive/unit.md.txt @@ -8,6 +8,10 @@ ## waveguide ```{eval-rst} +.. image:: ../../../../images/passive/waveguide.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.waveguide :members: :undoc-members: @@ -17,6 +21,10 @@ ## PS_2st ```{eval-rst} +.. image:: ../../../../images/passive/PS_2st.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.PS_2st :members: :undoc-members: @@ -26,6 +34,10 @@ ## PS_2st_Straight ```{eval-rst} +.. image:: ../../../../images/passive/PS_2st_Straight.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.PS_2st_Straight :members: :undoc-members: @@ -35,6 +47,10 @@ ## PSR_1x2 ```{eval-rst} +.. image:: ../../../../images/passive/PSR_1x2.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.PSR_1x2 :members: :undoc-members: @@ -44,6 +60,10 @@ ## Brag_WDM ```{eval-rst} +.. image:: ../../../../images/passive/Brag_WDM.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.Brag_WDM :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/PBS.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/PBS.md.txt index 68af890..cd955c7 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/PBS.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/PBS.md.txt @@ -8,6 +8,10 @@ ## PBS_3wg ```{eval-rst} +.. image:: ../../../../images/pic/PBS_3wg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.PBS.PBS_3wg :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/YBS.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/YBS.md.txt index 89d1fe2..f9722f1 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/YBS.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/YBS.md.txt @@ -8,6 +8,10 @@ ## YBranch ```{eval-rst} +.. image:: ../../../../images/pic/YBranch.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.YBS.YBranch :members: :undoc-members: @@ -17,6 +21,10 @@ ## Ybranch_3wg ```{eval-rst} +.. image:: ../../../../images/pic/Ybranch_3wg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.YBS.Ybranch_3wg :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/bragg.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/bragg.md.txt index 9a283ed..ea87c58 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/bragg.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/bragg.md.txt @@ -8,6 +8,10 @@ ## Bragg_apodized ```{eval-rst} +.. image:: ../../../../images/pic/Bragg_apodized.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.bragg.Bragg_apodized :members: :undoc-members: @@ -17,6 +21,10 @@ ## Bragg ```{eval-rst} +.. image:: ../../../../images/pic/Bragg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.bragg.Bragg :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/couplers.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/couplers.md.txt index 1da320b..039f191 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/couplers.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/couplers.md.txt @@ -8,6 +8,10 @@ ## ring_bus_wg ```{eval-rst} +.. image:: ../../../../images/pic/ring_bus_wg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.ring_bus_wg :members: :undoc-members: @@ -17,6 +21,10 @@ ## ADC_STD_2x2 ```{eval-rst} +.. image:: ../../../../images/pic/ADC_STD_2x2.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.ADC_STD_2x2 :members: :undoc-members: @@ -26,6 +34,10 @@ ## DC ```{eval-rst} +.. image:: ../../../../images/pic/DC.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.DC :members: :undoc-members: @@ -35,6 +47,10 @@ ## BS_tdc ```{eval-rst} +.. image:: ../../../../images/pic/BS_tdc.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.BS_tdc :members: :undoc-members: @@ -44,6 +60,10 @@ ## MDM ```{eval-rst} +.. image:: ../../../../images/pic/MDM.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.MDM :members: :undoc-members: @@ -53,6 +73,10 @@ ## DC_bend ```{eval-rst} +.. image:: ../../../../images/pic/DC_bend.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.DC_bend :members: :undoc-members: @@ -62,6 +86,10 @@ ## DC_pX_3sg ```{eval-rst} +.. image:: ../../../../images/pic/DC_pX_3sg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.DC_pX_3sg :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/cross.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/cross.md.txt index 9c8b53a..ab01d00 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/cross.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/cross.md.txt @@ -8,6 +8,10 @@ ## Cross ```{eval-rst} +.. image:: ../../../../images/pic/Cross.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.cross.Cross :members: :undoc-members: @@ -17,6 +21,10 @@ ## Cross_Sine ```{eval-rst} +.. image:: ../../../../images/pic/Cross_Sine.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.cross.Cross_Sine :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/mmi.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/mmi.md.txt index af3a612..cb2120f 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/mmi.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/mmi.md.txt @@ -8,6 +8,10 @@ ## MMI_ML ```{eval-rst} +.. image:: ../../../../images/pic/MMI_ML.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.mmi.MMI_ML :members: :undoc-members: @@ -17,6 +21,10 @@ ## MMI_STD ```{eval-rst} +.. image:: ../../../../images/pic/MMI_STD.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.mmi.MMI_STD :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/racetrack.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/racetrack.md.txt index a1be195..01f12d7 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/racetrack.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/racetrack.md.txt @@ -17,6 +17,10 @@ ## RacetrackResonator ```{eval-rst} +.. image:: ../../../../images/pic/RacetrackResonator.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.racetrack.RacetrackResonator :members: :undoc-members: @@ -26,6 +30,10 @@ ## Racetrack_STD_Allpass ```{eval-rst} +.. image:: ../../../../images/pic/Racetrack_STD_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass :members: :undoc-members: @@ -35,6 +43,10 @@ ## Racetrack_MM_Allpass ```{eval-rst} +.. image:: ../../../../images/pic/Racetrack_MM_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.racetrack.Racetrack_MM_Allpass :members: :undoc-members: @@ -44,6 +56,10 @@ ## Racetrack_MM_Adddrop ```{eval-rst} +.. image:: ../../../../images/pic/Racetrack_MM_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.racetrack.Racetrack_MM_Adddrop :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/rings.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/rings.md.txt index a6b8d8e..1a03453 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/rings.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/rings.md.txt @@ -8,6 +8,10 @@ ## AED_ring ```{eval-rst} +.. image:: ../../../../images/pic/AED_ring.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.rings.AED_ring :members: :undoc-members: @@ -17,6 +21,10 @@ ## STD_PIC_Rings ```{eval-rst} +.. image:: ../../../../images/pic/STD_PIC_Rings.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.rings.STD_PIC_Rings :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/spiral.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/spiral.md.txt index a475ae3..40f73a2 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/spiral.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/spiral.md.txt @@ -8,6 +8,10 @@ ## spiral ```{eval-rst} +.. image:: ../../../../images/pic/spiral.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.spiral :members: :undoc-members: @@ -17,6 +21,10 @@ ## spiral_rectangle ```{eval-rst} +.. image:: ../../../../images/pic/spiral_rectangle.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.spiral_rectangle :members: :undoc-members: @@ -26,6 +34,10 @@ ## Spiral_Rect_STD ```{eval-rst} +.. image:: ../../../../images/pic/Spiral_Rect_STD.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.Spiral_Rect_STD :members: :undoc-members: @@ -35,6 +47,10 @@ ## spiral_circle ```{eval-rst} +.. image:: ../../../../images/pic/spiral_circle.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.spiral_circle :members: :undoc-members: @@ -44,6 +60,10 @@ ## Spiral_Cicle_MM ```{eval-rst} +.. image:: ../../../../images/pic/Spiral_Cicle_MM.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.Spiral_Cicle_MM :members: :undoc-members: @@ -53,6 +73,10 @@ ## Spiral_Cicle_STD ```{eval-rst} +.. image:: ../../../../images/pic/Spiral_Cicle_STD.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.Spiral_Cicle_STD :members: :undoc-members: diff --git a/docs/build/html/_sources/mxpic/components/primitives/pic/taper.md.txt b/docs/build/html/_sources/mxpic/components/primitives/pic/taper.md.txt index 74079ba..c9a93f8 100644 --- a/docs/build/html/_sources/mxpic/components/primitives/pic/taper.md.txt +++ b/docs/build/html/_sources/mxpic/components/primitives/pic/taper.md.txt @@ -8,6 +8,10 @@ ## transition ```{eval-rst} +.. image:: ../../../../images/pic/transition.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.taper.transition :members: :undoc-members: @@ -17,6 +21,10 @@ ## taper_xs2xs ```{eval-rst} +.. image:: ../../../../images/pic/taper_xs2xs.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.taper.taper_xs2xs :members: :undoc-members: @@ -26,6 +34,10 @@ ## PSR ```{eval-rst} +.. image:: ../../../../images/pic/PSR.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.taper.PSR :members: :undoc-members: diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index af8028c..d2fe567 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -286,16 +286,12 @@ - + @@ -398,8 +390,6 @@
  • (mxpic.components.primitives.active.dev_ps.PS_PIN attribute)
  • (mxpic.components.primitives.pic.spiral.spiral_circle attribute) -
  • -
  • (mxpic.components.primitives.spiral.spiral_circle attribute)
  • @@ -432,50 +422,20 @@
  • CROW_STD_Allpass (class in mxpic.components.primitives.passive.crows)
  • -
  • CRX_TE_1310 (class in mxpic.components.pdks.IMECAS_pdk) -
  • -
  • CRX_TE_1550 (class in mxpic.components.pdks.CUMEC_pdk) - -
  • D

      -
    • DC_pX3_50_50_Cband (class in mxpic.components.pdks.qy_pdk_A) -
    • -
    • DC_pX_3sg (class in mxpic.components.primitives.directional_couplers) - -
    • -
    • DC_TE_1550 (class in mxpic.components.pdks.IMECAS_pdk) -
    • DEVICE_2X2_FDTD_INIT() (in module mxpic.components.others.simulation.DualPortElements)
    • DEVICE_COUPLER (class in mxpic.components.others.simulation.DualPortElements) @@ -490,16 +450,12 @@

      E

        -
      • Elipse (class in mxpic.components.geometry.rings) -
      • Elipse_dual (class in mxpic.components.geometry.rings)
      • EULER_CROW_BUS (class in mxpic.components.others.simulation.DualPortElements) @@ -512,12 +468,8 @@

        F

        -
      • generate_err() (mxpic.components.primitives.directional_couplers.ADC_STD_2x2 method) - -
      • generate_gds() (mxpic.components.composites.MZI.MZI_Butterfly method)
        • -
        • generate_gds_error() (mxpic.components.primitives.grating_couplers.Nano_ant method) - -
        • generate_gds_lib() (in module mxpic.components.gds_devices) - -
        • -
        • generate_gds_positive() (mxpic.components.primitives.grating_couplers.Nano_ant method) - -
        • generate_imp_gds() (mxpic.components.primitives.active.rings.AED_Ring_PIN method)
        • generate_mzi_gds() (mxpic.components.primitives.active.dev_ps.PS_PIN method)
        • -
        • generate_negative() (mxpic.components.primitives.grating_couplers.GC_STD_1D method) +
        • generate_negative() (mxpic.components.primitives.pic.bragg.Bragg_apodized method)
        • -
        • generate_positive() (mxpic.components.primitives.grating_couplers.GC_STD_1D method) +
        • generate_positive() (mxpic.components.primitives.pic.bragg.Bragg_apodized method)
        • -
        • generate_test_dev() (mxpic.components.primitives.grating_couplers.GC_STD_1D method) - -
        • generate_test_gds() (mxpic.components.composites.MZI.MZI_Butterfly method)
        • generate_test_mzi_gds() (mxpic.components.primitives.passive.rings.SOCR method)
        • -
        • GPD_1550 (class in mxpic.components.pdks.CUMEC_pdk) +
        • Grating_2D_Hole (class in mxpic.components.primitives.pic.gratings)
        • -
        • Grating_2D_Hole (class in mxpic.components.primitives.grating_couplers) - -
        • Grating_2D_Hole_3Rec (class in mxpic.components.primitives.pic.gratings)
        • Grating_2D_Hole_4Rec (class in mxpic.components.primitives.pic.gratings) @@ -898,52 +722,12 @@

          M

          - +
          -
          • mxpic.components.electronics.eic_units @@ -1113,6 +877,8 @@
          • module
          +
          • mxpic.components.geometry.curves @@ -1146,41 +912,6 @@
          • -
          • - mxpic.components.pdks.AMF_pdk - -
          • -
          • - mxpic.components.pdks.CUMEC_pdk - -
          • -
          • - mxpic.components.pdks.hgl_pdk_A - -
          • -
          • - mxpic.components.pdks.IMECAS_pdk - -
          • -
          • - mxpic.components.pdks.qy_pdk_A - -
          • @@ -1209,20 +940,6 @@
          • -
          • - mxpic.components.primitives.beam_splitters - -
          • -
          • - mxpic.components.primitives.directional_couplers - -
          • @@ -1237,13 +954,6 @@
          • -
          • - mxpic.components.primitives.multimode_interferometers - -
          • @@ -1342,13 +1052,6 @@
          • -
          • - mxpic.components.primitives.spiral - -
          • @@ -1384,12 +1087,8 @@

            N

            @@ -1397,11 +1096,7 @@
            @@ -1409,25 +1104,19 @@ - +
              -
            • spiral_rectangle (class in mxpic.components.primitives.pic.spiral) - -
            • SplittingTree (class in mxpic.components.composites.SptTree)
            • STD_CROW_V (class in mxpic.components.primitives.passive.crows) @@ -1608,12 +1269,8 @@

              T

              - - - - - - - - - - - - - - - - - - - - - - - - - - -
              diff --git a/docs/build/html/mxpic/components/basic.html b/docs/build/html/mxpic/components/basic.html index 9b65b84..9705b54 100644 --- a/docs/build/html/mxpic/components/basic.html +++ b/docs/build/html/mxpic/components/basic.html @@ -45,7 +45,7 @@ - + @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • @@ -379,12 +373,12 @@ diff --git a/docs/build/html/mxpic/components/composites/MZI.html b/docs/build/html/mxpic/components/composites/MZI.html index 65d0a69..5488348 100644 --- a/docs/build/html/mxpic/components/composites/MZI.html +++ b/docs/build/html/mxpic/components/composites/MZI.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/composites/MZI_mesh.html b/docs/build/html/mxpic/components/composites/MZI_mesh.html index 348fad6..d557032 100644 --- a/docs/build/html/mxpic/components/composites/MZI_mesh.html +++ b/docs/build/html/mxpic/components/composites/MZI_mesh.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/composites/SptTree.html b/docs/build/html/mxpic/components/composites/SptTree.html index f6059be..54ddb14 100644 --- a/docs/build/html/mxpic/components/composites/SptTree.html +++ b/docs/build/html/mxpic/components/composites/SptTree.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/composites/advance.html b/docs/build/html/mxpic/components/composites/advance.html index 1d4d948..96b9983 100644 --- a/docs/build/html/mxpic/components/composites/advance.html +++ b/docs/build/html/mxpic/components/composites/advance.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/composites/index.html b/docs/build/html/mxpic/components/composites/index.html index ba8f1e2..b799dc1 100644 --- a/docs/build/html/mxpic/components/composites/index.html +++ b/docs/build/html/mxpic/components/composites/index.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/electronics/eic_units.html b/docs/build/html/mxpic/components/electronics/eic_units.html index dfb7858..8b2d5df 100644 --- a/docs/build/html/mxpic/components/electronics/eic_units.html +++ b/docs/build/html/mxpic/components/electronics/eic_units.html @@ -44,7 +44,7 @@ - + @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -463,11 +451,11 @@

              next

              -

              Others

              +

              Geometry

              diff --git a/docs/build/html/mxpic/components/electronics/index.html b/docs/build/html/mxpic/components/electronics/index.html index 50e4f89..a85471a 100644 --- a/docs/build/html/mxpic/components/electronics/index.html +++ b/docs/build/html/mxpic/components/electronics/index.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/gds_devices.html b/docs/build/html/mxpic/components/gds_devices.html index c43cefc..581e02b 100644 --- a/docs/build/html/mxpic/components/gds_devices.html +++ b/docs/build/html/mxpic/components/gds_devices.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/geometry/curves.html b/docs/build/html/mxpic/components/geometry/curves.html index 3341370..9517972 100644 --- a/docs/build/html/mxpic/components/geometry/curves.html +++ b/docs/build/html/mxpic/components/geometry/curves.html @@ -44,8 +44,8 @@ - - + + @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -412,20 +400,20 @@

              previous

              -

              mxpic.components.geometry.rings

              +

              Geometry

              next

              -

              mxpic.components.geometry.racetrack

              +

              mxpic.components.geometry.polygons

              diff --git a/docs/build/html/mxpic/components/geometry/index.html b/docs/build/html/mxpic/components/geometry/index.html index 9902011..af58158 100644 --- a/docs/build/html/mxpic/components/geometry/index.html +++ b/docs/build/html/mxpic/components/geometry/index.html @@ -44,8 +44,8 @@ - - + + @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -372,13 +360,21 @@

              Geometry#

              -

              Reusable geometry structures used by component and primitive generators.

              @@ -411,20 +398,20 @@

              previous

              -

              mxpic.components.routing

              +

              mxpic.components.electronics.eic_units

              next

              -

              mxpic.components.geometry.polygons

              +

              mxpic.components.geometry.curves

              diff --git a/docs/build/html/mxpic/components/geometry/polygons.html b/docs/build/html/mxpic/components/geometry/polygons.html index c9d756b..3fae0c4 100644 --- a/docs/build/html/mxpic/components/geometry/polygons.html +++ b/docs/build/html/mxpic/components/geometry/polygons.html @@ -44,8 +44,8 @@ - - + + @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -398,20 +386,20 @@

              previous

              -

              Geometry

              +

              mxpic.components.geometry.curves

              next

              -

              mxpic.components.geometry.rings

              +

              mxpic.components.geometry.racetrack

              diff --git a/docs/build/html/mxpic/components/geometry/racetrack.html b/docs/build/html/mxpic/components/geometry/racetrack.html index d52a8ed..b837cd1 100644 --- a/docs/build/html/mxpic/components/geometry/racetrack.html +++ b/docs/build/html/mxpic/components/geometry/racetrack.html @@ -44,7 +44,8 @@ - + + @@ -248,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -402,14 +391,23 @@ diff --git a/docs/build/html/mxpic/components/geometry/rings.html b/docs/build/html/mxpic/components/geometry/rings.html index df7464a..68fd6bd 100644 --- a/docs/build/html/mxpic/components/geometry/rings.html +++ b/docs/build/html/mxpic/components/geometry/rings.html @@ -44,8 +44,8 @@ - - + + @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -455,20 +443,20 @@ @@ -383,16 +371,15 @@
            • mxpic.components.electronics.eic_units
            • -
            • Others diff --git a/docs/build/html/mxpic/components/others/index.html b/docs/build/html/mxpic/components/others/index.html index 20dc61d..b75d2be 100644 --- a/docs/build/html/mxpic/components/others/index.html +++ b/docs/build/html/mxpic/components/others/index.html @@ -45,7 +45,7 @@ - + @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • @@ -387,12 +381,12 @@ @@ -503,11 +497,11 @@

              next

              -

              Pdks

              +

              Primitives

              diff --git a/docs/build/html/mxpic/components/others/simulation/index.html b/docs/build/html/mxpic/components/others/simulation/index.html index 018347d..3fc9d47 100644 --- a/docs/build/html/mxpic/components/others/simulation/index.html +++ b/docs/build/html/mxpic/components/others/simulation/index.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • diff --git a/docs/build/html/mxpic/components/pdks/AMF_pdk.html b/docs/build/html/mxpic/components/pdks/AMF_pdk.html index 06e1eeb..09947c4 100644 --- a/docs/build/html/mxpic/components/pdks/AMF_pdk.html +++ b/docs/build/html/mxpic/components/pdks/AMF_pdk.html @@ -303,7 +303,13 @@
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • +
            • Geometry
              +
            • @@ -367,37 +373,16 @@
              -
              -

              mxpic.components.pdks.AMF_pdk#

              +
              +

              mxpic.components.pdks.AMF_pdk#

              GC_TE_1550#

              -
              -
              -class mxpic.components.pdks.AMF_pdk.GC_TE_1550(pdk_path='AMF_IPKISS_PDK')#
              -

              Bases: gds_lib_load

              -

              CUMEC TE Grating Coupler at 1550nm.

              -
              -

              GC_TE_1310#

              -
              -
              -class mxpic.components.pdks.AMF_pdk.GC_TE_1310(pdk_path='AMF_IPKISS_PDK')#
              -

              Bases: gds_lib_load

              -

              CUMEC TE Grating Coupler at 1310nm.

              -
              -

              PD_Cband_Cell#

              -
              -
              -class mxpic.components.pdks.AMF_pdk.PD_Cband_Cell(pdk_path='AMF_IPKISS_PDK')#
              -

              Bases: gds_lib_load

              -

              AMF Ge Power Monitor Cell at Cband.

              -
              -
              @@ -448,18 +433,9 @@ diff --git a/docs/build/html/mxpic/components/pdks/CUMEC_pdk.html b/docs/build/html/mxpic/components/pdks/CUMEC_pdk.html index d9c0327..53d0278 100644 --- a/docs/build/html/mxpic/components/pdks/CUMEC_pdk.html +++ b/docs/build/html/mxpic/components/pdks/CUMEC_pdk.html @@ -303,7 +303,13 @@
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • +
            • Geometry
              +
            • @@ -367,133 +373,40 @@
              -
              -

              mxpic.components.pdks.CUMEC_pdk#

              +
              +

              mxpic.components.pdks.CUMEC_pdk#

              PAD_60_80#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.PAD_60_80(pdk_path='CUMEC_SiP130Cu_PDK')#
              -

              Bases: gds_lib_load

              -
              -

              GPD_1550#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.GPD_1550(pdk_path='CUMEC_SiP130Cu_PDK')#
              -

              Bases: gds_lib_load

              -
              -

              EC_1550#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.EC_1550(pdk_path='CUMEC_SiP130Cu_PDK')#
              -

              Bases: gds_lib_load

              -

              CUMEC TE Grating Coupler at 1550nm.

              -
              -

              GC_TE_1550#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.GC_TE_1550(pdk_path='CUMEC_SiP130Cu_PDK')#
              -

              Bases: gds_lib_load

              -

              CUMEC TE Grating Coupler at 1550nm.

              -
              -
              -generate_test_gds(gc2gc_dX=300)#
              -
              - -
              -

              GC_TM_1550#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.GC_TM_1550(pdk_path='CUMEC_SiP130Cu_PDK')#
              -

              Bases: gds_lib_load

              -

              CUMEC TE Grating Coupler at 1550nm.

              -
              -
              -generate_test_gds(gc2gc_dX=300)#
              -
              - -
              -

              GC_TE_1310#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.GC_TE_1310(pdk_path='CUMEC_SiP130Cu_PDK')#
              -

              Bases: gds_lib_load

              -

              CUMEC TE Grating Coupler at 1310nm.

              -
              -

              MMI_1x2_TE_1550#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.MMI_1x2_TE_1550(pdk_path='CUMEC_SiP130Cu_PDK', sharp_patch=True)#
              -

              Bases: gds_lib_load

              -

              CUMEC TE 1by 2 MMI at 1550nm.

              -
              -
              -generate_test_gds(gc, gc2gc_length=300)#
              -
              - -
              -

              MMI_1x2_TE_1310#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.MMI_1x2_TE_1310(pdk_path='CUMEC_SiP130Cu_PDK', sharp_patch=True)#
              -

              Bases: gds_lib_load

              -

              CUMEC TE 1by 2 MMI at 1310nm.

              -
              -

              MMI_2x2_TE_1550#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.MMI_2x2_TE_1550(pdk_path='CUMEC_SiP130Cu_PDK')#
              -

              Bases: gds_lib_load

              -

              CUMEC TE 1by 2 MMI at 1310nm.

              -
              -

              CRX_TE_1550#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.CRX_TE_1550(pdk_path='CUMEC_SiP130Cu_PDK')#
              -

              Bases: gds_lib_load

              -
              -
              -generate_test_gds(gc, num=5, dX_gc2gc=400, w_end=0.2, L_end=10)#
              -
              - -
              -

              PBS_1550#

              -
              -
              -class mxpic.components.pdks.CUMEC_pdk.PBS_1550(pdk_path='CUMEC_SiP130Cu_PDK')#
              -

              Bases: gds_lib_load

              -
              -
              @@ -544,62 +457,17 @@ diff --git a/docs/build/html/mxpic/components/pdks/IMECAS_pdk.html b/docs/build/html/mxpic/components/pdks/IMECAS_pdk.html index d925e4f..22778c4 100644 --- a/docs/build/html/mxpic/components/pdks/IMECAS_pdk.html +++ b/docs/build/html/mxpic/components/pdks/IMECAS_pdk.html @@ -303,7 +303,13 @@
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • +
            • Geometry
              +
            • @@ -367,143 +373,49 @@
              -
              -

              mxpic.components.pdks.IMECAS_pdk#

              +
              +

              mxpic.components.pdks.IMECAS_pdk#

              Template#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.Template(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              EC_TE_1550#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.EC_TE_1550(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              GC_TE_1550#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.GC_TE_1550(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              GC_TM_1550#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.GC_TM_1550(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              GC_TE_1310#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.GC_TE_1310(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              GC_TM_1310#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.GC_TM_1310(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              DC_TE_1550#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.DC_TE_1550(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              MMI_2x2_TE_1550#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.MMI_2x2_TE_1550(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              MMI_1x2_TE_1550#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.MMI_1x2_TE_1550(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              MMI_2x2_TE_1310#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.MMI_2x2_TE_1310(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              MMI_1x2_TE_1310#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.MMI_1x2_TE_1310(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              Ybranch_TE#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.Ybranch_TE(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -

              CRX_TE_1550#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.CRX_TE_1550(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -
              -generate_test_gds(gc, num=5, dX_gc2gc=400, w_end=0.2, L_end=10)#
              -
              - -
              -

              CRX_TE_1310#

              -
              -
              -class mxpic.components.pdks.IMECAS_pdk.CRX_TE_1310(pdk_path='IMECAS_PDK2.1')#
              -

              Bases: gds_lib_load

              -
              -
              -generate_test_gds(gc, num=5, dX_gc2gc=400, w_end=0.2, L_end=10)#
              -
              - -
              -
              @@ -554,68 +466,20 @@ diff --git a/docs/build/html/mxpic/components/pdks/hgl_pdk_A.html b/docs/build/html/mxpic/components/pdks/hgl_pdk_A.html index d732b5c..a56fcf3 100644 --- a/docs/build/html/mxpic/components/pdks/hgl_pdk_A.html +++ b/docs/build/html/mxpic/components/pdks/hgl_pdk_A.html @@ -303,7 +303,13 @@
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • +
            • Geometry
              +
            • @@ -367,40 +373,16 @@
              -
              -

              mxpic.components.pdks.hgl_pdk_A#

              +
              +

              mxpic.components.pdks.hgl_pdk_A#

              DC_bend_50_50_Cband#

              -
              -
              -class mxpic.components.pdks.hgl_pdk_A.DC_bend_50_50_Cband(w_wg, show_pins=False)#
              -

              Bases: DC_bend

              -
              -

              DC_bend_20_80_Cband#

              -
              -
              -class mxpic.components.pdks.hgl_pdk_A.DC_bend_20_80_Cband(w_wg, show_pins=False)#
              -

              Bases: DC_bend

              -

              This is a wideband 20/80 Direction Coupler based on bend directional coupler, from 1500nm to 1600nm. -Through: 80% -Cross: 20%

              -
              -

              DC_bend_4_96_Cband#

              -
              -
              -class mxpic.components.pdks.hgl_pdk_A.DC_bend_4_96_Cband(w_wg, show_pins=False)#
              -

              Bases: DC_bend

              -

              This is a wideband 20/80 Direction Coupler based on bend directional coupler, from 1500nm to 1600nm. -Through: 96% -Cross: 4%

              -
              -
              @@ -451,18 +433,9 @@ Cross: 4%

              diff --git a/docs/build/html/mxpic/components/pdks/index.html b/docs/build/html/mxpic/components/pdks/index.html index 61b97b6..312fc72 100644 --- a/docs/build/html/mxpic/components/pdks/index.html +++ b/docs/build/html/mxpic/components/pdks/index.html @@ -303,7 +303,13 @@
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • +
            • Geometry
              +
            • diff --git a/docs/build/html/mxpic/components/pdks/qy_pdk_A.html b/docs/build/html/mxpic/components/pdks/qy_pdk_A.html index 6ee175b..c7408e0 100644 --- a/docs/build/html/mxpic/components/pdks/qy_pdk_A.html +++ b/docs/build/html/mxpic/components/pdks/qy_pdk_A.html @@ -303,7 +303,13 @@
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • +
            • Geometry
              +
            • @@ -367,77 +373,22 @@
              -
              -

              mxpic.components.pdks.qy_pdk_A#

              +
              +

              mxpic.components.pdks.qy_pdk_A#

              DC_pX3_50_50_Cband#

              -
              -
              -class mxpic.components.pdks.qy_pdk_A.DC_pX3_50_50_Cband(w_wg=0.5, gds_lib_generate=False, name=None)#
              -

              Bases: DC_pX_3sg

              -
              -
              -generate_gds_lib()#
              -
              - -
              -

              MMG_1D_D14um_1550_2modes#

              -
              -
              -class mxpic.components.pdks.qy_pdk_A.MMG_1D_D14um_1550_2modes(w_wg=0.5, gds_lib_generate=False)#
              -

              Bases: GC_STD_1D

              -
              -
              -generate_gds_lib()#
              -
              - -
              -

              MDM_ADC_TE1_1550#

              -
              -
              -class mxpic.components.pdks.qy_pdk_A.MDM_ADC_TE1_1550(w_wg=0.45, gds_lib_generate=False)#
              -

              Bases: MDM

              -
              -
              -generate_gds_lib()#
              -
              - -
              -

              MDM_ADC_TE2_1550#

              -
              -
              -class mxpic.components.pdks.qy_pdk_A.MDM_ADC_TE2_1550(w_wg=0.45, gds_lib_generate=False)#
              -

              Bases: MDM

              -
              -
              -generate_gds_lib()#
              -
              - -
              -

              MDM_ADC_TE3_1550#

              -
              -
              -class mxpic.components.pdks.qy_pdk_A.MDM_ADC_TE3_1550(w_wg=0.45, gds_lib_generate=False)#
              -

              Bases: MDM

              -
              -
              -generate_gds_lib()#
              -
              - -
              -
              @@ -488,41 +439,11 @@ diff --git a/docs/build/html/mxpic/components/pins.html b/docs/build/html/mxpic/components/pins.html index 2706152..6a93481 100644 --- a/docs/build/html/mxpic/components/pins.html +++ b/docs/build/html/mxpic/components/pins.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • mxpic.components.structures
            • diff --git a/docs/build/html/mxpic/components/primitives/EC_dual_layer_px3.html b/docs/build/html/mxpic/components/primitives/EC_dual_layer_px3.html index 9ba819c..c6851ed 100644 --- a/docs/build/html/mxpic/components/primitives/EC_dual_layer_px3.html +++ b/docs/build/html/mxpic/components/primitives/EC_dual_layer_px3.html @@ -44,7 +44,7 @@ - + @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -377,8 +365,6 @@

              mxpic.components.primitives.EC_dual_layer_px3#

              EC_dual_layer_px3#

              -../../../_images/EC_dual_layer_px3.png -
              class mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3(name=None, w_in=1.0, L_in=15, Ltp1=100, Ltp2=200, Ltp3=400, L_end=0, w_tip_core=0.2, w1_slab=0.6, w_tip_slab=0.2, w_mid_slab=0.45, w_box=8, w_box_end=12, L_box_end=2, w_DT=12, xs_SiN='sin', layer_SiN_slab='SiN_Rib_WG', layer_DT='OXIDE_FACET', xs_Trench='air_trench', layer_top_cover='PAD_OPTICAL', layer_dum_exl_be=None, angle_tile=8, R_bend=50)#
              @@ -446,11 +432,11 @@ contrast core and a secondary slab/cladding layer (e.g., SiN to SOI).

              next

              -

              mxpic.components.primitives.beam_splitters

              +

              mxpic.components.primitives.grating_couplers

              diff --git a/docs/build/html/mxpic/components/primitives/active/dev_ps.html b/docs/build/html/mxpic/components/primitives/active/dev_ps.html index 738010e..16d57b8 100644 --- a/docs/build/html/mxpic/components/primitives/active/dev_ps.html +++ b/docs/build/html/mxpic/components/primitives/active/dev_ps.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -389,6 +377,8 @@

              Heater_NDoped#

              +../../../../_images/Heater_NDoped.png +
              class mxpic.components.primitives.active.dev_ps.Heater_NDoped(w_wg=0.45, slab_width=1.1, heater_length=100, heater_width=1, if_open=True, show_pins=False)#
              @@ -421,6 +411,8 @@

              PS_PIN#

              +../../../../_images/PS_PIN.png +
              class mxpic.components.primitives.active.dev_ps.PS_PIN(w_wg=0.45, w_wg_slab=0.5, w_slab=1, l_wg=800, d2wg_list=[0.2, 1], p_layer_list=['PW', 'PP'], n_layer_list=['NW', 'NP'], w_plus_max=5.1, show_pins=False)#
              diff --git a/docs/build/html/mxpic/components/primitives/active/index.html b/docs/build/html/mxpic/components/primitives/active/index.html index f952ea7..b53b37f 100644 --- a/docs/build/html/mxpic/components/primitives/active/index.html +++ b/docs/build/html/mxpic/components/primitives/active/index.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/primitives/active/pin_wg.html b/docs/build/html/mxpic/components/primitives/active/pin_wg.html index 6ae3805..28533ab 100644 --- a/docs/build/html/mxpic/components/primitives/active/pin_wg.html +++ b/docs/build/html/mxpic/components/primitives/active/pin_wg.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.active.pin_wg#

              waveguide_PIN#

              +../../../../_images/waveguide_PIN.png +
              class mxpic.components.primitives.active.pin_wg.waveguide_PIN(xs='rib', L_wg=100, w_wg=1.2, xs_pn_ct='strip_cor', w_itr=2.0, w_p=4.0, w_n=4.0, w_p_ct=4.0, w_n_ct=4.0, xs_heater='heater', xs_via_h2m='via_h2m', w_metal_pn=8, sz_via_i2m=0.25, sp_via_i2m=0.35, sp_sc=1, xs_p='pw', xs_n='nw', xs_pcont='pp', xs_ncont='np', xs_sa='sa', xs_via_s2m='via_s2m', xs_metal='metal', rib_taper=True, L_taper=30, xs_port='strip', show_pins=True)#
              @@ -428,6 +418,8 @@

              WGDoped#

              +../../../../_images/WGDoped.png +
              class mxpic.components.primitives.active.pin_wg.WGDoped(name=None, w_wg=0.5, w_port=0.5, Ltp_port=10, L_wg=200, xs_wg='rib', xs_n=['nld', 'np'], xs_p=['pld', 'pp'], w_n=[0.5, 1], w_p=[0.5, 1], w_ht=0, L_ht=None, xs_ht='heater', w_mt=None, xs_mt='metal', xs_cont_wg=None, w_i=None, dope_offset=0, via_s2m=None, via_h2m=None, dope_ovlp=0.2, cell_xs_transition=None)#
              diff --git a/docs/build/html/mxpic/components/primitives/active/rings.html b/docs/build/html/mxpic/components/primitives/active/rings.html index 0b14089..174d616 100644 --- a/docs/build/html/mxpic/components/primitives/active/rings.html +++ b/docs/build/html/mxpic/components/primitives/active/rings.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -389,6 +377,8 @@

              AED_Ring_PIN#

              +../../../../_images/AED_Ring_PIN.png +
              class mxpic.components.primitives.active.rings.AED_Ring_PIN(name=None, ORx=10, ORy=9, IRx=9.35, IRy=8.6, gap=0.2, dual_BUS=False, w_bus=0.45, R_cp=None, A_cp=0, offset_X=0, offset_Y=0, w_wg=0.45, R_att=20, R_att_min=10, A_att=30, Ltp_bus=10, dL_p2p=None, L_tilt=10, xs_ring='strip', sharp_patch=True, Euler_trasition=False, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=8, via_h2m=None, isl=None, A_ht=270, ht_notch_dual=True, epin_ht_dX=10, epin_ht_dY=3, via_i2m=None, xs_metal_imp='metal', xs_p='p', xs_n='n', xs_cont_wg=None, w_p=3.0, gap_p_i=1, gap_n_i=1, w_n=3.0, offset_i=0, A_imp_in=180, A_imp_out=180, sp_cont=0.2, w_ovlp=0.1, bus_dopping=True, p_in_n_out=False, cell_xs_transition=None)#
              @@ -461,6 +451,8 @@

              STD_Ring_PIN#

              +../../../../_images/STD_Ring_PIN.png +
              class mxpic.components.primitives.active.rings.STD_Ring_PIN(name, r_ring=10, w_ring=0.55, gap=0.2, dual_BUS=True, w_bus=0.45, R_cp=None, A_cp=0, offset_X=0, offset_Y=0, w_wg=0.45, R_att=20, R_att_min=10, A_att=30, Ltp_bus=10, dL_p2p=None, L_tilt=10, xs_ring='strip', sharp_patch=True, Euler_trasition=False, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=8, via_h2m=None, isl=None, A_ht=270, ht_notch_dual=True, epin_ht_dX=10, epin_ht_dY=3, xs_metal_imp='metal', via_i2m=None, xs_p='p', xs_n='n', xs_cont_wg=None, w_p=3, gap_p_i=1, gap_n_i=1, w_n=3, offset_i=0, A_imp_in=180, A_imp_out=180, xs_pcont='pp', xs_ncont='np', w_pcont=3, w_ncont=3, sp_cont=0.2, w_ovlp=0.2, bus_dopping=True, p_in_n_out=False)#
              @@ -529,6 +521,8 @@

              PIN_MRR_MM_Allpass#

              +../../../../_images/PIN_MRR_MM_Allpass.png +
              class mxpic.components.primitives.active.rings.PIN_MRR_MM_Allpass(name=None, r_ring=10, w_ring=0.55, gap=0.2, w_bus=0.45, R_cp=None, A_cp=0, R_att=10, R_att_min=10, A_att=10, offset_X=0, offset_Y=0, w_wg=0.45, Ltp_bus=10, dL_p2p=None, xs_ring='strip', sharp_patch=True, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=8, via_h2m=None, isl=None, A_ht=270, ht_notch_dual=True, epin_ht_dX=10, epin_ht_dY=3, xs_metal_imp='metal', via_i2m=None, xs_p='p', xs_n='n', xs_cont_wg=None, w_p=3, w_n=3, w_i=1, offset_i=0, A_imp_in=180, A_imp_out=180, sp_cont=0.2, w_ovlp=0.2, bus_dopping=True, cell_xs_transition=None, p_in_n_out=False)#
              @@ -590,6 +584,8 @@

              PIN_MRR_MM_Adddrop#

              +../../../../_images/PIN_MRR_MM_Adddrop.png +
              class mxpic.components.primitives.active.rings.PIN_MRR_MM_Adddrop(name=None, r_ring=10, w_ring=0.55, gap=0.2, w_bus=0.45, R_cp=None, A_cp=0, R_att=10, R_att_min=10, A_att=10, offset_X=0, offset_Y=0, w_wg=0.45, Ltp_bus=10, dL_p2p=None, xs_ring='strip', sharp_patch=True, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=8, via_h2m=None, isl=None, A_ht=270, ht_notch_dual=True, epin_ht_dX=10, epin_ht_dY=3, xs_metal_imp='metal', via_i2m=None, xs_p='p', xs_n='n', xs_cont_wg=None, w_p=3, w_n=3, w_i=1, offset_i=0, A_imp_in=180, A_imp_out=180, sp_cont=0.2, w_ovlp=0.2, bus_dopping=True, cell_xs_transition=None, p_in_n_out=False)#
              @@ -651,6 +647,8 @@

              PIN_MRR_STD_Allpass#

              +../../../../_images/PIN_MRR_STD_Allpass.png +
              class mxpic.components.primitives.active.rings.PIN_MRR_STD_Allpass(name=None, r_ring=10, w_ring=0.55, gap=0.2, w_bus=0.45, A_cp=0, w_wg=0.45, Ltp_bus=10, dL_p2p=None, L_tilt=10, xs_ring='strip', sharp_patch=True, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=8, via_h2m=None, isl=None, A_ht=270, ht_notch_dual=True, epin_ht_dX=10, epin_ht_dY=3, xs_metal_imp='metal', via_i2m=None, xs_p='p', xs_n='n', xs_cont_wg=None, w_p=3, w_n=3, w_i=1, offset_i=0, A_imp_in=180, A_imp_out=180, sp_cont=0.2, w_ovlp=0.2, bus_dopping=True, cell_xs_transition=None, p_in_n_out=False)#
              diff --git a/docs/build/html/mxpic/components/primitives/beam_splitters.html b/docs/build/html/mxpic/components/primitives/beam_splitters.html index 2676589..b0c802d 100644 --- a/docs/build/html/mxpic/components/primitives/beam_splitters.html +++ b/docs/build/html/mxpic/components/primitives/beam_splitters.html @@ -373,83 +373,17 @@
              -
              -

              mxpic.components.primitives.beam_splitters#

              +
              +

              mxpic.components.primitives.beam_splitters#

              YBranch#

              ../../../_images/YBranch.png -
              -
              -class mxpic.components.primitives.beam_splitters.YBranch(name=None, xs='strip', w=[1.2, 1.0, 1.8, 1.2, 1.0, 1.2, 1.2], L=6, R_att=10, A_att=10, w_port=0.45, show_pins=False, sharp_patch=True, res=0.1)#
              -

              Bases: object

              -

              Broadband spline-shaped Y-branch with two bent output ports.

              -
              -
              Parameters:
              -
                -
              • name (str or None, optional) – Nazca cell name. None keeps the cell uninstantiated (default is None).

              • -
              • xs (str, optional) – Cross-section key used for both the taper body and attachments (default is “strip”).

              • -
              • w (Sequence[float], optional) – Width control points (µm) used by the cubic spline along the taper axis. -Length must be >= 2. Default is [1.2, 1.0, 1.8, 1.2, 1.0, 1.2, 1.2].

              • -
              • L (float, optional) – Total spline length in microns (default is 6).

              • -
              • R_att (float, optional) – Bend radius of each attachment waveguide in microns (default is 10).

              • -
              • A_att (float, optional) – Bend angle (degrees) per attachment arc (default is 10).

              • -
              • w_port (float, optional) – Output port width in microns (default is 0.45).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers when True (default is False).

              • -
              • sharp_patch (bool, optional) – Add chamfer helpers inside polygons when True (default is True).

              • -
              • res (float, optional) – Longitudinal sampling pitch (µm) for polygon discretization (default is 0.1).

              • -
              -
              -
              -
              -
              -generate_gds(show_pins=False, sharp_patch=True)#
              -
              - -
              -

              Ybranch_3wg#

              ../../../_images/Ybranch_3wg.png -
              -
              -class mxpic.components.primitives.beam_splitters.Ybranch_3wg(name=None, w0=0.4, w1=0.2, gap=0.18, Lcp=20, xs='strip', w_wg=0.45, R0=10, angle=20, L_attach=3, L_in_tp=3, sharp_patch=True)#
              -

              Bases: object

              -

              Initialization of a symmetric tapered coupler for 3dB coupling

              -
              -
              Parameters:
              -
                -
              • name (str or None, optional) – Nazca cell name (default is None).

              • -
              • part (2. attachment)

              • -
              • w0 (float, optional) – Width (µm) of the center arm at the coupling region entrance (default is 0.4).

              • -
              • w1 (float, optional) – Width (µm) of the outer arms at the coupling region exit (default is 0.2).

              • -
              • gap (float, optional) – Vertical spacing (µm) between adjacent arms inside the coupler (default is 0.18).

              • -
              • Lcp (float, optional) – Length (µm) of each taper section forming the coupler (default is 20).

              • -
              • xs (str, optional) – Cross-section key for all segments (default is “strip”).

              • -
              • part

              • -
              • w_wg (float, optional) – External IO waveguide width in microns (default is 0.45).

              • -
              • R0 (float, optional) – Bend radius (µm) used for both output waveguides (default is 10).

              • -
              • angle (float, optional) – Bend deflection angle in degrees (default is 20).

              • -
              • L_attach (float, optional) – Length (µm) of straight sections appended after the output tapers (default is 3).

              • -
              • L_in_tp (float, optional) – Taper length (µm) that links the IO waveguide to width w0 (default is 3).

              • -
              • sharp_patch (bool, optional) – Insert chamfer helpers when True (default is True).

              • -
              -
              -
              -
              -
              -generate_gds(sharp_patch, err_asy=0)#
              -
              - -
              -
              -generate_test_gds(gc, dX_gc2gc=400, dY_gc2gc=80, sharp_patch=True, Rbend=15)#
              -
              - -
              -
              @@ -500,21 +434,8 @@ Length must be >= 2. Default is diff --git a/docs/build/html/mxpic/components/primitives/directional_couplers.html b/docs/build/html/mxpic/components/primitives/directional_couplers.html index e8b5556..1f2b342 100644 --- a/docs/build/html/mxpic/components/primitives/directional_couplers.html +++ b/docs/build/html/mxpic/components/primitives/directional_couplers.html @@ -373,305 +373,42 @@
              -
              -

              mxpic.components.primitives.directional_couplers#

              +
              +

              mxpic.components.primitives.directional_couplers#

              ring_bus_wg#

              ../../../_images/ring_bus_wg.png -
              -
              -class mxpic.components.primitives.directional_couplers.ring_bus_wg(xs='strip', R_cp=20, w_bus=0.5, bend_DC=True, w_wg=0.5, dLc=10, dAc=10, euler_transistion=False, dL_trans=10, dA_trans=30, R_max_trans=100, w_trans=0.5, euler_anti_bend=False, R_max_anti=100, R_min_anti=10, A_anti=None, res=0.1, wg_Ltp=5, dL_p2p=None, sharp_patch=True, show_pins=False, end_patch=False, clothoid_order=1)#
              -

              Bases: object

              -

              Initialize ring-bus waveguide coupler settings.

              -
              -
              Parameters:
              -
                -
              • xs (str, optional) – Waveguide cross-section name (default is “strip”).

              • -
              • R_cp (int, optional) – Coupling waveguide bend radius in microns for BDC mode (default is 20).

              • -
              • w_bus (float, optional) – Coupling waveguide width in microns (default is 0.5).

              • -
              • w_wg (float, optional) – Port waveguide width in microns (default is 0.5).

              • -
              • bend_DC (bool, optional) – Use bend directional coupler (True) or straight DC (False, default is True).

              • -
              • dLc (int, optional) – Straight coupling length in microns for DC mode (default is 10).

              • -
              • dAc (int, optional) – Coupling angle in degrees for BDC mode (default is 10).

              • -
              • euler_transistion (bool, optional) – Enable Euler transition segments before/after the coupling arc (default is False).

              • -
              • dL_trans (int, optional) – Straight transition length in microns when Euler transition is enabled (default is 10).

              • -
              • dA_trans (int, optional) – Transition bend angle in degrees for the Euler segment (default is 30).

              • -
              • R_max_trans (int, optional) – Maximum radius in microns for the transition segment (default is 100).

              • -
              • w_trans (float, optional) – Waveguide width in microns inside the transition (default is 0.5).

              • -
              • euler_anti_bend (bool, optional) – Enable Euler anti-bend routing after the coupling section (default is False).

              • -
              • R_max_anti (int, optional) – Maximum radius in microns for the anti-bend segment (default is 100).

              • -
              • R_min_anti (int, optional) – Minimum radius in microns for the anti-bend segment (default is 10).

              • -
              • A_anti (float, optional) – Anti-bend angle in degrees (default is None, meaning auto-calculated).

              • -
              • res (float, optional) – Geometry discretization step in microns (default is 0.1).

              • -
              • wg_Ltp (int, optional) – Port taper length in microns (default is 5).

              • -
              • dL_p2p (float, optional) – Target horizontal spacing in microns between input/output ports (default is None).

              • -
              • sharp_patch (bool, optional) – Insert chamfer polygons to avoid sharp corners (default is True).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers for debugging (default is False).

              • -
              • end_patch (bool, optional) – Force small straight fillers at the end of Euler segments (default is False).

              • -
              • clothoid_order (int, optional) – Order of the spiral section used inside Clothoid transitions (default is 1).

              • -
              -
              -
              -
              -
              -generate_gds(sharp_patch, show_pins=False)#
              -
              - -
              -

              ADC_STD_2x2#

              ../../../_images/ADC_STD_2x2.png -
              -
              -class mxpic.components.primitives.directional_couplers.ADC_STD_2x2(name=None, xs='strip', wu0=0.45, wu1=0.61, wu_in=0.45, wu_out=0.8, wd0=0.33, wd1=0.2, wd_in=0.45, wd_out=0.8, Lu=33, Ld=33, angle=20, g0=0.2, g1=0.2, sbend_type='euler', Rmax=None, Rmin=5, Ru0=0, Ru1=20, Rd0=20, Rd1=0, tp_angle=2, sharp_patch=True, show_pins=False, euler_points=64, res=0.1)#
              -

              Bases: object

              -

              General-purpose 2×2 adiabatic directional coupler scaffold.

              -
              -
              Parameters:
              -
                -
              • name (str, optional) – Unique cell identifier (default is None, meaning no instantiation).

              • -
              • xs (str, optional) – Registered Nazca cross-section name (default is “strip”).

              • -
              • wu0 (float, optional) – Upper waveguide width at the input plane in microns (default is 0.45).

              • -
              • wu1 (float, optional) – Upper waveguide width at the output plane in microns (default is 0.61).

              • -
              • wu_in (float, optional) – Upper input port width in microns (default is 0.45).

              • -
              • wu_out (float, optional) – Upper output port width in microns (default is 0.8).

              • -
              • wd0 (float, optional) – Lower waveguide width at the input plane in microns (default is 0.33).

              • -
              • wd1 (float, optional) – Lower waveguide width at the output plane in microns (default is 0.2).

              • -
              • wd_in (float, optional) – Lower input port width in microns (default is 0.45).

              • -
              • wd_out (float, optional) – Lower output port width in microns (default is 0.8).

              • -
              • Lu (int, optional) – Interaction length of the upper core in microns (default is 33).

              • -
              • Ld (int, optional) – Interaction length of the lower core in microns (default is 33).

              • -
              • angle (int, optional) – Sbend deflection angle in degrees (default is 20).

              • -
              • g0 (float, optional) – Gap between the two cores at the input plane in microns (default is 0.2).

              • -
              • g1 (float, optional) – Gap between the two cores at the output plane in microns (default is 0.2).

              • -
              • sbend_type (str, optional) – Type of IO transition (“euler” or “circular”, default is “euler”).

              • -
              • Rmax (optional) – Maximum Euler bend radius in microns (default is None, meaning auto).

              • -
              • Rmin (int, optional) – Minimum Euler bend radius in microns (default is 5).

              • -
              • Ru0 (int, optional) – Upper input bend radius in microns (default is 0).

              • -
              • Ru1 (int, optional) – Upper output bend radius in microns (default is 20).

              • -
              • Rd0 (int, optional) – Lower input bend radius in microns (default is 20).

              • -
              • Rd1 (int, optional) – Lower output bend radius in microns (default is 0).

              • -
              • tp_angle (int, optional) – Half-angle of straight tapers in degrees when Euler bends are disabled (default is 2).

              • -
              • sharp_patch (bool, optional) – Insert chamfer polygons to reduce acute corners (default is True).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers for debugging (default is False).

              • -
              • euler_points (int, optional) – Number of sampling points for Euler/Clothoid evaluation (default is 64).

              • -
              • res (float, optional) – Geometry discretization step in microns (default is 0.1).

              • -
              -
              -
              -
              -
              -generate_err(err=0.02)#
              -
              - -
              -
              -generate_gds(err=0, show_pins=False)#
              -
              - -
              -
              -generate_test_gds(gc, dX_gc2gc=400, dY_gc2gc=80, sharp_patch=True)#
              -
              - -
              -

              DC#

              ../../../_images/DC.png -
              -
              -class mxpic.components.primitives.directional_couplers.DC(name=None, xs='strip', w_cp=0.45, w_wg=0.45, L_cp=30, angle=20, gap=0.2, sbend_type='circular', Rmax=None, Rmin=5, R0=10, tp_angle=2, sharp_patch=True, show_pins=False)#
              -

              Bases: ADC_STD_2x2

              -

              Standard symmetric directional coupler wrapper built on ADC_STD_2x2.

              -
              -
              Parameters:
              -
                -
              • name (str, optional) – Unique cell identifier (default is None, meaning no instantiation).

              • -
              • xs (str, optional) – Nazca cross-section key for both guides (default is “strip”).

              • -
              • w_cp (float, optional) – Coupling-section core width in microns (default is 0.45).

              • -
              • w_wg (float, optional) – IO port width in microns (default is 0.45).

              • -
              • L_cp (float, optional) – Coupling-section length in microns (default is 30).

              • -
              • angle (float, optional) – Port bend deflection angle in degrees (default is 20).

              • -
              • gap (float, optional) – Gap between the two cores in microns (default is 0.2).

              • -
              • sbend_type (str, optional) – Type of the IO bend (“euler” or “circular”, default is “circular”).

              • -
              • Rmax (float, optional) – Maximum Euler radius in microns when “sbend_type” is “euler” (default is None).

              • -
              • Rmin (int, optional) – Minimum Euler radius in microns (default is 5).

              • -
              • R0 (int, optional) – Circular bend radius in microns applied to both ports (default is 10).

              • -
              • tp_angle (int, optional) – Straight taper half-angle in degrees when Euler bends are disabled (default is 2).

              • -
              • sharp_patch (bool, optional) – Insert chamfer polygons to avoid acute corners (default is True).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers for debugging (default is False).

              • -
              -
              -
              -
              -
              -generate_test_gds(gc, dX_gc2gc=300, dY_gc2gc=40, sharp_patch=True)#
              -
              - -
              -

              BS_tdc#

              ../../../_images/BS_tdc.png -
              -
              -class mxpic.components.primitives.directional_couplers.BS_tdc(name=None, xs='strip', wa0=0.35, wa1=0.45, wb0=0.55, wb1=0.45, w_wg=0.45, gap=0.2, Lt=20, R0=30, angle=15, sbend_type='circle')#
              -

              Bases: ADC_STD_2x2

              -

              Balanced splitter based on asymmetric taper-directional-coupler sections.

              -
              -
              Parameters:
              -
                -
              • name (str, optional) – Nazca cell name (default is None).

              • -
              • xs (str, optional) – Nazca cross-section for both guides (default is “strip”).

              • -
              • wa0 (float, optional) – Upper input width in microns (default is 0.35).

              • -
              • wa1 (float, optional) – Upper output width in microns (default is 0.45).

              • -
              • wb0 (float, optional) – Lower input width in microns (default is 0.55).

              • -
              • wb1 (float, optional) – Lower output width in microns (default is 0.45).

              • -
              • w_wg (float, optional) – External IO width in microns (default is 0.45).

              • -
              • gap (float, optional) – Coupling gap in microns (default is 0.2).

              • -
              • Lt (float, optional) – Coupling/taper length in microns (default is 20).

              • -
              • R0 (float, optional) – Port bend radius in microns (default is 30).

              • -
              • angle (float, optional) – Port bend angle in degrees (default is 15).

              • -
              • sbend_type (str, optional) – IO bend type (“circle” or “euler”, default is “circle”).

              • -
              -
              -
              -
              -

              MDM#

              ../../../_images/MDM.png -
              -
              -class mxpic.components.primitives.directional_couplers.MDM(name=None, xs='strip', wb0=0.45, wb1=0.61, wb_in=0.45, wb_out=0.88, w_wg=0.45, w0=0.33, w1=0.2, gap0=0.2, Lt_bus=20, R0=40, angle=22.5, Lt_cp=None, gap1=None, Lb0=None, symmetric_BUS=True, single_end=True, Rmin=8)#
              -

              Bases: ADC_STD_2x2

              -

              Mode-division-multiplexing directional coupler derived from ADC_STD_2x2.

              -
              -
              Parameters:
              -
                -
              • name (str, optional) – Nazca cell name (default is None).

              • -
              • xs (str, optional) – Device cross-section key (default is “strip”).

              • -
              • wb0 (float, optional) – BUS waveguide width at the input plane in microns (default is 0.45).

              • -
              • wb1 (float, optional) – BUS waveguide width at the output plane in microns (default is 0.61).

              • -
              • wb_in (float, optional) – BUS input port width in microns (default is 0.45).

              • -
              • wb_out (float, optional) – BUS output port width in microns (default is 0.88).

              • -
              • w_wg (float, optional) – Coupler-waveguide IO width in microns (default is 0.45).

              • -
              • w0 (float, optional) – Coupler waveguide width at the input plane in microns (default is 0.33).

              • -
              • w1 (float, optional) – Coupler waveguide width at the output plane in microns (default is 0.2).

              • -
              • gap0 (float, optional) – Initial BUS–coupler gap in microns (default is 0.2).

              • -
              • Lt_bus (float, optional) – BUS taper length from wb0 to wb1 in microns (default is 20).

              • -
              • R0 (float, optional) – Lower-waveguide bend radius in microns (default is 40).

              • -
              • angle (float, optional) – Bend deflection angle in degrees (default is 22.5).

              • -
              • Lt_cp (float, optional) – Coupler taper length from w0 to w1 in microns (default is None, meaning Lt_bus).

              • -
              • gap1 (float, optional) – Final BUS–coupler gap in microns (default is None, meaning gap0).

              • -
              • Lb0 (float, optional) – Reserved for future BUS offsets (default is None).

              • -
              • symmetric_BUS (bool, optional) – Whether BUS geometry is mirrored (default is True).

              • -
              • single_end (bool, optional) – Keep single-ended termination on the coupler arm (default is True).

              • -
              • Rmin (float, optional) – Minimum Euler radius in microns for bends (default is 8).

              • -
              -
              -
              -
              -
              -generate_test_gds(gc, dX_gc2gc=300, dY_gc2gc=40, sharp_patch=True)#
              -
              - -
              -

              DC_bend#

              ../../../_images/DC_bend.png -
              -
              -class mxpic.components.primitives.directional_couplers.DC_bend(name=None, w_in=0.45, w_out=0.45, gap=0.2, r_in=40, theta_arc=30, w_wg=0.45, theta_ext=15, xs_wg='strip', sharp_patch=True, show_pins=False)#
              -

              Bases: object

              -

              This is a class for bend directional coupler for broadband and fabrication tolerant power splitting.

              -
              -
              Parameters:
              -
                -
              • name (Any, optional) – Unique identifier for the device cell. Default is None.

              • -
              • w_in (float, optional) – Width parameter in microns. Default is 0.45.

              • -
              • w_out (float, optional) – Width parameter in microns. Default is 0.45.

              • -
              • gap (float, optional) – Spacing or gap parameter in microns. Default is 0.2.

              • -
              • r_in (int, optional) – Radius parameter in microns. Default is 40.

              • -
              • theta_arc (int, optional) – Angle parameter in degrees. Default is 30.

              • -
              • w_wg (float, optional) – Width parameter in microns. Default is 0.45.

              • -
              • theta_ext (int, optional) – Angle parameter in degrees. Default is 15.

              • -
              • xs_wg (str, optional) – Layer or cross-section name used by the device. Default is ‘strip’.

              • -
              • sharp_patch (bool, optional) – Whether to add geometry patches for sharp corners or cladding continuity. Default is True.

              • -
              • show_pins (bool, optional) – Whether to draw pin markers in the generated layout. Default is False.

              • -
              -
              -
              -
              -
              -generate_gds(cellname='')#
              -

              Generate GDS.

              -
              - -
              -
              -generate_test_gds(gc, dX_gc2gc=300, dY_gc2gc=40, sharp_patch=True)#
              -
              - -
              -

              DC_pX_3sg#

              ../../../_images/DC_pX_3sg.png -
              -
              -class mxpic.components.primitives.directional_couplers.DC_pX_3sg(name=None, xs_wg='strip', Lc1=10, Lp1=5, Lc2=10, Lt=1, w_cp=0.5, dw=0.1, gap=0.2, R0=10, A=15, w_wg=0.45, pX_type='symmetric', port_symmetric=True, sharp_patch=True)#
              -

              Bases: object

              -

              Three-segment phase-tunable directional coupler (pX) generator.

              -
              -
              Parameters:
              -
                -
              • name (str, optional) – Nazca cell name (default is None).

              • -
              • xs_wg (str, optional) – Cross-section key for all segments (default is “strip”).

              • -
              • Lc1 (float, optional) – Length of the first coupling segment in microns (default is 10).

              • -
              • Lp1 (float, optional) – Phase-shifter length in microns (default is 5).

              • -
              • Lc2 (float, optional) – Length of the second coupling segment in microns (default is 10).

              • -
              • Lt (float, optional) – Taper length between coupling and phase sections in microns (default is 1).

              • -
              • w_cp (float, optional) – Nominal coupling width in microns (default is 0.5).

              • -
              • dw (float, optional) – Width offset applied to the phase section in microns (default is 0.1).

              • -
              • gap (float, optional) – Vertical spacing between the two cores in microns (default is 0.2).

              • -
              • R0 (float, optional) – Bend radius in microns for port transitions (default is 10).

              • -
              • A (float, optional) – Bend angle in degrees for port transitions (default is 15).

              • -
              • w_wg (float, optional) – External IO width in microns (default is 0.45).

              • -
              • pX_type (str, optional) – Phase-section topology (“symmetric” or “asymmetric”, default is “symmetric”).

              • -
              • port_symmetric (bool, optional) – Use mirrored port routing for both arms (default is True).

              • -
              • sharp_patch (bool, optional) – Insert chamfer polygons to mitigate sharp tips (default is True).

              • -
              -
              -
              -
              -
              -generate_gds(err=0)#
              -
              - -
              -
              -generate_test_gds(gc, dX_gc2gc=300, dY_gc2gc=40, sharp_patch=True)#
              -
              - -
              -
              @@ -722,56 +459,13 @@ diff --git a/docs/build/html/mxpic/components/primitives/grating_couplers.html b/docs/build/html/mxpic/components/primitives/grating_couplers.html index c01a23c..2df0e44 100644 --- a/docs/build/html/mxpic/components/primitives/grating_couplers.html +++ b/docs/build/html/mxpic/components/primitives/grating_couplers.html @@ -44,8 +44,8 @@ - - + + @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -375,250 +363,6 @@

              mxpic.components.primitives.grating_couplers#

              -
              -

              Nano_ant#

              -../../../_images/Nano_ant.png - -
              -
              -class mxpic.components.primitives.grating_couplers.Nano_ant(w_wg=0.41, xs_wg='strip', define_type='non-periodic', vector=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5], taper_length=3, width=6, max_theta=110, pitch=0.6, duty_cycle=0.3, teeth_number=6, etch_depth=['METCH'], show_pins=True)#
              -

              Bases: object

              -

              Configure a nano-antenna for optical phased-array grating couplers.

              -

              This is the class of nanoantenna for optical phased array. GDS cell can be generated using this class. Simulation structure generation and simulation results analysis is going to be added in the future.

              -
              -
              Parameters:
              -
                -
              • w_wg (float, optional) – Input waveguide width in microns (default is 0.41).

              • -
              • xs_wg (str, optional) – Nazca cross-section key for the feed waveguide (default is “strip”).

              • -
              • define_type (str, optional) – Antenna definition scheme, either “non-periodic” or “periodic” (default is “non-periodic”).

              • -
              • vector (Sequence[float], optional) – Alternating etched/filled segment lengths (µm) when define_type is “non-periodic” -(default is [0.5, 0.5, 0.5, 0.5, 0.5, 0.5]).

              • -
              • taper_length (float, optional) – Linear taper length preceding the teeth region in microns (default is 3).

              • -
              • width (float, optional) – Maximum aperture width in microns (default is 6).

              • -
              • max_theta (float, optional) – Fan-out opening angle in degrees (default is 110).

              • -
              • pitch (float or Sequence[float], optional) – Tooth pitch (µm) when define_type is “periodic”; scalar applies to all periods (default is 0.6).

              • -
              • duty_cycle (float or Sequence[float], optional) – Etched fraction per period for periodic antennas; scalar or dual-entry list for dual-etch (default is 0.3).

              • -
              • teeth_number (int, optional) – Number of etched teeth when periodic mode is used (default is 6).

              • -
              • etch_depth (Sequence[str], optional) – List of etch-depth identifiers (“FETCH”, “METCH”, “SETCH”); length determines single/dual etch (default is [“METCH”]).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers on exported pins (default is True).

              • -
              -
              -
              -
              -
              -generate_gds(sample_step=0.1, cell_name='Nanoantenna')#
              -
              - -
              -
              -generate_gds_error()#
              -
              - -
              -
              -generate_gds_positive(sample_step=0.1)#
              -

              Generate a gds cell based on the logic of positive photoresistance.

              -
              -
              Positive: Define the etched region using GETCH_TRE layer.
              -
              -
              - -
              - -
              -
              -

              Taper#

              -../../../_images/Taper.png - -
              -
              -class mxpic.components.primitives.grating_couplers.Taper(width1=4, width2=0.45, length=30, type='linear', show_pins=False)#
              -

              Bases: object

              -

              Create a stand-alone planar taper cell for 2D antenna feeds.

              -
              -
              Parameters:
              -
                -
              • width1 (float, optional) – Input width in microns (default is 4).

              • -
              • width2 (float, optional) – Output width in microns (default is 0.45).

              • -
              • length (float, optional) – Physical taper length in microns (default is 30).

              • -
              • type (str, optional) – Transition profile, “linear” or “parabolic” (default is “linear”).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers for debugging (default is False).

              • -
              -
              -
              -
              -
              -generate_gds()#
              -
              - -
              - -
              -
              -

              Grating_2D_Hole#

              -../../../_images/Grating_2D_Hole.png - -
              -
              -class mxpic.components.primitives.grating_couplers.Grating_2D_Hole(w_wg=0.5, w_gt=5, l_taper=30, type_taper='parabolic', gt_vector=[0.5, 0.5, 0.5, 0.5, 0.5], gt_diameter=0.4, gt_layer='STRIP_COR', polysi_vector=[0.5, 0.5, 0.5, 0.5, 0.5], polysi_diameter=0.4, polysi_layer='FCW_TRE', reflector_vector=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3], l_field_center=1)#
              -

              Bases: object

              -

              Define a single 2D hole-array grating (diffraction + reflector + taper). -This is a class for 2D Grating in IMEC.

              -
              -
              Parameters:
              -
                -
              • w_wg (float, optional) – Feed waveguide width in microns (default is 0.5).

              • -
              • w_gt (float, optional) – Square grating aperture width in microns (default is 5).

              • -
              • l_taper (float, optional) – Taper length from grating to feed in microns (default is 30).

              • -
              • type_taper (str, optional) – Taper profile (“linear” or “parabolic”, default is “parabolic”).

              • -
              • gt_vector (Sequence[float], optional) – Pitch list (µm) for the main etched holes (default is [0.5, 0.5, 0.5, 0.5, 0.5]).

              • -
              • gt_diameter (float, optional) – Diameter of the main holes in microns (default is 0.4).

              • -
              • gt_layer (str, optional) – Nazca layer name used for the main holes (default is “STRIP_COR”).

              • -
              • polysi_vector (Sequence[float], optional) – Pitch list (µm) for polysilicon holes (default is [0.5, 0.5, 0.5, 0.5, 0.5]).

              • -
              • polysi_diameter (float, optional) – Diameter of polysilicon holes in microns (default is 0.4).

              • -
              • polysi_layer (str, optional) – Layer name for polysilicon etch (default is “FCW_TRE”).

              • -
              • reflector_vector (Sequence[float], optional) – Alternating reflector spacing/width values in microns (default is [0.3, 0.3, 0.3, 0.3, 0.3, 0.3]).

              • -
              • l_field_center (float, optional) – Offset from the grating edge to the mode-field center in microns (default is 1).

              • -
              -
              -
              -
              -
              -generate_gds()#
              -
              - -
              - -
              -
              -

              GC_STD_2D#

              -../../../_images/GC_STD_2D.png - -
              -
              -class mxpic.components.primitives.grating_couplers.GC_STD_2D(name=None, etch_type='FETCH', xs_wg='grating', Dx_hole=0.3, Dy_hole=0.3, hole_shape='circle', shape='circle', xs_open=None, Px=0.57, Py=0.57, num_x=25, num_y=25, Lx_taper=50.0, Ly_taper=0.0, Lx_end=1.0, Ly_end=1.0, Lx_side=0.5, Ly_side=0.5, Lx_port=5.0, Ly_port=5.0, w_wg=0.5, show_pins=False, P_AR=0.6, L_AR=1)#
              -

              Bases: object

              -

              General-purpose 2D grating coupler generator with rectangular or arc shapes.

              -
              -
              Parameters:
              -
                -
              • name (str, optional) – Nazca cell name (default is None, meaning uninstantiated cell).

              • -
              • etch_type (str, optional) – Etch depth selector: “FETCH”, “METCH”, or “SETCH” (default is “FETCH”).

              • -
              • xs_wg (str, optional) – Cross-section for the grating slab and output waveguide (default is “grating”).

              • -
              • Dx_hole (float or Sequence[float], optional) – Hole size along x (µm). Scalar applies to all columns (default is 0.3).

              • -
              • Dy_hole (float or Sequence[float], optional) – Hole size along y (µm). Scalar applies to all rows (default is 0.3).

              • -
              • hole_shape (str, optional) – Individual hole shape, “circle” or “rectangle” (default is “circle”).

              • -
              • shape (str, optional) – Overall grating footprint, “circle”, “arc”, or “rectangle” (default is “circle”).

              • -
              • xs_open (str or None, optional) – Optional open-area cross-section for keep-out regions (default is None).

              • -
              • Px (float or Sequence[float], optional) – Periods along x in microns; scalar broadcasts (default is 0.57).

              • -
              • Py (float or Sequence[float], optional) – Periods along y in microns; scalar broadcasts (default is 0.57).

              • -
              • num_x (int, optional) – Number of periods along x when Px is scalar (default is 25).

              • -
              • num_y (int, optional) – Number of periods along y when Py is scalar (default is 25).

              • -
              • Lx_taper (float, optional) – Horizontal taper length to the output port in microns (default is 50).

              • -
              • Ly_taper (float, optional) – Vertical taper length in microns (default is 0).

              • -
              • Lx_end (float, optional) – Extra straight length appended to the positive-x end (default is 1).

              • -
              • Ly_end (float, optional) – Extra straight length appended to the +/-y ends (default is 1).

              • -
              • Lx_side (float, optional) – Lateral margin on the +/−x sides in microns (default is 0.5).

              • -
              • Ly_side (float, optional) – Lateral margin on the +/−y sides in microns (default is 0.5).

              • -
              • Lx_port (float, optional) – Straight-section length after the x-port taper in microns (default is 5).

              • -
              • Ly_port (float, optional) – Straight-section length after the y-port taper in microns (default is 5).

              • -
              • w_wg (float, optional) – Output waveguide width in microns (default is 0.5).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers (default is False).

              • -
              • P_AR (float, optional) – Anti-reflection pitch in microns (default is 0.6).

              • -
              • L_AR (float, optional) – Anti-reflection taper length in microns (default is 1).

              • -
              -
              -
              Raises:
              -

              Exception – Period do not match D_hole.

              -
              -
              -
              -
              -generate_negative()#
              -
              - -
              -
              -generate_positive()#
              -
              - -
              -
              -generate_test_gds(dX_gc2gc=300)#
              -
              - -
              - -
              -
              -

              GC_STD_1D#

              -../../../_images/GC_STD_1D.png - -
              -
              -class mxpic.components.primitives.grating_couplers.GC_STD_1D(name=None, xs_wg='strip', w_wg=0.5, etch_type='FETCH', xs_open=None, L_taper=10.0, L_end=2.0, A_taper=30.0, Period=0.5, eta_etch=0.5, num=20, sector_gc=True, show_pins=False, L_tail=2, P_AR=1.0, L_AR=2.0)#
              -

              Bases: object

              -

              Versatile 1D grating coupler supporting sector and rectangular layouts.

              -
              -
              Parameters:
              -
                -
              • name (str, optional) – Nazca cell name (default is None).

              • -
              • xs_wg (str, optional) – Cross-section key for the slab/taper region (default is “strip”).

              • -
              • w_wg (float, optional) – Input waveguide width in microns (default is 0.5).

              • -
              • etch_type (str, optional) – Etch depth selector: “FETCH”, “METCH”, or “SETCH” (default is “FETCH”).

              • -
              • xs_open (str or None, optional) – Optional cross-section for keep-out/open regions (default is None).

              • -
              • L_taper (float, optional) – Length of the entrance taper in microns (default is 10).

              • -
              • L_end (float, optional) – Terminal slab length after the grating in microns (default is 2).

              • -
              • A_taper (float, optional) – Fan-out angle in degrees (default is 30).

              • -
              • Period (float or Sequence[float], optional) – Grating periods in microns; scalar broadcasts (default is 0.5).

              • -
              • eta_etch (float or Sequence[float], optional) – Etch duty (between 0 and 1) per period (default is 0.5).

              • -
              • num (int, optional) – Number of periods when Period and eta_etch are scalars (default is 20).

              • -
              • sector_gc (bool, optional) – Use sector (True) or rectangular (False) geometry (default is True).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers (default is False).

              • -
              • L_tail (float, optional) – Extra straight length added before the taper in microns (default is 2).

              • -
              • P_AR (float, optional) – Anti-reflection pitch in microns (default is 1).

              • -
              • L_AR (float, optional) – Anti-reflection taper length in microns (default is 2).

              • -
              -
              -
              -
              -
              -generate_negative()#
              -
              - -
              -
              -generate_positive()#
              -
              - -
              -
              -generate_test_dev(dX_gc2gc)#
              -
              - -
              - -
              -
              -

              FA#

              -
              -
              -class mxpic.components.primitives.grating_couplers.FA(fiber_coupler, pitch, number, show_pins=False)#
              -

              Bases: object

              -

              Instantiate a fiber-array fanout from repeated grating/fiber couplers.

              -
              -
              Parameters:
              -
                -
              • fiber_coupler (nd.Cell or object) – Reference coupler cell or instance exposing cell and pin g1/a0.

              • -
              • pitch (float, optional) – Center-to-center spacing between adjacent couplers in microns.

              • -
              • number (int) – Total number of channels in the array.

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers on exported pins (default is False).

              • -
              -
              -
              -
              - -

              GC_SiN_Si_Dual_Layer#

              @@ -677,20 +421,20 @@ This is a class for 2D Grating in IMEC.

              @@ -404,45 +392,10 @@
            • EC_dual_layer_px3
            • -
            • mxpic.components.primitives.beam_splitters -
            • -
            • mxpic.components.primitives.directional_couplers -
            • mxpic.components.primitives.grating_couplers
            • -
            • mxpic.components.primitives.multimode_interferometers -
            • -
            • mxpic.components.primitives.spiral -
            • @@ -458,12 +411,12 @@
              -
              -

              mxpic.components.primitives.multimode_interferometers#

              +
              +

              mxpic.components.primitives.multimode_interferometers#

              MMI_ML#

              ../../../_images/MMI_ML.png -
              -
              -class mxpic.components.primitives.multimode_interferometers.MMI_ML(name=None, L_arm=[10], w_arm=[0.45, 1.35], xs='strip', arm_sine_width=False, L_mmi=[10], w_mmi=[5, 5], mmi_sine_width=False, sharp_patch=True, show_pins=False, res=0.01, N_out=3, N_in=1, Dp_out=1.5, Dp_in=1.5)#
              -

              Bases: object

              -

              Multi-layer (mono-layer) multimode interference (MMI) device generator.

              -
              -
              Parameters:
              -
                -
              • name (str or None, optional) – Nazca cell name. None keeps the cell uninstantiated (default is None).

              • -
              • L_arm (Sequence[float], optional) – Segment lengths (µm) of each arm taper section (default is [10]).

              • -
              • w_arm (Sequence[float], optional) – Corresponding arm widths (µm). Length must be len(L_arm) + 1 (default is [0.45, 1.35]).

              • -
              • xs (str, optional) – Nazca cross-section key used for both arm and MMI regions (default is “strip”).

              • -
              • arm_sine_width (bool, optional) – If True, arm width follows a cosine taper instead of linear interpolation (default is False).

              • -
              • L_mmi (Sequence[float], optional) – Segment lengths (µm) within the central MMI body (default is [10]).

              • -
              • w_mmi (Sequence[float], optional) – MMI widths (µm). Length must be len(L_mmi) + 1 (default is [5, 5]).

              • -
              • mmi_sine_width (bool, optional) – If True, MMI width transition uses cosine instead of linear interpolation (default is False).

              • -
              • sharp_patch (bool, optional) – Insert chamfer polygons at acute corners when True (default is True).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers for debugging when True (default is False).

              • -
              • res (float, optional) – Longitudinal sampling resolution (µm) for polygon generation (default is 0.01).

              • -
              • N_out (int, optional) – Number of output ports (default is 3).

              • -
              • N_in (int, optional) – Number of input ports (default is 1).

              • -
              • Dp_out (float, optional) – Vertical pitch (µm) between adjacent output ports (default is 1.5).

              • -
              • Dp_in (float, optional) – Vertical pitch (µm) between adjacent input ports (default is 1.5).

              • -
              -
              -
              -
              -
              -generate_gds(sharp_patch, show_pins)#
              -
              - -
              -
              -generate_test_gds(gc, dX_gc2gc, dY_gc2gc, R_bend=10, Xout_offset=50)#
              -
              - -
              -

              MMI_STD#

              ../../../_images/MMI_STD.png -
              -
              -class mxpic.components.primitives.multimode_interferometers.MMI_STD(name=None, N_out=3, N_in=1, L_arm=10, w_wg=0.45, w_port=1.2, xs='strip', L_mmi=10, w_mmi=5, sharp_patch=True, show_pins=False, Dp_out=1.5, Dp_in=1.5)#
              -

              Bases: MMI_ML

              -

              Convenience wrapper for standard MMIs with equal-length arms and uniform MMI body.

              -
              -
              Parameters:
              -
                -
              • name (str or None, optional) – Nazca cell name (default is None).

              • -
              • N_out (int, optional) – Number of output ports (default is 3).

              • -
              • N_in (int, optional) – Number of input ports (default is 1).

              • -
              • L_arm (float, optional) – Single arm length in microns (default is 10).

              • -
              • w_wg (float, optional) – Input/output waveguide width in microns (default is 0.45).

              • -
              • w_port (float, optional) – Width at the transition between the taper and MMI (default is 1.2).

              • -
              • xs (str, optional) – Cross-section key for all regions (default is “strip”).

              • -
              • L_mmi (float, optional) – Central MMI length in microns (default is 10).

              • -
              • w_mmi (float, optional) – Central MMI width in microns (default is 5).

              • -
              • sharp_patch (bool, optional) – Add chamfer helpers when True (default is True).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers when True (default is False).

              • -
              • Dp_out (float, optional) – Output port pitch in microns (default is 1.5).

              • -
              • Dp_in (float, optional) – Input port pitch in microns (default is 1.5).

              • -
              -
              -
              -
              -
              @@ -498,18 +434,8 @@ diff --git a/docs/build/html/mxpic/components/primitives/passive/crows.html b/docs/build/html/mxpic/components/primitives/passive/crows.html index abc992e..b41ebb9 100644 --- a/docs/build/html/mxpic/components/primitives/passive/crows.html +++ b/docs/build/html/mxpic/components/primitives/passive/crows.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -433,6 +421,8 @@

              CROW_Eul_Ring#

              +../../../../_images/CROW_Eul_Ring.png +
              class mxpic.components.primitives.passive.crows.CROW_Eul_Ring(name, R0=10, R1=3, w0=0.38, w1=0.65, w_bus=0.35, R_att=15, R_att_min=3, A_att=30, w_wg=0.45, dLx=0, dLy=0, xs_wg='strip', gap_crows=[0.4], gap_cp=0.45, w_heater=0, xs_heater='heater', connected=True, w_metal=8, xs_metal='metal', via_h2m=None, isl=None, ISL_LEFT=True, ISL_RIGHT=True, show_pins=False, sharp_patch=True, dL_p2p=None, Ltp_bus=0, ht_shift=0, A_ht=45, R_cp=None, bus_order=1.0, width_type='crow_customize', A_cp=0)#
              @@ -484,6 +474,8 @@

              CROW_Eul_RCK#

              +../../../../_images/CROW_Eul_RCK.png +
              class mxpic.components.primitives.passive.crows.CROW_Eul_RCK(R0=10, R1=3, R2=20, w0=0.38, w1=0.65, w_bus=0.35, R_att=15, R_att_min=3, A_att=30, w_wg=0.45, dAc=0, dLx=0, dLy=0, xs_wg='strip', gap_crows=[0.4], gap_cp=0.45, w_heater=0, xs_heater='heater', connected=True, w_metal=8, xs_metal='metal', via_h2m=None, isl=None, ISL_LEFT=True, ISL_RIGHT=True, show_pins=False, sharp_patch=True, dL_p2p=None, Ltp_bus=0, ht_shift=0, A_ht=45)#
              @@ -584,6 +576,8 @@

              CROW_STD_Allpass#

              +../../../../_images/CROW_STD_Allpass.png +
              class mxpic.components.primitives.passive.crows.CROW_STD_Allpass(r_ring=10, w_ring=0.45, xs_ring='strip', w_bus=0.45, A_cp=10, gap_bus=0.45, w_wg=0.45, Euler_trasition=True, R_att=10, R_att_min=5, A_att=45, gap_crows=[0.4], w_heater=0, xs_heater='heater', connected=True, w_metal=8, xs_metal='metal', via_h2m=None, isl=None, show_pins=False, sharp_patch=True, dL_p2p=None, Ltp_bus=0, ht_shift=0, A_ht=45)#
              @@ -626,6 +620,8 @@

              CROW_STD_Adddrop#

              +../../../../_images/CROW_STD_Adddrop.png +
              class mxpic.components.primitives.passive.crows.CROW_STD_Adddrop(r_ring=10, w_ring=0.45, xs_ring='strip', w_bus=0.45, A_cp=10, gap_bus=0.45, w_wg=0.45, Euler_trasition=True, R_att=10, R_att_min=5, A_att=45, gap_crows=[0.4], w_heater=0, xs_heater='heater', connected=True, w_metal=8, xs_metal='metal', via_h2m=None, isl=None, show_pins=False, sharp_patch=True, dL_p2p=None, Ltp_bus=0, ht_shift=0, A_ht=45)#
              @@ -668,6 +664,8 @@

              CROW_AED#

              +../../../../_images/CROW_AED.png +
              class mxpic.components.primitives.passive.crows.CROW_AED(r_outer=10, wa=0.45, wb=0.45, xs_ring='strip', w1_bus=0.45, A1_cp=10, w2_bus=0.45, A2_cp=10, gap1=0.45, gap2=0.45, w_wg=0.45, Euler_trasition=True, R1_cp=None, R2_cp=None, R1_att=15, R2_att=15, R1_att_min=5, R2_att_min=5, L_tilt=0, A1_att=45, A2_att=45, Ltp_bus=0, dL_p2p=None, gap_crows=[0.4], gap_cp=[0.45, 0.45], w_heater=0, xs_heater='heater', connected=True, w_metal=8, xs_metal='metal', via_h2m=None, isl=None, ISL_LEFT=True, ISL_RIGHT=True, show_pins=False, sharp_patch=True, ht_shift=0, A_ht=45)#
              diff --git a/docs/build/html/mxpic/components/primitives/passive/index.html b/docs/build/html/mxpic/components/primitives/passive/index.html index 721806c..e64d746 100644 --- a/docs/build/html/mxpic/components/primitives/passive/index.html +++ b/docs/build/html/mxpic/components/primitives/passive/index.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/primitives/passive/rings.html b/docs/build/html/mxpic/components/primitives/passive/rings.html index 2888bad..a2d02ac 100644 --- a/docs/build/html/mxpic/components/primitives/passive/rings.html +++ b/docs/build/html/mxpic/components/primitives/passive/rings.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -1094,6 +1082,8 @@ Return: Cell

              MRR_STD_Allpass#

              +../../../../_images/MRR_STD_Allpass.png +
              class mxpic.components.primitives.passive.rings.MRR_STD_Allpass(name, r_ring, w_ring, gap, w_bus, A_cp, w_wg=0.45, R_att=20, Ltp_bus=10, dL_p2p=None, L_tilt=10, xs_ring='strip', sharp_patch=True, cell_xs_transition=None, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=0, via_h2m=None, isl=None, A_ht=270, epin_dX=0, epin_dY=0, res=0.05, res_eic=0.5, ht_rot=False)#
              @@ -1138,6 +1128,8 @@ Return: Cell

              MRR_STD_Adddrop#

              +../../../../_images/MRR_STD_Adddrop.png +
              class mxpic.components.primitives.passive.rings.MRR_STD_Adddrop(name, r_ring, w_ring, gap, w_bus, A_cp, w_wg=0.45, R_att=20, Ltp_bus=10, dL_p2p=None, L_tilt=10, xs_ring='strip', sharp_patch=True, cell_xs_transition=None, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=0, via_h2m=None, isl=None, A_ht=270, epin_dX=0, epin_dY=0, res=0.05, res_eic=0.5, ht_rot=False)#
              @@ -1182,6 +1174,8 @@ Return: Cell

              MRR_MM_Allpass#

              +../../../../_images/MRR_MM_Allpass.png +
              class mxpic.components.primitives.passive.rings.MRR_MM_Allpass(name=None, r_ring=10, w_ring=0.45, gap=0.2, w_bus=0.45, A_cp=0, w_wg=0.45, R_att=20, R_att_min=10, A_att=30, Ltp_bus=10, dL_p2p=None, xs_ring='strip', sharp_patch=True, cell_xs_transition=None, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=0, via_h2m=None, isl=None, A_ht=270, epin_dX=0, epin_dY=0, res=0.05, res_eic=0.5, ht_rot=False)#
              @@ -1227,6 +1221,8 @@ Return: Cell

              MRR_MM_Adddrop#

              +../../../../_images/MRR_MM_Adddrop.png +
              class mxpic.components.primitives.passive.rings.MRR_MM_Adddrop(name=None, r_ring=10, w_ring=0.45, gap=0.2, w_bus=0.45, A_cp=0, w_wg=0.45, R_att=20, R_att_min=10, A_att=30, Ltp_bus=10, dL_p2p=None, xs_ring='strip', sharp_patch=True, cell_xs_transition=None, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=0, via_h2m=None, isl=None, A_ht=270, epin_dX=0, epin_dY=0, res=0.05, res_eic=0.5, ht_rot=False)#
              @@ -1272,6 +1268,8 @@ Return: Cell

              MRR_DW_Adddrop#

              +../../../../_images/MRR_DW_Adddrop.png +
              class mxpic.components.primitives.passive.rings.MRR_DW_Adddrop(name, r_ring, w0_ring, w1_ring, gap=0.2, w_bus=0.45, A_cp=0, w_wg=0.45, R_att=20, R_att_min=10, A_att=30, Ltp_bus=10, dL_p2p=None, xs_ring='strip', sharp_patch=True, cell_xs_transition=None, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=0, via_h2m=None, isl=None, A_ht=270, epin_dX=0, epin_dY=0, res=0.05, res_eic=0.5, ht_rot=False)#
              @@ -1318,6 +1316,8 @@ Return: Cell

              MRR_DW_Allpass#

              +../../../../_images/MRR_DW_Allpass.png +
              class mxpic.components.primitives.passive.rings.MRR_DW_Allpass(name, r_ring, w0_ring, w1_ring, gap=0.2, w_bus=0.45, A_cp=0, w_wg=0.45, R_att=20, R_att_min=10, A_att=30, Ltp_bus=10, dL_p2p=None, xs_ring='strip', sharp_patch=True, cell_xs_transition=None, show_pins=False, xs_heater='heater', w_heater=0, xs_metal='metal', w_metal=0, via_h2m=None, isl=None, A_ht=270, epin_dX=0, epin_dY=0, res=0.05, res_eic=0.5, ht_rot=False)#
              @@ -1364,6 +1364,8 @@ Return: Cell

              STD_ring_AMZI_adddrop#

              +../../../../_images/STD_ring_AMZI_adddrop.png +
              class mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop(name=None, r_ring=30, w_ring=0.45, w_wg=0.45, xs_wg='strip', w_bus=0.45, gap=0.2, dAc=10, L_tilt=1, dL_arm=10, w_heater=2.5, xs_heater='heater', w_metal=6, xs_metal='metal', via_h2m=None, isl=None, res=0.1, R_bend=10, L_tp=5, show_pins=False, sharp_patch=True)#
              diff --git a/docs/build/html/mxpic/components/primitives/passive/unit.html b/docs/build/html/mxpic/components/primitives/passive/unit.html index 0dc8ae3..9a48a1c 100644 --- a/docs/build/html/mxpic/components/primitives/passive/unit.html +++ b/docs/build/html/mxpic/components/primitives/passive/unit.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.passive.unit#

              waveguide#

              +../../../../_images/waveguide.png +
              class mxpic.components.primitives.passive.unit.waveguide(w_heater=2.5, L_wg=150, L_heater=150, w_metal=10, xs_heater='heater', xs_metal='metal', xs_wg='strip', w_wg=0.45, w_port=None, Ltp=None, via_h2m=None, isl=None, euler_bend=False, Rmin=5, thin_attach=False, UPPER_ISL=True, LOWER_ISL=True, shape='strip', R_bend=10, ubend_offset=20, show_pins=False)#
              @@ -418,6 +408,8 @@

              PS_2st#

              +../../../../_images/PS_2st.png +
              class mxpic.components.primitives.passive.unit.PS_2st(xs_wg='strip', w_wg=0.5, w1=0.7, w2=0.9, L1=10, L2=55, L_wg=0, L_tp=1, L12=None, L_ht=None, xs_heater='heater', xs_metal='metal', w_heater=2.5, w_metal=8, via_h2m=None, isl=None, UPPER_ISL=True, LOWER_ISL=True, R_bend=10, show_pins=False)#
              @@ -460,6 +452,8 @@

              PS_2st_Straight#

              +../../../../_images/PS_2st_Straight.png +
              class mxpic.components.primitives.passive.unit.PS_2st_Straight(xs_wg='strip', w_wg=0.5, w1=0.7, w2=0.9, L1=10, L2=55, L_wg=0, L_tp=1, L12=None, L_ht=None, xs_heater='heater', xs_metal='metal', w_heater=2.5, w_metal=8, via_h2m=None, isl=None, UPPER_ISL=True, LOWER_ISL=True, show_pins=False)#
              @@ -501,6 +495,8 @@

              PSR_1x2#

              +../../../../_images/PSR_1x2.png +
              class mxpic.components.primitives.passive.unit.PSR_1x2(PSR, MDM, xs='strip', w_wg=0.45, L_tp=15, show_pins=False)#
              @@ -529,6 +525,8 @@

              Brag_WDM#

              +../../../../_images/Brag_WDM.png +
              class mxpic.components.primitives.passive.unit.Brag_WDM(Brag, MDM, w_wg=0.45, L_tp=30, show_pins=False)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/PBS.html b/docs/build/html/mxpic/components/primitives/pic/PBS.html index 52cdb96..3061d87 100644 --- a/docs/build/html/mxpic/components/primitives/pic/PBS.html +++ b/docs/build/html/mxpic/components/primitives/pic/PBS.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.pic.PBS#

              PBS_3wg#

              +../../../../_images/PBS_3wg.png +
              class mxpic.components.primitives.pic.PBS.PBS_3wg(name=None, xs='strip', Lcp=11.7, w1_tp=0.55, w2_tp=0.3, w_m=0.45, gap=0.25, R_bend=20, A_bend=7.5, w_wg=0.45, show_pins=False, sharp_patch=True)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/YBS.html b/docs/build/html/mxpic/components/primitives/pic/YBS.html index 3e36cbd..08f96c2 100644 --- a/docs/build/html/mxpic/components/primitives/pic/YBS.html +++ b/docs/build/html/mxpic/components/primitives/pic/YBS.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.pic.YBS#

              YBranch#

              +../../../../_images/YBranch.png +
              class mxpic.components.primitives.pic.YBS.YBranch(name=None, xs='strip', w=[1.2, 1.0, 1.8, 1.2, 1.0, 1.2, 1.2], L=6, R_att=10, A_att=10, w_port=0.45, show_pins=False, sharp_patch=True, res=0.1)#
              @@ -412,6 +402,8 @@

              Ybranch_3wg#

              +../../../../_images/Ybranch_3wg.png +
              class mxpic.components.primitives.pic.YBS.Ybranch_3wg(name=None, w0=0.4, w1=0.2, gap=0.18, Lcp=20, xs='strip', w_wg=0.45, R0=10, angle=20, L_attach=3, L_in_tp=3, sharp_patch=True)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/bragg.html b/docs/build/html/mxpic/components/primitives/pic/bragg.html index c4574eb..d277c4b 100644 --- a/docs/build/html/mxpic/components/primitives/pic/bragg.html +++ b/docs/build/html/mxpic/components/primitives/pic/bragg.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.pic.bragg#

              Bragg_apodized#

              +../../../../_images/Bragg_apodized.png +
              class mxpic.components.primitives.pic.bragg.Bragg_apodized(Period=0.3, w=1.1, xs='strip', etch_type='FETCH', etch_shape='rectangle', N=200, eta_etch=0.5, dT=0.15, b=10, eta_ds=0.5, show_pins=False)#
              @@ -418,6 +408,8 @@

              Bragg#

              +../../../../_images/Bragg.png +
              class mxpic.components.primitives.pic.bragg.Bragg(Period=0.3, w=1.1, xs='strip', etch_type='FETCH', etch_shape='rectangle', N=200, eta_etch=0.5, dT=0.15, show_pins=False)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/couplers.html b/docs/build/html/mxpic/components/primitives/pic/couplers.html index 0b59652..5880a88 100644 --- a/docs/build/html/mxpic/components/primitives/pic/couplers.html +++ b/docs/build/html/mxpic/components/primitives/pic/couplers.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.pic.couplers#

              ring_bus_wg#

              +../../../../_images/ring_bus_wg.png +
              class mxpic.components.primitives.pic.couplers.ring_bus_wg(xs='strip', R_cp=20, w_bus=0.5, bend_DC=True, w_wg=0.5, dLc=10, dAc=10, euler_transistion=False, dL_trans=10, dA_trans=30, R_max_trans=100, w_trans=0.5, euler_anti_bend=False, R_max_anti=100, R_min_anti=10, A_anti=None, res=0.1, wg_Ltp=5, dL_p2p=None, sharp_patch=True, show_pins=False, end_patch=False, clothoid_order=1)#
              @@ -425,6 +415,8 @@

              ADC_STD_2x2#

              +../../../../_images/ADC_STD_2x2.png +
              class mxpic.components.primitives.pic.couplers.ADC_STD_2x2(name=None, xs='strip', wu0=0.45, wu1=0.61, wu_in=0.45, wu_out=0.8, wd0=0.33, wd1=0.2, wd_in=0.45, wd_out=0.8, Lu=33, Ld=33, angle=20, g0=0.2, g1=0.2, sbend_type='euler', Rmax=None, Rmin=5, Ru0=0, Ru1=20, Rd0=20, Rd1=0, tp_angle=2, sharp_patch=True, show_pins=False, euler_points=64, res=0.1)#
              @@ -484,6 +476,8 @@

              DC#

              +../../../../_images/DC.png +
              class mxpic.components.primitives.pic.couplers.DC(name=None, xs='strip', w_cp=0.45, w_wg=0.45, L_cp=30, angle=20, gap=0.2, sbend_type='circular', Rmax=None, Rmin=5, R0=10, tp_angle=2, sharp_patch=True, show_pins=False)#
              @@ -520,6 +514,8 @@

              BS_tdc#

              +../../../../_images/BS_tdc.png +
              class mxpic.components.primitives.pic.couplers.BS_tdc(name=None, xs='strip', wa0=0.35, wa1=0.45, wb0=0.55, wb1=0.45, w_wg=0.45, gap=0.2, Lt=20, R0=30, angle=15, sbend_type='circle')#
              @@ -549,6 +545,8 @@

              MDM#

              +../../../../_images/MDM.png +
              class mxpic.components.primitives.pic.couplers.MDM(name=None, xs='strip', wb0=0.45, wb1=0.61, wb_in=0.45, wb_out=0.88, w_wg=0.45, w0=0.33, w1=0.2, gap0=0.2, Lt_bus=20, R0=40, angle=22.5, Lt_cp=None, gap1=None, Lb0=None, symmetric_BUS=True, single_end=True, Rmin=8)#
              @@ -590,6 +588,8 @@

              DC_bend#

              +../../../../_images/DC_bend.png +
              class mxpic.components.primitives.pic.couplers.DC_bend(name=None, w_in=0.45, w_out=0.45, gap=0.2, r_in=40, theta_arc=30, w_wg=0.45, theta_ext=15, xs_wg='strip', sharp_patch=True, show_pins=False)#
              @@ -628,6 +628,8 @@

              DC_pX_3sg#

              +../../../../_images/DC_pX_3sg.png +
              class mxpic.components.primitives.pic.couplers.DC_pX_3sg(name=None, xs_wg='strip', Lc1=10, Lp1=5, Lc2=10, Lt=1, w_cp=0.5, dw=0.1, gap=0.2, R0=10, A=15, w_wg=0.45, pX_type='symmetric', port_symmetric=True, sharp_patch=True)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/cross.html b/docs/build/html/mxpic/components/primitives/pic/cross.html index ddb708e..054effb 100644 --- a/docs/build/html/mxpic/components/primitives/pic/cross.html +++ b/docs/build/html/mxpic/components/primitives/pic/cross.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.pic.cross#

              Cross#

              +../../../../_images/Cross.png +
              class mxpic.components.primitives.pic.cross.Cross(name=None, L=[0, 1, 2, 3, 4], w=[0.5, 0.45, 0.6, 0.4, 0.5], xs='strip', show_pins=False)#
              @@ -412,6 +402,8 @@

              Cross_Sine#

              +../../../../_images/Cross_Sine.png +
              class mxpic.components.primitives.pic.cross.Cross_Sine(name=None, res=[1, 1, 1, 1], w=[0.5, 0.45, 0.6, 0.4, 0.5], xs='strip', n_points=4, show_pins=False)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/gratings.html b/docs/build/html/mxpic/components/primitives/pic/gratings.html index 7c44972..030e8b5 100644 --- a/docs/build/html/mxpic/components/primitives/pic/gratings.html +++ b/docs/build/html/mxpic/components/primitives/pic/gratings.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/primitives/pic/index.html b/docs/build/html/mxpic/components/primitives/pic/index.html index e4d98ad..cd97168 100644 --- a/docs/build/html/mxpic/components/primitives/pic/index.html +++ b/docs/build/html/mxpic/components/primitives/pic/index.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • diff --git a/docs/build/html/mxpic/components/primitives/pic/mmi.html b/docs/build/html/mxpic/components/primitives/pic/mmi.html index 6c9cf07..a54ae28 100644 --- a/docs/build/html/mxpic/components/primitives/pic/mmi.html +++ b/docs/build/html/mxpic/components/primitives/pic/mmi.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.pic.mmi#

              MMI_ML#

              +../../../../_images/MMI_ML.png +
              class mxpic.components.primitives.pic.mmi.MMI_ML(name=None, L_arm=[10], w_arm=[0.45, 1.35], xs='strip', arm_sine_width=False, L_mmi=[10], w_mmi=[5, 5], mmi_sine_width=False, sharp_patch=True, show_pins=False, res=0.01, N_out=3, N_in=1, Dp_out=1.5, Dp_in=1.5)#
              @@ -422,6 +412,8 @@

              MMI_STD#

              +../../../../_images/MMI_STD.png +
              class mxpic.components.primitives.pic.mmi.MMI_STD(name=None, N_out=3, N_in=1, L_arm=10, w_wg=0.45, w_port=1.2, xs='strip', L_mmi=10, w_mmi=5, sharp_patch=True, show_pins=False, Dp_out=1.5, Dp_in=1.5)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/racetrack.html b/docs/build/html/mxpic/components/primitives/pic/racetrack.html index 862eea8..8d5fc39 100644 --- a/docs/build/html/mxpic/components/primitives/pic/racetrack.html +++ b/docs/build/html/mxpic/components/primitives/pic/racetrack.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -389,6 +377,8 @@

              RacetrackResonator#

              +../../../../_images/RacetrackResonator.png +
              class mxpic.components.primitives.pic.racetrack.RacetrackResonator(R0, w0, R1, w1, dLy, dLx, name=None, xs='strip', gap1=0.2, gap2=0.2, w1_bus=0.45, w2_bus=0.45, R1_cp=None, R2_cp=None, A1_cp=0, A2_cp=0, w_wg=0.45, R1_att=20, R2_att=20, R2_att_min=10, R1_att_min=10, A1_att=30, A2_att=20, Ltp_bus=10, dL_p2p=None, L_tilt=10, sharp_patch=True, cell_xs_transition=None, Euler_trasition=False, res=0.01, show_pins=False)#
              @@ -442,6 +432,8 @@

              Racetrack_STD_Allpass#

              +../../../../_images/Racetrack_STD_Allpass.png +
              class mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass(r_rck, w_rck, dLy, name=None, xs='strip', gap=0.2, w_bus=0.45, A_cp=0, w_wg=0.45, Ltp_bus=10, dL_p2p=None, L_tilt=0, Ratt=10, w_ht=0, w_mt=10, via_h2m=None, xs_ht='heater', xs_mt='metal', sharp_patch=True, cell_xs_transition=None, res=0.01, show_pins=False)#
              @@ -486,6 +478,8 @@

              Racetrack_MM_Allpass#

              +../../../../_images/Racetrack_MM_Allpass.png +
              class mxpic.components.primitives.pic.racetrack.Racetrack_MM_Allpass(r1_rck, w1_rck, r0_rck, w0_rck, dLy, name=None, xs='strip', gap=0.2, w_bus=0.45, A_cp=0, w_wg=0.45, R_att=50, R_att_min=10, A_att=15, Ltp_bus=10, dL_p2p=None, sharp_patch=True, cell_xs_transition=None, res=0.01, show_pins=False)#
              @@ -523,6 +517,8 @@

              Racetrack_MM_Adddrop#

              +../../../../_images/Racetrack_MM_Adddrop.png +
              class mxpic.components.primitives.pic.racetrack.Racetrack_MM_Adddrop(r1_rck, w1_rck, r0_rck, w0_rck, dLy, name=None, xs='strip', gap=0.2, w_bus=0.45, A_cp=0, w_wg=0.45, R_att=50, R_att_min=10, A_att=15, Ltp_bus=10, dL_p2p=None, sharp_patch=True, cell_xs_transition=None, res=0.01, show_pins=False)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/rings.html b/docs/build/html/mxpic/components/primitives/pic/rings.html index f81c501..b4e6f86 100644 --- a/docs/build/html/mxpic/components/primitives/pic/rings.html +++ b/docs/build/html/mxpic/components/primitives/pic/rings.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.pic.rings#

              AED_ring#

              +../../../../_images/AED_ring.png +
              class mxpic.components.primitives.pic.rings.AED_ring(name=None, ORx=10, ORy=10, IRx=9.55, IRy=9.35, gap1=0.2, gap2=0.2, w1_bus=0.45, w2_bus=0.45, R1_cp=None, R2_cp=None, A1_cp=0, A2_cp=0, offset_X=0, offset_Y=0, w_wg=0.45, R1_att=20, R2_att=20, R2_att_min=10, R1_att_min=10, A1_att=30, A2_att=20, Ltp_bus=10, dL_p2p=None, L_tilt=10, xs='strip', sharp_patch=True, cell_xs_transition=None, Euler_trasition=False, res=0.01, show_pins=False)#
              @@ -438,6 +428,8 @@

              STD_PIC_Rings#

              +../../../../_images/STD_PIC_Rings.png +
              class mxpic.components.primitives.pic.rings.STD_PIC_Rings(name=None, r_ring=10, w_ring=10, gap1=0.2, gap2=0.2, w1_bus=0.45, w2_bus=0, R1_cp=None, R2_cp=None, A1_cp=0, A2_cp=0, offset_X=0, offset_Y=0, w_wg=0.45, R1_att=20, R2_att=20, R2_att_min=10, R1_att_min=10, A1_att=30, A2_att=20, Ltp_bus=10, dL_p2p=None, L_tilt=10, xs='strip', sharp_patch=True, cell_xs_transition=None, Euler_trasition=False, res=0.001, show_pins=False)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/spiral.html b/docs/build/html/mxpic/components/primitives/pic/spiral.html index b25d893..1188e87 100644 --- a/docs/build/html/mxpic/components/primitives/pic/spiral.html +++ b/docs/build/html/mxpic/components/primitives/pic/spiral.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.pic.spiral#

              spiral#

              +../../../../_images/spiral.png +
              class mxpic.components.primitives.pic.spiral.spiral(name=None, shape='circle', Dmin=50, R_bend=10, Rmin_euler=10, Lmin=50, width=2, w_port=0.45, w_bend_center=1, Rmin_bend_center=10, gap=1, cycles=20, xs='strip', layer=None, w_bend_port=None, Ltp_port=10, res=0.5, rib2strip=True, port_angle=180, Euler_bend=False, show_pins=False, sharp_patch=True)#
              @@ -424,6 +414,8 @@

              spiral_rectangle#

              +../../../../_images/spiral_rectangle.png +
              class mxpic.components.primitives.pic.spiral.spiral_rectangle(name=None, Dmin=50, Rmax_bend=10, Rmin_bend=10, wmin_bend=10, Lmin=50, width=2, w_port=None, gap=1, cycles=20, xs='strip', layer=None, w_bend_port=None, Lport=10, Ltp=10, res=0.5, cell_xs_transition=None, port_angle=180, show_pins=False, sharp_patch=True, in_out_align=True, Lpatch=0.05)#
              @@ -468,6 +460,8 @@

              Spiral_Rect_STD#

              +../../../../_images/Spiral_Rect_STD.png +
              class mxpic.components.primitives.pic.spiral.Spiral_Rect_STD(name=None, Dmin=50, R_bend=10, Lmin=50, width=2, w_port=0.45, gap=1, cycles=20, xs='strip', layer=None, Lport=10, in_out_align=True, res=0.5, cell_xs_transition=None, port_angle=180, show_pins=False, sharp_patch=True)#
              @@ -502,6 +496,8 @@

              spiral_circle#

              +../../../../_images/spiral_circle.png +
              class mxpic.components.primitives.pic.spiral.spiral_circle(name=None, Dmin=50, width=2, w_port=0.45, w_bend_center=1, gap=1, cycles=20, xs='strip', layer=None, Lport=10, res=0.5, rib2strip=True, port_angle=180, Euler_Sbend=False, show_pins=False, sharp_patch=True, strict_condition=False, R_ratio_mamnual=None)#
              @@ -553,6 +549,8 @@

              Spiral_Cicle_MM#

              +../../../../_images/Spiral_Cicle_MM.png +
              class mxpic.components.primitives.pic.spiral.Spiral_Cicle_MM(name=None, Dmin=50, width=2, w_port=0.45, w_bend_center=1, gap=1, cycles=20, xs='strip', layer=None, Lport=10, res=0.5, rib2strip=True, port_angle=180, show_pins=False, sharp_patch=True, strict_condition=False)#
              @@ -586,6 +584,8 @@

              Spiral_Cicle_STD#

              +../../../../_images/Spiral_Cicle_STD.png +
              class mxpic.components.primitives.pic.spiral.Spiral_Cicle_STD(name=None, Dmin=50, width=2, w_port=0.45, gap=1, cycles=20, xs='strip', layer=None, Lport=10, res=0.5, rib2strip=True, port_angle=180, show_pins=False, sharp_patch=True, strict_condition=False)#
              diff --git a/docs/build/html/mxpic/components/primitives/pic/taper.html b/docs/build/html/mxpic/components/primitives/pic/taper.html index 2e3cbf7..6555d9f 100644 --- a/docs/build/html/mxpic/components/primitives/pic/taper.html +++ b/docs/build/html/mxpic/components/primitives/pic/taper.html @@ -249,6 +249,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -380,6 +368,8 @@

              mxpic.components.primitives.pic.taper#

              transition#

              +../../../../_images/transition.png +
              class mxpic.components.primitives.pic.taper.transition(layer_FETCH='STRIP_TRE', layer_METCH='RIB_TRE', w_rib=1.1, dw_tolerance=0.2, w_grow_rib=2, w_grow_strip=2, Ltp1=15, Ltp2=10, Ltrans=5, L_port=2, show_pins=False)#
              @@ -408,6 +398,8 @@

              taper_xs2xs#

              +../../../../_images/taper_xs2xs.png +
              class mxpic.components.primitives.pic.taper.taper_xs2xs(xs_1='rib', xs_2='strip', L_taper=10, w_1=0.45, w_2=0.45, L_port=0)#
              @@ -431,6 +423,8 @@

              PSR#

              +../../../../_images/PSR.png +
              class mxpic.components.primitives.pic.taper.PSR(name='PSR_unit', xs='rib', layer_u=None, layer_d=None, w=[0.45, 0.45, 0.55, 1.2, 1.2], Lt_rib=[10, 30, 30, 10], ws=[0.45, 2, 1.2], Lt_slab=[40, 40], shape='sine', L_port=5, res=0.01)#
              diff --git a/docs/build/html/mxpic/components/primitives/spiral.html b/docs/build/html/mxpic/components/primitives/spiral.html index 5242f23..84a5dfb 100644 --- a/docs/build/html/mxpic/components/primitives/spiral.html +++ b/docs/build/html/mxpic/components/primitives/spiral.html @@ -373,249 +373,37 @@
              -
              -

              mxpic.components.primitives.spiral#

              +
              +

              mxpic.components.primitives.spiral#

              spiral#

              ../../../_images/spiral.png -
              -
              -class mxpic.components.primitives.spiral.spiral(name=None, shape='circle', Dmin=50, R_bend=10, Rmin_euler=10, Lmin=50, width=2, w_port=0.45, w_bend_center=1, Rmin_bend_center=10, gap=1, cycles=20, xs='strip', layer=None, w_bend_port=None, Ltp_port=10, res=0.5, cell_transition=None, port_angle=180, Euler_bend=False, show_pins=False, sharp_patch=True, sample_build=False)#
              -

              Bases: object

              -

              Parametric waveguide spiral supporting circular or rectangular footprints.

              -
              -
              Parameters:
              -
                -
              • name (str, optional) – Nazca cell name (default is None).

              • -
              • shape (str, optional) – Footprint style used for the spiral path, circular or rectangular (default is “circle”).

              • -
              • Dmin (float, optional) – Minimum inner diameter in microns; sets the first loop radius (default is 50).

              • -
              • R_bend (float, optional) – Bend radius in microns for rectangular implementations (default is 10).

              • -
              • Rmin_euler (float, optional) – Minimum radius inside Euler bends when Euler_bend is True (default is 10).

              • -
              • Lmin (float, optional) – Straight length in microns used by the innermost rectangular loop (default is 50).

              • -
              • width (float, optional) – Nominal waveguide width inside the spiral body (default is 2).

              • -
              • w_port (float, optional) – Output-port width in microns. None inherits width (default is 0.45).

              • -
              • w_bend_center (float, optional) – Waveguide width used in the central attachment bends (default is 1).

              • -
              • Rmin_bend_center (float, optional) – Minimum radius for the attachment bends (default is 10).

              • -
              • gap (float, optional) – Spacing between adjacent turns in microns (default is 1).

              • -
              • cycles (float, optional) – Number of half-turns (π radians) laid out in the spiral (default is 20).

              • -
              • xs (str, optional) – Cross-section key for the entire structure (default is “strip”).

              • -
              • layer (str, optional) – Override layer for polygons; None derives from xs (default is None).

              • -
              • w_bend_port (float or None, optional) – Width inside the outermost bends; None inherits width (default is None).

              • -
              • Ltp_port (float, optional) – Length of straight tapers that adapt width to w_port (default is 10).

              • -
              • res (float, optional) – Arc-length sampling step (µm) used for polygon tessellation (default is 0.5).

              • -
              • cell_transition (nazca.Cell, optional) – Insert XS transitions cell to strip when connecting ports (default is None).

              • -
              • port_angle (float, optional) – Output-port deflection angle in degrees, measured from +x (default is 180).

              • -
              • Euler_bend (bool, optional) – Use Euler/Clothoid bends at the center instead of circular bends (default is False).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers when True (default is False).

              • -
              • sharp_patch (bool, optional) – Add chamfer helper polygons when True (default is True).

              • -
              -
              -
              -
              -
              -generate_gds(show_pins)#
              -
              - -
              -

              spiral_rectangle#

              ../../../_images/spiral_rectangle.png -
              -
              -class mxpic.components.primitives.spiral.spiral_rectangle(name=None, Dmin=50, Rmax_bend=10, Rmin_bend=10, wmin_bend=10, Lmin=50, width=2, w_port=0.45, gap=1, cycles=20, xs='strip', layer=None, w_bend_port=None, Lport=10, Ltp=10, res=0.5, cell_xs_transition=None, port_angle=180, show_pins=False, sharp_patch=True, in_out_align=True, Lpatch=0.05, sample_build=False)#
              -

              Bases: object

              -

              Rectangular spiral with optional cross-section transitions and alignment control.

              -
              -
              Parameters:
              -
                -
              • name (str or None, optional) – Nazca cell name (default is None).

              • -
              • Dmin (float, optional) – Minimum vertical separation between the first pair of bends (default is 50).

              • -
              • Rmax_bend (float, optional) – Maximum radius used inside Clothoid bends (default is 10).

              • -
              • Rmin_bend (float, optional) – Minimum radius reached inside Clothoid bends (default is 10).

              • -
              • wmin_bend (float, optional) – Minimum waveguide width inside bends (default is 10).

              • -
              • Lmin (float, optional) – Straight length of the innermost segment (default is 50).

              • -
              • width (float, optional) – Nominal waveguide width along the spiral (default is 2).

              • -
              • w_port (float, optional) – IO waveguide width after the final taper (default is 0.45).

              • -
              • gap (float, optional) – Spacing between successive turns (default is 1).

              • -
              • cycles (float, optional) – Number of rectangular loops (default is 20).

              • -
              • xs (str, optional) – Cross-section key (default is “strip”).

              • -
              • layer (str, optional) – Override polygon layer (default is None).

              • -
              • w_bend_port (float or None, optional) – Bend waveguide width; inherits width when None (default is None).

              • -
              • Lport (float, optional) – Length of straight sections appended at each port (default is 10).

              • -
              • Ltp (float, optional) – Taper length that converts bend width to width (default is 10).

              • -
              • res (float, optional) – Arc-length sampling resolution (default is 0.5).

              • -
              • cell_xs_transition (nd.Cell or object, optional) – Pre-built cell that performs cross-section transitions after the ports (default is None).

              • -
              • port_angle (float, optional) – Output bend angle in degrees (default is 180).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers when True (default is False).

              • -
              • sharp_patch (bool, optional) – Insert chamfer helpers when True (default is True).

              • -
              • in_out_align (bool, optional) – If True, align input/output along the same axis when port_angle=180 (default is True).

              • -
              • Lpatch (float, optional) – Small straight length inserted before/after bends to ease Boolean ops (default is 0.05).

              • -
              -
              -
              -
              -
              -generate_gds(show_pins)#
              -
              - -
              -

              Spiral_Rect_STD#

              ../../../_images/Spiral_Rect_STD.png -
              -
              -class mxpic.components.primitives.spiral.Spiral_Rect_STD(name=None, Dmin=50, R_bend=10, Lmin=50, width=2, w_port=0.45, gap=1, cycles=20, xs='strip', layer=None, Lport=10, in_out_align=True, res=0.5, cell_xs_transition=None, port_angle=180, show_pins=False, sharp_patch=True)#
              -

              Bases: spiral_rectangle

              -

              Convenience preset for rectangular spirals that share a single bend radius.

              -
              -
              Parameters:
              -
                -
              • name (str or None, optional) – Nazca cell name (default is None).

              • -
              • Dmin (float, optional) – Minimum inner spacing between the first pair of bends (default is 50).

              • -
              • R_bend (float, optional) – Bend radius applied to every corner (default is 10).

              • -
              • Lmin (float, optional) – Straight length of the innermost segment (default is 50).

              • -
              • width (float, optional) – Waveguide width throughout the spiral (default is 2).

              • -
              • w_port (float, optional) – IO waveguide width after the final taper (default is 0.45).

              • -
              • gap (float, optional) – Spacing between successive turns (default is 1).

              • -
              • cycles (float, optional) – Number of rectangular loops (default is 20).

              • -
              • xs (str, optional) – Cross-section key (default is “strip”).

              • -
              • layer (str or None, optional) – Override polygon layer (default is None).

              • -
              • Lport (float, optional) – Length of straight port extensions (default is 10).

              • -
              • in_out_align (bool, optional) – Align input/output along the same axis when port_angle=180 (default is True).

              • -
              • res (float, optional) – Arc-length sampling resolution (default is 0.5).

              • -
              • cell_xs_transition (nd.Cell or object, optional) – Transition cell appended at the ports (default is None).

              • -
              • port_angle (float, optional) – Output bend angle in degrees (default is 180).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers when True (default is False).

              • -
              • sharp_patch (bool, optional) – Insert chamfer helpers when True (default is True).

              • -
              -
              -
              -
              -

              spiral_circle#

              ../../../_images/spiral_circle.png -
              -
              -class mxpic.components.primitives.spiral.spiral_circle(name=None, Dmin=50, width=2, w_port=0.45, w_bend_center=1, gap=1, cycles=20, xs='strip', layer=None, Lport=10, res=0.5, rib2strip=True, port_angle=180, Euler_Sbend=False, show_pins=False, sharp_patch=True, strict_condition=False, R_ratio_mamnual=None)#
              -

              Bases: object

              -

              Circular spiral with optional internal Euler S-bends and port transitions.

              -
              -
              Parameters:
              -
                -
              • name (str or None, optional) – Nazca cell name (default is None).

              • -
              • Dmin (float, optional) – Minimum inner diameter in microns (default is 50).

              • -
              • width (float, optional) – Nominal waveguide width (default is 2).

              • -
              • w_port (float, optional) – Output-port width after the final taper (default is 0.45).

              • -
              • w_bend_center (float, optional) – Waveguide width within the central attachment bend (default is 1).

              • -
              • gap (float, optional) – Spacing between adjacent turns (default is 1).

              • -
              • cycles (float, optional) – Number of half-turns (π radians) (default is 20).

              • -
              • xs (str, optional) – Cross-section key (default is “strip”).

              • -
              • layer (str or None, optional) – Override layer for polygons (default is None).

              • -
              • Lport (float, optional) – Length of straight sections appended to each port (default is 10).

              • -
              • res (float, optional) – Arc-length sampling step (default is 0.5).

              • -
              • rib2strip (bool, optional) – Insert rib-to-strip transitions at the ports (default is True).

              • -
              • port_angle (float, optional) – Output bend angle in degrees (default is 180).

              • -
              • Euler_Sbend (bool, optional) – Use optimized Euler S-bends at the center (default is False).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers when True (default is False).

              • -
              • sharp_patch (bool, optional) – Add chamfer polygons when True (default is True).

              • -
              • strict_condition (bool, optional) – Enforce constant spacing by matching the conchoid tilt exactly (default is False).

              • -
              • R_ratio_mamnual (tuple or None, optional) – Manually override the radius ratios used in Euler S-bends; expected form (Rc_ratio, Rm_ratio, tilt).

              • -
              -
              -
              -
              -
              -cell#
              -

              Optimizing the bend radius for the minimum and central

              -
              - -
              -
              -generate_gds(show_pins)#
              -
              - -
              -
              -opt_euler(R, R0)#
              -
              - -
              -

              Spiral_Cicle_MM#

              ../../../_images/Spiral_Cicle_MM.png -
              -
              -class mxpic.components.primitives.spiral.Spiral_Cicle_MM(name=None, Dmin=50, width=2, w_port=0.45, w_bend_center=1, gap=1, cycles=20, xs='strip', layer=None, Lport=10, res=0.5, rib2strip=True, port_angle=180, show_pins=False, sharp_patch=True, strict_condition=False)#
              -

              Bases: spiral_circle

              -
              -
              Parameters:
              -
                -
              • name (str or None, optional) – Nazca cell name (default is None).

              • -
              • Dmin (float, optional) – Minimum inner diameter in microns (default is 50).

              • -
              • width (float, optional) – Nominal waveguide width (default is 2).

              • -
              • w_port (float, optional) – Output-port width after the final taper (default is 0.45).

              • -
              • w_bend_center (float, optional) – Waveguide width within the central attachment bend (default is 1).

              • -
              • gap (float, optional) – Spacing between adjacent turns (default is 1).

              • -
              • cycles (float, optional) – Number of half-turns (π radians) (default is 20).

              • -
              • xs (str, optional) – Cross-section key (default is “strip”).

              • -
              • layer (str or None, optional) – Override polygon layer (default is None).

              • -
              • Lport (float, optional) – Length of straight port extensions (default is 10).

              • -
              • res (float, optional) – Arc-length sampling step (default is 0.5).

              • -
              • rib2strip (bool, optional) – Insert rib-to-strip transitions at the ports (default is True).

              • -
              • port_angle (float, optional) – Output bend angle in degrees (default is 180).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers when True (default is False).

              • -
              • sharp_patch (bool, optional) – Add chamfer polygons when True (default is True).

              • -
              • strict_condition (bool, optional) – Enforce constant-spacing constraints when True (default is False).

              • -
              -
              -
              -
              -

              Spiral_Cicle_STD#

              ../../../_images/Spiral_Cicle_STD.png -
              -
              -class mxpic.components.primitives.spiral.Spiral_Cicle_STD(name=None, Dmin=50, width=2, w_port=0.45, gap=1, cycles=20, xs='strip', layer=None, Lport=10, res=0.5, rib2strip=True, port_angle=180, show_pins=False, sharp_patch=True, strict_condition=False)#
              -

              Bases: spiral_circle

              -
              -
              Parameters:
              -
                -
              • name (str or None, optional) – Nazca cell name (default is None).

              • -
              • Dmin (float, optional) – Minimum inner diameter in microns (default is 50).

              • -
              • width (float, optional) – Waveguide width throughout the spiral (default is 2).

              • -
              • w_port (float, optional) – Output-port width after the final taper (default is 0.45).

              • -
              • gap (float, optional) – Spacing between adjacent turns (default is 1).

              • -
              • cycles (float, optional) – Number of half-turns (π radians) (default is 20).

              • -
              • xs (str, optional) – Cross-section key (default is “strip”).

              • -
              • layer (str or None, optional) – Override polygon layer (default is None).

              • -
              • Lport (float, optional) – Length of straight port extensions (default is 10).

              • -
              • res (float, optional) – Arc-length sampling step (default is 0.5).

              • -
              • rib2strip (bool, optional) – Insert rib-to-strip transitions at the ports (default is True).

              • -
              • port_angle (float, optional) – Output bend angle in degrees (default is 180).

              • -
              • show_pins (bool, optional) – Draw Nazca stub markers when True (default is False).

              • -
              • sharp_patch (bool, optional) – Add chamfer polygons when True (default is True).

              • -
              • strict_condition (bool, optional) – Enforce constant-spacing constraints when True (default is False).

              • -
              -
              -
              -
              -
              @@ -666,41 +454,12 @@ diff --git a/docs/build/html/mxpic/components/routing.html b/docs/build/html/mxpic/components/routing.html index 34a07f2..9231f77 100644 --- a/docs/build/html/mxpic/components/routing.html +++ b/docs/build/html/mxpic/components/routing.html @@ -44,7 +44,6 @@ - @@ -249,6 +248,13 @@
            • mxpic.components.electronics.eic_units
            • +
            • Geometry
              +
            • Others
            • -
            • Pdks
              -
            • Primitives
            • mxpic.components.basic
            • mxpic.components.gds_devices
            • mxpic.components.pins
            • mxpic.components.routing
            • -
            • Geometry
              -
            • @@ -843,15 +830,6 @@ orthogonal ubend.

              mxpic.components.pins

              - -
              -

              next

              -

              Geometry

              -
              - -
              diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index 69e74fa..a677e22 100644 Binary files a/docs/build/html/objects.inv and b/docs/build/html/objects.inv differ diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html index 1fac7db..35d8832 100644 --- a/docs/build/html/py-modindex.html +++ b/docs/build/html/py-modindex.html @@ -339,31 +339,6 @@
                  mxpic.components.others.simulation.DualPortElements
                  - mxpic.components.pdks.AMF_pdk -
                  - mxpic.components.pdks.CUMEC_pdk -
                  - mxpic.components.pdks.hgl_pdk_A -
                  - mxpic.components.pdks.IMECAS_pdk -
                  - mxpic.components.pdks.qy_pdk_A -
                  @@ -384,16 +359,6 @@     mxpic.components.primitives.active.rings
                  - mxpic.components.primitives.beam_splitters -
                  - mxpic.components.primitives.directional_couplers -
                  @@ -404,11 +369,6 @@     mxpic.components.primitives.grating_couplers
                  - mxpic.components.primitives.multimode_interferometers -
                  @@ -479,11 +439,6 @@     mxpic.components.primitives.pic.YBS
                  - mxpic.components.primitives.spiral -
                  diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index e6b91c0..87a6797 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"ADC_STD_2x2": [[33, "adc-std-2x2"], [44, "adc-std-2x2"]], "AED_Ring_PIN": [[31, "aed-ring-pin"]], "AED_ring": [[50, "aed-ring"]], "AMZI_W": [[4, "amzi-w"]], "Active": [[29, null]], "BS_tdc": [[33, "bs-tdc"], [44, "bs-tdc"]], "Brag_WDM": [[40, "brag-wdm"]], "Bragg": [[43, "bragg"]], "Bragg_apodized": [[43, "bragg-apodized"]], "CROW_AED": [[37, "crow-aed"]], "CROW_Circular_ring": [[37, "crow-circular-ring"]], "CROW_Eul_RCK": [[37, "crow-eul-rck"]], "CROW_Eul_Ring": [[37, "crow-eul-ring"]], "CROW_STD_Adddrop": [[37, "crow-std-adddrop"]], "CROW_STD_Allpass": [[37, "crow-std-allpass"]], "CRX_TE_1310": [[22, "crx-te-1310"]], "CRX_TE_1550": [[21, "crx-te-1550"], [22, "crx-te-1550"]], "Clothoid": [[11, "clothoid"]], "Components": [[16, null]], "Components:": [[0, null]], "Composites": [[7, null]], "Conchoid": [[11, "conchoid"]], "Cross": [[45, "cross"]], "Cross_Sine": [[45, "cross-sine"]], "DC": [[33, "dc"], [44, "dc"]], "DC_TE_1550": [[22, "dc-te-1550"]], "DC_bend": [[33, "dc-bend"], [44, "dc-bend"]], "DC_bend_20_80_Cband": [[23, "dc-bend-20-80-cband"]], "DC_bend_4_96_Cband": [[23, "dc-bend-4-96-cband"]], "DC_bend_50_50_Cband": [[23, "dc-bend-50-50-cband"]], "DC_pX3_50_50_Cband": [[25, "dc-px3-50-50-cband"]], "DC_pX_3sg": [[33, "dc-px-3sg"], [44, "dc-px-3sg"]], "DEVICE_2X2_FDTD_INIT": [[18, "device-2x2-fdtd-init"]], "DEVICE_COUPLER": [[18, "device-coupler"]], "DEVICE_PORTS": [[18, "device-ports"]], "DEVICE_RING_BUS": [[18, "device-ring-bus"]], "EC_1550": [[21, "ec-1550"]], "EC_TE_1550": [[22, "ec-te-1550"]], "EC_dual_layer_px3": [[27, "ec-dual-layer-px3"]], "EULER_CROW_BUS": [[18, "euler-crow-bus"]], "EULER_CROW_INTER_CP": [[18, "euler-crow-inter-cp"]], "Electronics": [[9, null]], "Elipse": [[15, "elipse"]], "Elipse_dual": [[15, "elipse-dual"]], "FA": [[34, "fa"], [46, "fa"]], "GC_STD_1D": [[34, "gc-std-1d"], [46, "gc-std-1d"]], "GC_STD_2D": [[34, "gc-std-2d"], [46, "gc-std-2d"]], "GC_SiN_Si_Dual_Layer": [[34, "gc-sin-si-dual-layer"]], "GC_TE_1310": [[20, "gc-te-1310"], [21, "gc-te-1310"], [22, "gc-te-1310"]], "GC_TE_1550": [[20, "gc-te-1550"], [21, "gc-te-1550"], [22, "gc-te-1550"]], "GC_TM_1310": [[22, "gc-tm-1310"]], "GC_TM_1550": [[21, "gc-tm-1550"], [22, "gc-tm-1550"]], "GPD_1550": [[21, "gpd-1550"]], "Geometry": [[12, null]], "Grating_2D_Hole": [[34, "grating-2d-hole"], [46, "grating-2d-hole"]], "Grating_2D_Hole_3Rec": [[46, "grating-2d-hole-3rec"]], "Grating_2D_Hole_4Rec": [[46, "grating-2d-hole-4rec"]], "Heater_NDoped": [[28, "heater-ndoped"]], "ISL": [[8, "isl"]], "LoopMirror": [[2, "loopmirror"]], "MDM": [[33, "mdm"], [44, "mdm"]], "MDM_ADC_TE1_1550": [[25, "mdm-adc-te1-1550"]], "MDM_ADC_TE2_1550": [[25, "mdm-adc-te2-1550"]], "MDM_ADC_TE3_1550": [[25, "mdm-adc-te3-1550"]], "MMG_1D_D14um_1550_2modes": [[25, "mmg-1d-d14um-1550-2modes"]], "MMI_1x2_TE_1310": [[21, "mmi-1x2-te-1310"], [22, "mmi-1x2-te-1310"]], "MMI_1x2_TE_1550": [[21, "mmi-1x2-te-1550"], [22, "mmi-1x2-te-1550"]], "MMI_2x2_TE_1310": [[22, "mmi-2x2-te-1310"]], "MMI_2x2_TE_1550": [[21, "mmi-2x2-te-1550"], [22, "mmi-2x2-te-1550"]], "MMI_ML": [[36, "mmi-ml"], [48, "mmi-ml"]], "MMI_STD": [[36, "mmi-std"], [48, "mmi-std"]], "MRR_AED": [[39, "mrr-aed"]], "MRR_DW_Adddrop": [[39, "mrr-dw-adddrop"]], "MRR_DW_Allpass": [[39, "mrr-dw-allpass"]], "MRR_MM_Adddrop": [[39, "mrr-mm-adddrop"]], "MRR_MM_Allpass": [[39, "mrr-mm-allpass"]], "MRR_STD_Adddrop": [[39, "mrr-std-adddrop"]], "MRR_STD_Allpass": [[39, "mrr-std-allpass"]], "MRR_STD_Ring": [[39, "mrr-std-ring"]], "MZI": [[3, "mzi"]], "MZI_2st_ubend": [[3, "mzi-2st-ubend"]], "MZI_Butterfly": [[3, "mzi-butterfly"]], "MZI_Eubend": [[3, "mzi-eubend"]], "MZI_NS": [[3, "mzi-ns"]], "MZI_NS_ubend": [[3, "mzi-ns-ubend"]], "MZI_Ubend": [[3, "mzi-ubend"]], "MZI_mesh_Parl": [[4, "mzi-mesh-parl"]], "MZI_mesh_Tri": [[4, "mzi-mesh-tri"]], "MZI_mesh_U": [[4, "mzi-mesh-u"]], "MonitorParas": [[18, "monitorparas"]], "Nano_ant": [[34, "nano-ant"], [46, "nano-ant"]], "Others": [[17, null]], "PAD": [[8, "pad"]], "PAD_60_80": [[21, "pad-60-80"]], "PADs": [[8, "pads"]], "PBS_1550": [[21, "pbs-1550"]], "PBS_3wg": [[41, "pbs-3wg"]], "PD_Cband_Cell": [[20, "pd-cband-cell"]], "PIN_MRR_MM_Adddrop": [[31, "pin-mrr-mm-adddrop"]], "PIN_MRR_MM_Allpass": [[31, "pin-mrr-mm-allpass"]], "PIN_MRR_STD_Allpass": [[31, "pin-mrr-std-allpass"]], "PSR": [[52, "psr"]], "PSR_1x2": [[40, "psr-1x2"]], "PS_2st": [[40, "ps-2st"]], "PS_2st_Straight": [[40, "ps-2st-straight"]], "PS_PIN": [[28, "ps-pin"]], "Passive": [[38, null]], "Pdks": [[24, null]], "Pic": [[47, null]], "PortParas": [[18, "portparas"]], "Primitives": [[35, null]], "RESONATOR": [[18, "resonator"]], "RING_PHASE": [[18, "ring-phase"]], "Racetrack": [[14, "racetrack"]], "RacetrackResonator": [[49, "racetrackresonator"]], "Racetrack_MM_Adddrop": [[49, "racetrack-mm-adddrop"]], "Racetrack_MM_Allpass": [[49, "racetrack-mm-allpass"]], "Racetrack_STD_Allpass": [[49, "racetrack-std-allpass"]], "Route": [[28, "route"], [31, "route"], [39, "route"], [49, "route"], [54, "route"]], "SOCR": [[39, "socr"]], "SOCR_Adiabatic": [[39, "socr-adiabatic"]], "SOCR_Adiabatic_Cband": [[39, "socr-adiabatic-cband"]], "SOCR_Cband": [[39, "socr-cband"]], "STD_CROW_V": [[37, "std-crow-v"]], "STD_PIC_Rings": [[50, "std-pic-rings"]], "STD_Ring_PIN": [[31, "std-ring-pin"]], "STD_ring_AMZI_adddrop": [[39, "std-ring-amzi-adddrop"]], "SimuDataFigurePlot": [[18, "simudatafigureplot"]], "Simulation": [[19, null]], "Spiral_Cicle_MM": [[51, "spiral-cicle-mm"], [53, "spiral-cicle-mm"]], "Spiral_Cicle_STD": [[51, "spiral-cicle-std"], [53, "spiral-cicle-std"]], "Spiral_Rect_STD": [[51, "spiral-rect-std"], [53, "spiral-rect-std"]], "SplittingTree": [[5, "splittingtree"]], "Taper": [[34, "taper"], [46, "taper"]], "Template": [[22, "template"]], "UMat_2x2_S": [[4, "umat-2x2-s"]], "Vias": [[8, "vias"]], "Vias_arc": [[8, "vias-arc"]], "WGDoped": [[30, "wgdoped"]], "W_waveguide": [[4, "w-waveguide"]], "YBranch": [[32, "ybranch"], [42, "ybranch"]], "Ybranch_3wg": [[32, "ybranch-3wg"], [42, "ybranch-3wg"]], "Ybranch_TE": [[22, "ybranch-te"]], "circle": [[15, "circle"]], "gds_lib_load": [[10, "gds-lib-load"]], "generate_gds_lib": [[10, "generate-gds-lib"]], "hole": [[15, "hole"]], "ic_exception": [[54, "ic-exception"]], "mxPIC Handbook": [[0, null]], "mx_bend": [[15, "mx-bend"]], "mxpic.components.basic": [[1, null]], "mxpic.components.composites.LoopMirror": [[2, null]], "mxpic.components.composites.MZI": [[3, null]], "mxpic.components.composites.MZI_mesh": [[4, null]], "mxpic.components.composites.SptTree": [[5, null]], "mxpic.components.composites.advance": [[6, null]], "mxpic.components.electronics.eic_units": [[8, null]], "mxpic.components.gds_devices": [[10, null]], "mxpic.components.geometry.curves": [[11, null]], "mxpic.components.geometry.polygons": [[13, null]], "mxpic.components.geometry.racetrack": [[14, null]], "mxpic.components.geometry.rings": [[15, null]], "mxpic.components.others.simulation.DualPortElements": [[18, null]], "mxpic.components.pdks.AMF_pdk": [[20, null]], "mxpic.components.pdks.CUMEC_pdk": [[21, null]], "mxpic.components.pdks.IMECAS_pdk": [[22, null]], "mxpic.components.pdks.hgl_pdk_A": [[23, null]], "mxpic.components.pdks.qy_pdk_A": [[25, null]], "mxpic.components.pins": [[26, null]], "mxpic.components.primitives.EC_dual_layer_px3": [[27, null]], "mxpic.components.primitives.active.dev_ps": [[28, null]], "mxpic.components.primitives.active.pin_wg": [[30, null]], "mxpic.components.primitives.active.rings": [[31, null]], "mxpic.components.primitives.beam_splitters": [[32, null]], "mxpic.components.primitives.directional_couplers": [[33, null]], "mxpic.components.primitives.grating_couplers": [[34, null]], "mxpic.components.primitives.multimode_interferometers": [[36, null]], "mxpic.components.primitives.passive.crows": [[37, null]], "mxpic.components.primitives.passive.rings": [[39, null]], "mxpic.components.primitives.passive.unit": [[40, null]], "mxpic.components.primitives.pic.PBS": [[41, null]], "mxpic.components.primitives.pic.YBS": [[42, null]], "mxpic.components.primitives.pic.bragg": [[43, null]], "mxpic.components.primitives.pic.couplers": [[44, null]], "mxpic.components.primitives.pic.cross": [[45, null]], "mxpic.components.primitives.pic.gratings": [[46, null]], "mxpic.components.primitives.pic.mmi": [[48, null]], "mxpic.components.primitives.pic.racetrack": [[49, null]], "mxpic.components.primitives.pic.rings": [[50, null]], "mxpic.components.primitives.pic.spiral": [[51, null]], "mxpic.components.primitives.pic.taper": [[52, null]], "mxpic.components.primitives.spiral": [[53, null]], "mxpic.components.routing": [[54, null]], "ring_bus_wg": [[33, "ring-bus-wg"], [44, "ring-bus-wg"]], "spiral": [[51, "spiral"], [53, "spiral"]], "spiral_circle": [[51, "spiral-circle"], [53, "spiral-circle"]], "spiral_rectangle": [[51, "spiral-rectangle"], [53, "spiral-rectangle"]], "strt_round_courner": [[13, "strt-round-courner"]], "taper_xs2xs": [[52, "taper-xs2xs"]], "transition": [[52, "transition"]], "tuple_to_complex": [[18, "tuple-to-complex"]], "waveguide": [[40, "waveguide"]], "waveguide_PIN": [[30, "waveguide-pin"]]}, "docnames": ["index", "mxpic/components/basic", "mxpic/components/composites/LoopMirror", "mxpic/components/composites/MZI", "mxpic/components/composites/MZI_mesh", "mxpic/components/composites/SptTree", "mxpic/components/composites/advance", "mxpic/components/composites/index", "mxpic/components/electronics/eic_units", "mxpic/components/electronics/index", "mxpic/components/gds_devices", "mxpic/components/geometry/curves", "mxpic/components/geometry/index", "mxpic/components/geometry/polygons", "mxpic/components/geometry/racetrack", "mxpic/components/geometry/rings", "mxpic/components/index", "mxpic/components/others/index", "mxpic/components/others/simulation/DualPortElements", "mxpic/components/others/simulation/index", "mxpic/components/pdks/AMF_pdk", "mxpic/components/pdks/CUMEC_pdk", "mxpic/components/pdks/IMECAS_pdk", "mxpic/components/pdks/hgl_pdk_A", "mxpic/components/pdks/index", "mxpic/components/pdks/qy_pdk_A", "mxpic/components/pins", "mxpic/components/primitives/EC_dual_layer_px3", "mxpic/components/primitives/active/dev_ps", "mxpic/components/primitives/active/index", "mxpic/components/primitives/active/pin_wg", "mxpic/components/primitives/active/rings", "mxpic/components/primitives/beam_splitters", "mxpic/components/primitives/directional_couplers", "mxpic/components/primitives/grating_couplers", "mxpic/components/primitives/index", "mxpic/components/primitives/multimode_interferometers", "mxpic/components/primitives/passive/crows", "mxpic/components/primitives/passive/index", "mxpic/components/primitives/passive/rings", "mxpic/components/primitives/passive/unit", "mxpic/components/primitives/pic/PBS", "mxpic/components/primitives/pic/YBS", "mxpic/components/primitives/pic/bragg", "mxpic/components/primitives/pic/couplers", "mxpic/components/primitives/pic/cross", "mxpic/components/primitives/pic/gratings", "mxpic/components/primitives/pic/index", "mxpic/components/primitives/pic/mmi", "mxpic/components/primitives/pic/racetrack", "mxpic/components/primitives/pic/rings", "mxpic/components/primitives/pic/spiral", "mxpic/components/primitives/pic/taper", "mxpic/components/primitives/spiral", "mxpic/components/routing"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["index.md", "mxpic/components/basic.md", "mxpic/components/composites/LoopMirror.md", "mxpic/components/composites/MZI.md", "mxpic/components/composites/MZI_mesh.md", "mxpic/components/composites/SptTree.md", "mxpic/components/composites/advance.md", "mxpic/components/composites/index.md", "mxpic/components/electronics/eic_units.md", "mxpic/components/electronics/index.md", "mxpic/components/gds_devices.md", "mxpic/components/geometry/curves.md", "mxpic/components/geometry/index.md", "mxpic/components/geometry/polygons.md", "mxpic/components/geometry/racetrack.md", "mxpic/components/geometry/rings.md", "mxpic/components/index.md", "mxpic/components/others/index.md", "mxpic/components/others/simulation/DualPortElements.md", "mxpic/components/others/simulation/index.md", "mxpic/components/pdks/AMF_pdk.md", "mxpic/components/pdks/CUMEC_pdk.md", "mxpic/components/pdks/IMECAS_pdk.md", "mxpic/components/pdks/hgl_pdk_A.md", "mxpic/components/pdks/index.md", "mxpic/components/pdks/qy_pdk_A.md", "mxpic/components/pins.md", "mxpic/components/primitives/EC_dual_layer_px3.md", "mxpic/components/primitives/active/dev_ps.md", "mxpic/components/primitives/active/index.md", "mxpic/components/primitives/active/pin_wg.md", "mxpic/components/primitives/active/rings.md", "mxpic/components/primitives/beam_splitters.md", "mxpic/components/primitives/directional_couplers.md", "mxpic/components/primitives/grating_couplers.md", "mxpic/components/primitives/index.md", "mxpic/components/primitives/multimode_interferometers.md", "mxpic/components/primitives/passive/crows.md", "mxpic/components/primitives/passive/index.md", "mxpic/components/primitives/passive/rings.md", "mxpic/components/primitives/passive/unit.md", "mxpic/components/primitives/pic/PBS.md", "mxpic/components/primitives/pic/YBS.md", "mxpic/components/primitives/pic/bragg.md", "mxpic/components/primitives/pic/couplers.md", "mxpic/components/primitives/pic/cross.md", "mxpic/components/primitives/pic/gratings.md", "mxpic/components/primitives/pic/index.md", "mxpic/components/primitives/pic/mmi.md", "mxpic/components/primitives/pic/racetrack.md", "mxpic/components/primitives/pic/rings.md", "mxpic/components/primitives/pic/spiral.md", "mxpic/components/primitives/pic/taper.md", "mxpic/components/primitives/spiral.md", "mxpic/components/routing.md"], "indexentries": {"a_ht (mxpic.components.primitives.passive.crows.std_crow_v attribute)": [[37, "mxpic.components.primitives.passive.crows.STD_CROW_V.A_ht", false]], "amzi_w (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W", false]], "cell (mxpic.components.composites.loopmirror.loopmirror attribute)": [[2, "mxpic.components.composites.LoopMirror.LoopMirror.cell", false]], "cell (mxpic.components.composites.mzi.mzi attribute)": [[3, "mxpic.components.composites.MZI.MZI.cell", false]], "cell (mxpic.components.composites.mzi.mzi_2st_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_2st_ubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_butterfly attribute)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.cell", false]], "cell (mxpic.components.composites.mzi.mzi_eubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_Eubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ns attribute)": [[3, "mxpic.components.composites.MZI.MZI_NS.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ns_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_NS_ubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_Ubend.cell", false]], "cell (mxpic.components.composites.mzi_mesh.amzi_w attribute)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_parl attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_tri attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_u attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U.cell", false]], "cell (mxpic.components.composites.mzi_mesh.umat_2x2_s attribute)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S.cell", false]], "cell (mxpic.components.composites.mzi_mesh.w_waveguide attribute)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide.cell", false]], "cell (mxpic.components.composites.spttree.splittingtree attribute)": [[5, "mxpic.components.composites.SptTree.SplittingTree.cell", false]], "cell (mxpic.components.primitives.pic.spiral.spiral_circle attribute)": [[51, "mxpic.components.primitives.pic.spiral.spiral_circle.cell", false]], "crow_aed (class in mxpic.components.primitives.passive.crows)": [[37, "mxpic.components.primitives.passive.crows.CROW_AED", false]], "crow_circular_ring (class in mxpic.components.primitives.passive.crows)": [[37, "mxpic.components.primitives.passive.crows.CROW_Circular_ring", false]], "crow_eul_rck (class in mxpic.components.primitives.passive.crows)": [[37, "mxpic.components.primitives.passive.crows.CROW_Eul_RCK", false]], "crow_eul_ring (class in mxpic.components.primitives.passive.crows)": [[37, "mxpic.components.primitives.passive.crows.CROW_Eul_Ring", false]], "crow_std_adddrop (class in mxpic.components.primitives.passive.crows)": [[37, "mxpic.components.primitives.passive.crows.CROW_STD_Adddrop", false]], "crow_std_allpass (class in mxpic.components.primitives.passive.crows)": [[37, "mxpic.components.primitives.passive.crows.CROW_STD_Allpass", false]], "generate_eic_gds() (mxpic.components.primitives.passive.crows.std_crow_v method)": [[37, "mxpic.components.primitives.passive.crows.STD_CROW_V.generate_eic_gds", false]], "generate_gds() (mxpic.components.composites.mzi.mzi_butterfly method)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.amzi_w method)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.mzi_mesh_u method)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.umat_2x2_s method)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.w_waveguide method)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide.generate_gds", false]], "generate_gds() (mxpic.components.composites.spttree.splittingtree method)": [[5, "mxpic.components.composites.SptTree.SplittingTree.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral method)": [[51, "mxpic.components.primitives.pic.spiral.spiral.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral_circle method)": [[51, "mxpic.components.primitives.pic.spiral.spiral_circle.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral_rectangle method)": [[51, "mxpic.components.primitives.pic.spiral.spiral_rectangle.generate_gds", false]], "generate_pic_gds() (mxpic.components.primitives.passive.crows.std_crow_v method)": [[37, "mxpic.components.primitives.passive.crows.STD_CROW_V.generate_pic_gds", false]], "generate_test_gds() (mxpic.components.composites.mzi.mzi_butterfly method)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.generate_test_gds", false]], "generate_test_gds() (mxpic.components.composites.mzi_mesh.amzi_w method)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.generate_test_gds", false]], "loopmirror (class in mxpic.components.composites.loopmirror)": [[2, "mxpic.components.composites.LoopMirror.LoopMirror", false]], "module": [[2, "module-mxpic.components.composites.LoopMirror", false], [3, "module-mxpic.components.composites.MZI", false], [4, "module-mxpic.components.composites.MZI_mesh", false], [5, "module-mxpic.components.composites.SptTree", false], [6, "module-mxpic.components.composites.advance", false], [37, "module-mxpic.components.primitives.passive.crows", false], [51, "module-mxpic.components.primitives.pic.spiral", false]], "mxpic.components.composites.advance": [[6, "module-mxpic.components.composites.advance", false]], "mxpic.components.composites.loopmirror": [[2, "module-mxpic.components.composites.LoopMirror", false]], "mxpic.components.composites.mzi": [[3, "module-mxpic.components.composites.MZI", false]], "mxpic.components.composites.mzi_mesh": [[4, "module-mxpic.components.composites.MZI_mesh", false]], "mxpic.components.composites.spttree": [[5, "module-mxpic.components.composites.SptTree", false]], "mxpic.components.primitives.passive.crows": [[37, "module-mxpic.components.primitives.passive.crows", false]], "mxpic.components.primitives.pic.spiral": [[51, "module-mxpic.components.primitives.pic.spiral", false]], "mzi (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI", false]], "mzi_2st_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_2st_ubend", false]], "mzi_butterfly (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly", false]], "mzi_eubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Eubend", false]], "mzi_mesh_parl (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl", false]], "mzi_mesh_tri (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri", false]], "mzi_mesh_u (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U", false]], "mzi_ns (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_NS", false]], "mzi_ns_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_NS_ubend", false]], "mzi_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Ubend", false]], "opt_euler() (mxpic.components.primitives.pic.spiral.spiral_circle method)": [[51, "mxpic.components.primitives.pic.spiral.spiral_circle.opt_euler", false]], "spiral (class in mxpic.components.primitives.pic.spiral)": [[51, "mxpic.components.primitives.pic.spiral.spiral", false]], "spiral_cicle_mm (class in mxpic.components.primitives.pic.spiral)": [[51, "mxpic.components.primitives.pic.spiral.Spiral_Cicle_MM", false]], "spiral_cicle_std (class in mxpic.components.primitives.pic.spiral)": [[51, "mxpic.components.primitives.pic.spiral.Spiral_Cicle_STD", false]], "spiral_circle (class in mxpic.components.primitives.pic.spiral)": [[51, "mxpic.components.primitives.pic.spiral.spiral_circle", false]], "spiral_rect_std (class in mxpic.components.primitives.pic.spiral)": [[51, "mxpic.components.primitives.pic.spiral.Spiral_Rect_STD", false]], "spiral_rectangle (class in mxpic.components.primitives.pic.spiral)": [[51, "mxpic.components.primitives.pic.spiral.spiral_rectangle", false]], "splittingtree (class in mxpic.components.composites.spttree)": [[5, "mxpic.components.composites.SptTree.SplittingTree", false]], "std_crow_v (class in mxpic.components.primitives.passive.crows)": [[37, "mxpic.components.primitives.passive.crows.STD_CROW_V", false]], "umat_2x2_s (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S", false]], "w_waveguide (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide", false]]}, "objects": {"mxpic.components": [[1, 0, 0, "-", "basic"], [10, 0, 0, "-", "gds_devices"], [26, 0, 0, "-", "pins"], [54, 0, 0, "-", "routing"]], "mxpic.components.composites": [[2, 0, 0, "-", "LoopMirror"], [3, 0, 0, "-", "MZI"], [4, 0, 0, "-", "MZI_mesh"], [5, 0, 0, "-", "SptTree"], [6, 0, 0, "-", "advance"]], "mxpic.components.composites.LoopMirror": [[2, 1, 1, "", "LoopMirror"]], "mxpic.components.composites.LoopMirror.LoopMirror": [[2, 2, 1, "", "cell"]], "mxpic.components.composites.MZI": [[3, 1, 1, "", "MZI"], [3, 1, 1, "", "MZI_2st_ubend"], [3, 1, 1, "", "MZI_Butterfly"], [3, 1, 1, "", "MZI_Eubend"], [3, 1, 1, "", "MZI_NS"], [3, 1, 1, "", "MZI_NS_ubend"], [3, 1, 1, "", "MZI_Ubend"]], "mxpic.components.composites.MZI.MZI": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_2st_ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_Butterfly": [[3, 2, 1, "", "cell"], [3, 3, 1, "", "generate_gds"], [3, 3, 1, "", "generate_test_gds"]], "mxpic.components.composites.MZI.MZI_Eubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_NS": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_NS_ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_Ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh": [[4, 1, 1, "", "AMZI_W"], [4, 1, 1, "", "MZI_mesh_Parl"], [4, 1, 1, "", "MZI_mesh_Tri"], [4, 1, 1, "", "MZI_mesh_U"], [4, 1, 1, "", "UMat_2x2_S"], [4, 1, 1, "", "W_waveguide"]], "mxpic.components.composites.MZI_mesh.AMZI_W": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"], [4, 3, 1, "", "generate_test_gds"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl": [[4, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri": [[4, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_U": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.MZI_mesh.UMat_2x2_S": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.MZI_mesh.W_waveguide": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.SptTree": [[5, 1, 1, "", "SplittingTree"]], "mxpic.components.composites.SptTree.SplittingTree": [[5, 2, 1, "", "cell"], [5, 3, 1, "", "generate_gds"]], "mxpic.components.electronics": [[8, 0, 0, "-", "eic_units"]], "mxpic.components.electronics.eic_units": [[8, 1, 1, "", "ISL"], [8, 1, 1, "", "PAD"], [8, 1, 1, "", "PADs"], [8, 1, 1, "", "Vias"], [8, 1, 1, "", "Vias_arc"]], "mxpic.components.electronics.eic_units.PAD": [[8, 3, 1, "", "generate_gds"]], "mxpic.components.electronics.eic_units.PADs": [[8, 3, 1, "", "generate_gds"]], "mxpic.components.electronics.eic_units.Vias": [[8, 3, 1, "", "generate_gds"], [8, 2, 1, "", "szVia"]], "mxpic.components.gds_devices": [[10, 1, 1, "", "gds_lib_load"], [10, 4, 1, "", "generate_gds_lib"]], "mxpic.components.gds_devices.gds_lib_load": [[10, 3, 1, "", "add_pin"]], "mxpic.components.geometry": [[11, 0, 0, "-", "curves"], [13, 0, 0, "-", "polygons"], [14, 0, 0, "-", "racetrack"], [15, 0, 0, "-", "rings"]], "mxpic.components.geometry.curves": [[11, 1, 1, "", "Clothoid"], [11, 1, 1, "", "Conchoid"]], "mxpic.components.geometry.curves.Clothoid": [[11, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.polygons": [[13, 1, 1, "", "strt_round_courner"]], "mxpic.components.geometry.racetrack": [[14, 1, 1, "", "Racetrack"]], "mxpic.components.geometry.racetrack.Racetrack": [[14, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.rings": [[15, 1, 1, "", "Elipse"], [15, 1, 1, "", "Elipse_dual"], [15, 1, 1, "", "circle"], [15, 1, 1, "", "hole"], [15, 1, 1, "", "mx_bend"]], "mxpic.components.geometry.rings.Elipse": [[15, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.rings.Elipse_dual": [[15, 3, 1, "", "generate_gds"]], "mxpic.components.others.simulation": [[18, 0, 0, "-", "DualPortElements"]], "mxpic.components.others.simulation.DualPortElements": [[18, 4, 1, "", "DEVICE_2X2_FDTD_INIT"], [18, 1, 1, "", "DEVICE_COUPLER"], [18, 1, 1, "", "DEVICE_PORTS"], [18, 1, 1, "", "DEVICE_RING_BUS"], [18, 1, 1, "", "EULER_CROW_BUS"], [18, 1, 1, "", "EULER_CROW_INTER_CP"], [18, 4, 1, "", "MonitorParas"], [18, 4, 1, "", "PortParas"], [18, 1, 1, "", "RESONATOR"], [18, 1, 1, "", "RING_PHASE"], [18, 4, 1, "", "SimuDataFigurePlot"], [18, 4, 1, "", "tuple_to_complex"]], "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS": [[18, 2, 1, "", "FolderPath"]], "mxpic.components.pdks": [[20, 0, 0, "-", "AMF_pdk"], [21, 0, 0, "-", "CUMEC_pdk"], [22, 0, 0, "-", "IMECAS_pdk"], [23, 0, 0, "-", "hgl_pdk_A"], [25, 0, 0, "-", "qy_pdk_A"]], "mxpic.components.pdks.AMF_pdk": [[20, 1, 1, "", "GC_TE_1310"], [20, 1, 1, "", "GC_TE_1550"], [20, 1, 1, "", "PD_Cband_Cell"]], "mxpic.components.pdks.CUMEC_pdk": [[21, 1, 1, "", "CRX_TE_1550"], [21, 1, 1, "", "EC_1550"], [21, 1, 1, "", "GC_TE_1310"], [21, 1, 1, "", "GC_TE_1550"], [21, 1, 1, "", "GC_TM_1550"], [21, 1, 1, "", "GPD_1550"], [21, 1, 1, "", "MMI_1x2_TE_1310"], [21, 1, 1, "", "MMI_1x2_TE_1550"], [21, 1, 1, "", "MMI_2x2_TE_1550"], [21, 1, 1, "", "PAD_60_80"], [21, 1, 1, "", "PBS_1550"]], "mxpic.components.pdks.CUMEC_pdk.CRX_TE_1550": [[21, 3, 1, "", "generate_test_gds"]], "mxpic.components.pdks.CUMEC_pdk.GC_TE_1550": [[21, 3, 1, "", "generate_test_gds"]], "mxpic.components.pdks.CUMEC_pdk.GC_TM_1550": [[21, 3, 1, "", "generate_test_gds"]], "mxpic.components.pdks.CUMEC_pdk.MMI_1x2_TE_1550": [[21, 3, 1, "", "generate_test_gds"]], "mxpic.components.pdks.IMECAS_pdk": [[22, 1, 1, "", "CRX_TE_1310"], [22, 1, 1, "", "CRX_TE_1550"], [22, 1, 1, "", "DC_TE_1550"], [22, 1, 1, "", "EC_TE_1550"], [22, 1, 1, "", "GC_TE_1310"], [22, 1, 1, "", "GC_TE_1550"], [22, 1, 1, "", "GC_TM_1310"], [22, 1, 1, "", "GC_TM_1550"], [22, 1, 1, "", "MMI_1x2_TE_1310"], [22, 1, 1, "", "MMI_1x2_TE_1550"], [22, 1, 1, "", "MMI_2x2_TE_1310"], [22, 1, 1, "", "MMI_2x2_TE_1550"], [22, 1, 1, "", "Template"], [22, 1, 1, "", "Ybranch_TE"]], "mxpic.components.pdks.IMECAS_pdk.CRX_TE_1310": [[22, 3, 1, "", "generate_test_gds"]], "mxpic.components.pdks.IMECAS_pdk.CRX_TE_1550": [[22, 3, 1, "", "generate_test_gds"]], "mxpic.components.pdks.hgl_pdk_A": [[23, 1, 1, "", "DC_bend_20_80_Cband"], [23, 1, 1, "", "DC_bend_4_96_Cband"], [23, 1, 1, "", "DC_bend_50_50_Cband"]], "mxpic.components.pdks.qy_pdk_A": [[25, 1, 1, "", "DC_pX3_50_50_Cband"], [25, 1, 1, "", "MDM_ADC_TE1_1550"], [25, 1, 1, "", "MDM_ADC_TE2_1550"], [25, 1, 1, "", "MDM_ADC_TE3_1550"], [25, 1, 1, "", "MMG_1D_D14um_1550_2modes"]], "mxpic.components.pdks.qy_pdk_A.DC_pX3_50_50_Cband": [[25, 3, 1, "", "generate_gds_lib"]], "mxpic.components.pdks.qy_pdk_A.MDM_ADC_TE1_1550": [[25, 3, 1, "", "generate_gds_lib"]], "mxpic.components.pdks.qy_pdk_A.MDM_ADC_TE2_1550": [[25, 3, 1, "", "generate_gds_lib"]], "mxpic.components.pdks.qy_pdk_A.MDM_ADC_TE3_1550": [[25, 3, 1, "", "generate_gds_lib"]], "mxpic.components.pdks.qy_pdk_A.MMG_1D_D14um_1550_2modes": [[25, 3, 1, "", "generate_gds_lib"]], "mxpic.components.primitives": [[27, 0, 0, "-", "EC_dual_layer_px3"], [32, 0, 0, "-", "beam_splitters"], [33, 0, 0, "-", "directional_couplers"], [34, 0, 0, "-", "grating_couplers"], [36, 0, 0, "-", "multimode_interferometers"], [53, 0, 0, "-", "spiral"]], "mxpic.components.primitives.EC_dual_layer_px3": [[27, 1, 1, "", "EC_dual_layer_px3"]], "mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3": [[27, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active": [[28, 0, 0, "-", "dev_ps"], [30, 0, 0, "-", "pin_wg"], [31, 0, 0, "-", "rings"]], "mxpic.components.primitives.active.dev_ps": [[28, 1, 1, "", "Heater_NDoped"], [28, 1, 1, "", "PS_PIN"], [28, 1, 1, "", "Route"]], "mxpic.components.primitives.active.dev_ps.Heater_NDoped": [[28, 3, 1, "", "generate_gds"], [28, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.active.dev_ps.PS_PIN": [[28, 2, 1, "", "cell"], [28, 3, 1, "", "generate_gds"], [28, 3, 1, "", "generate_mzi_gds"]], "mxpic.components.primitives.active.pin_wg": [[30, 1, 1, "", "WGDoped"], [30, 1, 1, "", "waveguide_PIN"]], "mxpic.components.primitives.active.pin_wg.WGDoped": [[30, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active.pin_wg.waveguide_PIN": [[30, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active.rings": [[31, 1, 1, "", "AED_Ring_PIN"], [31, 1, 1, "", "PIN_MRR_MM_Adddrop"], [31, 1, 1, "", "PIN_MRR_MM_Allpass"], [31, 1, 1, "", "PIN_MRR_STD_Allpass"], [31, 1, 1, "", "Route"], [31, 1, 1, "", "STD_Ring_PIN"]], "mxpic.components.primitives.active.rings.AED_Ring_PIN": [[31, 3, 1, "", "generate_imp_gds"]], "mxpic.components.primitives.beam_splitters": [[32, 1, 1, "", "YBranch"], [32, 1, 1, "", "Ybranch_3wg"]], "mxpic.components.primitives.beam_splitters.YBranch": [[32, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.beam_splitters.Ybranch_3wg": [[32, 3, 1, "", "generate_gds"], [32, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.directional_couplers": [[33, 1, 1, "", "ADC_STD_2x2"], [33, 1, 1, "", "BS_tdc"], [33, 1, 1, "", "DC"], [33, 1, 1, "", "DC_bend"], [33, 1, 1, "", "DC_pX_3sg"], [33, 1, 1, "", "MDM"], [33, 1, 1, "", "ring_bus_wg"]], "mxpic.components.primitives.directional_couplers.ADC_STD_2x2": [[33, 3, 1, "", "generate_err"], [33, 3, 1, "", "generate_gds"], [33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.directional_couplers.DC": [[33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.directional_couplers.DC_bend": [[33, 3, 1, "", "generate_gds"], [33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.directional_couplers.DC_pX_3sg": [[33, 3, 1, "", "generate_gds"], [33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.directional_couplers.MDM": [[33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.directional_couplers.ring_bus_wg": [[33, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.grating_couplers": [[34, 1, 1, "", "FA"], [34, 1, 1, "", "GC_STD_1D"], [34, 1, 1, "", "GC_STD_2D"], [34, 1, 1, "", "GC_SiN_Si_Dual_Layer"], [34, 1, 1, "", "Grating_2D_Hole"], [34, 1, 1, "", "Nano_ant"], [34, 1, 1, "", "Taper"]], "mxpic.components.primitives.grating_couplers.GC_STD_1D": [[34, 3, 1, "", "generate_negative"], [34, 3, 1, "", "generate_positive"], [34, 3, 1, "", "generate_test_dev"]], "mxpic.components.primitives.grating_couplers.GC_STD_2D": [[34, 3, 1, "", "generate_negative"], [34, 3, 1, "", "generate_positive"], [34, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.grating_couplers.GC_SiN_Si_Dual_Layer": [[34, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.grating_couplers.Grating_2D_Hole": [[34, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.grating_couplers.Nano_ant": [[34, 3, 1, "", "generate_gds"], [34, 3, 1, "", "generate_gds_error"], [34, 3, 1, "", "generate_gds_positive"]], "mxpic.components.primitives.grating_couplers.Taper": [[34, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.multimode_interferometers": [[36, 1, 1, "", "MMI_ML"], [36, 1, 1, "", "MMI_STD"]], "mxpic.components.primitives.multimode_interferometers.MMI_ML": [[36, 3, 1, "", "generate_gds"], [36, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.passive": [[37, 0, 0, "-", "crows"], [39, 0, 0, "-", "rings"], [40, 0, 0, "-", "unit"]], "mxpic.components.primitives.passive.crows": [[37, 1, 1, "", "CROW_AED"], [37, 1, 1, "", "CROW_Circular_ring"], [37, 1, 1, "", "CROW_Eul_RCK"], [37, 1, 1, "", "CROW_Eul_Ring"], [37, 1, 1, "", "CROW_STD_Adddrop"], [37, 1, 1, "", "CROW_STD_Allpass"], [37, 1, 1, "", "STD_CROW_V"]], "mxpic.components.primitives.passive.crows.STD_CROW_V": [[37, 2, 1, "", "A_ht"], [37, 3, 1, "", "generate_eic_gds"], [37, 3, 1, "", "generate_pic_gds"]], "mxpic.components.primitives.passive.rings": [[39, 1, 1, "", "MRR_AED"], [39, 1, 1, "", "MRR_DW_Adddrop"], [39, 1, 1, "", "MRR_DW_Allpass"], [39, 1, 1, "", "MRR_MM_Adddrop"], [39, 1, 1, "", "MRR_MM_Allpass"], [39, 1, 1, "", "MRR_STD_Adddrop"], [39, 1, 1, "", "MRR_STD_Allpass"], [39, 1, 1, "", "MRR_STD_Ring"], [39, 1, 1, "", "Route"], [39, 1, 1, "", "SOCR"], [39, 1, 1, "", "SOCR_Adiabatic"], [39, 1, 1, "", "SOCR_Adiabatic_Cband"], [39, 1, 1, "", "SOCR_Cband"], [39, 1, 1, "", "STD_ring_AMZI_adddrop"]], "mxpic.components.primitives.passive.rings.MRR_AED": [[39, 3, 1, "", "generate_eic_gds"]], "mxpic.components.primitives.passive.rings.Route": [[39, 3, 1, "", "bend_mine"], [39, 3, 1, "", "bend_p2p"], [39, 3, 1, "", "bend_route"], [39, 3, 1, "", "bend_route_p2p"], [39, 3, 1, "", "bend_strt_bend_p2p"], [39, 3, 1, "", "bend_strt_bend_p2p_mine"], [39, 3, 1, "", "connPatch"], [39, 3, 1, "", "line_mm"], [39, 3, 1, "", "rt_bend"], [39, 3, 1, "", "sbend_p2p"], [39, 3, 1, "", "sbend_p2p_mine"], [39, 3, 1, "", "sbend_route"], [39, 3, 1, "", "strt"], [39, 3, 1, "", "strt_bend_strt_p2p_mine"], [39, 3, 1, "", "strt_mm"], [39, 3, 1, "", "strt_mm_p2p"], [39, 3, 1, "", "strt_p2p"], [39, 3, 1, "", "taper"], [39, 3, 1, "", "taper_p2p"], [39, 3, 1, "", "tube_mine"], [39, 3, 1, "", "ubend_p2p"], [39, 3, 1, "", "ubend_route"]], "mxpic.components.primitives.passive.rings.SOCR": [[39, 3, 1, "", "generate_2pi_gds"], [39, 3, 1, "", "generate_eic_part"], [39, 3, 1, "", "generate_gds"], [39, 3, 1, "", "generate_pic_part"], [39, 3, 1, "", "generate_test_gds"], [39, 3, 1, "", "generate_test_mzi_gds"]], "mxpic.components.primitives.passive.rings.SOCR_Adiabatic": [[39, 3, 1, "", "generate_eic_part"], [39, 3, 1, "", "generate_gds"], [39, 3, 1, "", "generate_pic_part"]], "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop": [[39, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive.unit": [[40, 1, 1, "", "Brag_WDM"], [40, 1, 1, "", "PSR_1x2"], [40, 1, 1, "", "PS_2st"], [40, 1, 1, "", "PS_2st_Straight"], [40, 1, 1, "", "waveguide"]], "mxpic.components.primitives.passive.unit.Brag_WDM": [[40, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.passive.unit.PSR_1x2": [[40, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.passive.unit.PS_2st": [[40, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive.unit.PS_2st_Straight": [[40, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic": [[41, 0, 0, "-", "PBS"], [42, 0, 0, "-", "YBS"], [43, 0, 0, "-", "bragg"], [44, 0, 0, "-", "couplers"], [45, 0, 0, "-", "cross"], [46, 0, 0, "-", "gratings"], [48, 0, 0, "-", "mmi"], [49, 0, 0, "-", "racetrack"], [50, 0, 0, "-", "rings"], [51, 0, 0, "-", "spiral"], [52, 0, 0, "-", "taper"]], "mxpic.components.primitives.pic.PBS": [[41, 1, 1, "", "PBS_3wg"]], "mxpic.components.primitives.pic.PBS.PBS_3wg": [[41, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.YBS": [[42, 1, 1, "", "YBranch"], [42, 1, 1, "", "Ybranch_3wg"]], "mxpic.components.primitives.pic.YBS.YBranch": [[42, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.YBS.Ybranch_3wg": [[42, 3, 1, "", "generate_gds"], [42, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.bragg": [[43, 1, 1, "", "Bragg"], [43, 1, 1, "", "Bragg_apodized"]], "mxpic.components.primitives.pic.bragg.Bragg_apodized": [[43, 3, 1, "", "generate_negative"], [43, 3, 1, "", "generate_positive"]], "mxpic.components.primitives.pic.couplers": [[44, 1, 1, "", "ADC_STD_2x2"], [44, 1, 1, "", "BS_tdc"], [44, 1, 1, "", "DC"], [44, 1, 1, "", "DC_bend"], [44, 1, 1, "", "DC_pX_3sg"], [44, 1, 1, "", "MDM"], [44, 1, 1, "", "ring_bus_wg"]], "mxpic.components.primitives.pic.couplers.ADC_STD_2x2": [[44, 3, 1, "", "generate_err"], [44, 3, 1, "", "generate_gds"], [44, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC": [[44, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC_bend": [[44, 3, 1, "", "generate_gds"], [44, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC_pX_3sg": [[44, 3, 1, "", "generate_gds"], [44, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.MDM": [[44, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.ring_bus_wg": [[44, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.cross": [[45, 1, 1, "", "Cross"], [45, 1, 1, "", "Cross_Sine"]], "mxpic.components.primitives.pic.cross.Cross": [[45, 3, 1, "", "generate_gds"], [45, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.gratings": [[46, 1, 1, "", "FA"], [46, 1, 1, "", "GC_STD_1D"], [46, 1, 1, "", "GC_STD_2D"], [46, 1, 1, "", "Grating_2D_Hole"], [46, 1, 1, "", "Grating_2D_Hole_3Rec"], [46, 1, 1, "", "Grating_2D_Hole_4Rec"], [46, 1, 1, "", "Nano_ant"], [46, 1, 1, "", "Taper"]], "mxpic.components.primitives.pic.gratings.GC_STD_1D": [[46, 3, 1, "", "generate_negative"], [46, 3, 1, "", "generate_positive"], [46, 3, 1, "", "generate_test_dev"]], "mxpic.components.primitives.pic.gratings.GC_STD_2D": [[46, 3, 1, "", "generate_negative"], [46, 3, 1, "", "generate_positive"], [46, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole": [[46, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec": [[46, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec": [[46, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Nano_ant": [[46, 3, 1, "", "generate_gds"], [46, 3, 1, "", "generate_gds_error"], [46, 3, 1, "", "generate_gds_positive"]], "mxpic.components.primitives.pic.gratings.Taper": [[46, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.mmi": [[48, 1, 1, "", "MMI_ML"], [48, 1, 1, "", "MMI_STD"]], "mxpic.components.primitives.pic.mmi.MMI_ML": [[48, 3, 1, "", "generate_gds"], [48, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.racetrack": [[49, 1, 1, "", "RacetrackResonator"], [49, 1, 1, "", "Racetrack_MM_Adddrop"], [49, 1, 1, "", "Racetrack_MM_Allpass"], [49, 1, 1, "", "Racetrack_STD_Allpass"], [49, 1, 1, "", "Route"]], "mxpic.components.primitives.pic.racetrack.RacetrackResonator": [[49, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass": [[49, 3, 1, "", "generate_eic_gds"]], "mxpic.components.primitives.pic.rings": [[50, 1, 1, "", "AED_ring"], [50, 1, 1, "", "STD_PIC_Rings"]], "mxpic.components.primitives.pic.rings.AED_ring": [[50, 3, 1, "", "generate_pic_gds"], [50, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.spiral": [[51, 1, 1, "", "Spiral_Cicle_MM"], [51, 1, 1, "", "Spiral_Cicle_STD"], [51, 1, 1, "", "Spiral_Rect_STD"], [51, 1, 1, "", "spiral"], [51, 1, 1, "", "spiral_circle"], [51, 1, 1, "", "spiral_rectangle"]], "mxpic.components.primitives.pic.spiral.spiral": [[51, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.spiral.spiral_circle": [[51, 2, 1, "", "cell"], [51, 3, 1, "", "generate_gds"], [51, 3, 1, "", "opt_euler"]], "mxpic.components.primitives.pic.spiral.spiral_rectangle": [[51, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.taper": [[52, 1, 1, "", "PSR"], [52, 1, 1, "", "taper_xs2xs"], [52, 1, 1, "", "transition"]], "mxpic.components.primitives.spiral": [[53, 1, 1, "", "Spiral_Cicle_MM"], [53, 1, 1, "", "Spiral_Cicle_STD"], [53, 1, 1, "", "Spiral_Rect_STD"], [53, 1, 1, "", "spiral"], [53, 1, 1, "", "spiral_circle"], [53, 1, 1, "", "spiral_rectangle"]], "mxpic.components.primitives.spiral.spiral": [[53, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.spiral.spiral_circle": [[53, 2, 1, "", "cell"], [53, 3, 1, "", "generate_gds"], [53, 3, 1, "", "opt_euler"]], "mxpic.components.primitives.spiral.spiral_rectangle": [[53, 3, 1, "", "generate_gds"]], "mxpic.components.routing": [[54, 1, 1, "", "Route"], [54, 4, 1, "", "ic_exception"]], "mxpic.components.routing.Route": [[54, 3, 1, "", "bend_mine"], [54, 3, 1, "", "bend_p2p"], [54, 3, 1, "", "bend_route"], [54, 3, 1, "", "bend_route_p2p"], [54, 3, 1, "", "bend_strt_bend_p2p"], [54, 3, 1, "", "bend_strt_bend_p2p_mine"], [54, 3, 1, "", "connPatch"], [54, 3, 1, "", "line_mm"], [54, 3, 1, "", "rt_bend"], [54, 3, 1, "", "sbend_p2p"], [54, 3, 1, "", "sbend_p2p_mine"], [54, 3, 1, "", "sbend_route"], [54, 3, 1, "", "strt"], [54, 3, 1, "", "strt_bend_strt_p2p_mine"], [54, 3, 1, "", "strt_mm"], [54, 3, 1, "", "strt_mm_p2p"], [54, 3, 1, "", "strt_p2p"], [54, 3, 1, "", "taper"], [54, 3, 1, "", "taper_p2p"], [54, 3, 1, "", "tube_mine"], [54, 3, 1, "", "ubend_p2p"], [54, 3, 1, "", "ubend_route"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:function"}, "terms": {"": [39, 53, 54], "0": [2, 3, 4, 8, 10, 11, 14, 15, 18, 21, 22, 25, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "001": [11, 14, 15, 50], "01": [36, 48, 49, 50, 52], "02": [33, 44], "05": [15, 39, 51, 53], "1": [3, 8, 11, 13, 18, 22, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 42, 43, 44, 45, 46, 48, 51, 52, 53, 54], "10": [3, 4, 5, 8, 11, 13, 14, 15, 21, 22, 30, 31, 32, 33, 34, 36, 37, 39, 40, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "100": [8, 14, 27, 28, 30, 33, 39, 44], "10000": 11, "10001": 18, "101": 18, "11": [8, 41], "110": [34, 46], "12": 27, "120": 8, "120degre": [], "1310nm": [20, 21], "140": 40, "15": [3, 4, 27, 32, 33, 37, 40, 42, 43, 44, 49, 52], "150": [3, 40], "1500nm": 23, "1550nm": [20, 21], "16": 5, "1600nm": 23, "18": [32, 42, 50], "180": [31, 51, 53], "1by": 21, "1d": [34, 46], "1um": [], "1x2": 40, "2": [4, 8, 18, 21, 22, 27, 28, 30, 31, 32, 33, 34, 36, 39, 40, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "20": [2, 4, 11, 23, 28, 31, 32, 33, 34, 37, 39, 40, 41, 42, 44, 46, 49, 50, 51, 53, 54], "200": [27, 30, 43], "200nm": [], "2021": [], "2022": [], "2026": [], "22": [18, 33, 44], "25": [4, 30, 34, 41, 46], "250": 39, "270": [31, 39], "28": [], "2d": [34, 46], "2st": 40, "2um": [], "2x2": [4, 44], "3": [4, 8, 15, 18, 31, 32, 34, 36, 37, 39, 41, 42, 43, 45, 46, 48, 54], "30": [3, 4, 30, 31, 33, 34, 37, 39, 40, 44, 46, 49, 50, 52], "300": [21, 33, 34, 44, 46], "33": [33, 44], "35": [30, 31, 33, 36, 37, 44, 48, 50], "360": 15, "38": 37, "3db": 32, "3rec": 46, "3sg": 44, "3um": [], "3wg": [41, 42], "4": [11, 18, 23, 30, 31, 32, 34, 37, 39, 42, 45, 46, 54], "40": [3, 33, 34, 39, 40, 44, 52, 54], "400": [21, 22, 27, 32, 33, 42, 44, 45], "41": [34, 46], "45": [2, 3, 4, 10, 11, 15, 25, 27, 28, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53], "450nm": [], "4rec": 46, "5": [3, 4, 8, 11, 13, 14, 18, 21, 22, 25, 28, 30, 33, 34, 36, 37, 39, 40, 41, 43, 44, 45, 46, 48, 51, 52, 53, 54], "50": [4, 8, 27, 34, 36, 39, 40, 46, 48, 49, 51, 53, 54], "500": 28, "510nm": [], "55": [31, 33, 39, 40, 41, 44, 50, 52], "57": [34, 46], "5um": [], "6": [4, 15, 18, 27, 31, 32, 34, 39, 42, 45, 46], "60": [8, 28], "61": [33, 44], "64": [8, 13, 33, 44], "65": [31, 37, 50], "7": [40, 41], "75": 3, "8": [4, 8, 27, 30, 31, 32, 33, 37, 40, 42, 44, 46], "80": [4, 8, 23, 32, 33, 42, 44], "800": 28, "88": [33, 44], "9": [31, 34, 39, 40, 50], "90": [8, 28, 31, 39, 49, 54], "908": [], "913": [], "96": 23, "A": [11, 33, 44], "AED": [31, 37, 39, 50], "If": [2, 3, 4, 5, 36, 39, 53, 54], "The": [39, 54], "_description_": 30, "_type_": 30, "a0": 34, "a1": [5, 18], "a1_att": [37, 39, 49, 50], "a1_cp": [37, 39, 49, 50], "a2": 18, "a2_att": [37, 39, 49, 50], "a2_cp": [37, 39, 49, 50], "a_anti": [33, 44], "a_anti_rfl": 34, "a_att": [31, 32, 37, 39, 42, 49], "a_bend": 41, "a_cp": [31, 37, 39, 49], "a_gc_tap": 34, "a_ht": [31, 37, 39], "a_imp_in": 31, "a_imp_out": 31, "a_tap": [34, 46], "abandon": 28, "absent": 8, "account": [39, 54], "activ": [16, 35], "acut": [33, 36], "ad": [4, 34, 39, 46, 54], "adapt": 53, "adapt_width": [28, 31, 39, 49, 54], "adapt_x": [28, 31, 39, 49, 54], "adc": 44, "adc_std_2x2": [35, 47], "add": [2, 3, 31, 32, 33, 36, 37, 39, 41, 42, 44, 48, 49, 50, 51, 53], "add_pin": 10, "adddrop": [31, 37, 39, 49], "adiabat": [27, 33, 39], "adjac": [32, 34, 36, 53], "advanc": [7, 16], "aed_r": [39, 47], "aed_ring_pin": 29, "after": [32, 33, 34, 53], "air": 27, "air_trench": 27, "al": [], "align": [4, 39, 53, 54], "all": [32, 33, 34, 36, 39, 54], "allpass": [31, 37, 39, 49], "alon": 34, "along": [4, 32, 34, 53], "alreadi": 39, "altern": 34, "amax": [39, 54], "amf": 20, "amf_ipkiss_pdk": 20, "amf_pdk": [16, 24], "amzi": [4, 39], "amzi_w": 7, "an": [39, 54], "analysi": [34, 46], "angl": [2, 15, 27, 28, 31, 32, 33, 34, 37, 39, 41, 42, 44, 46, 49, 50, 53, 54], "angle_til": 27, "ani": [2, 3, 4, 5, 30, 31, 33, 37, 39, 40, 44, 46, 49, 50, 51], "anoth": [39, 54], "antenna": 34, "anti": [33, 34], "apertur": 34, "apod": 43, "aport": 18, "append": [32, 34, 53], "appli": [33, 34, 53, 54], "ar": [5, 33, 34], "arc": [32, 33, 34, 53], "area": [8, 34], "arg": 15, "arm": [3, 4, 32, 33, 36], "arm_sine_width": [36, 48], "around": [2, 3], "arrai": [34, 46], "arrow": [39, 54], "assembl": [], "associ": 27, "assum": [39, 54], "asymmetr": [3, 4, 33], "attach": [32, 39, 53, 54], "attribut": 5, "auto": 33, "autom": 0, "automat": [39, 54], "avoid": [33, 39, 54], "axi": [32, 53], "b": [2, 3, 4, 43, 44], "b1": [5, 18], "b2": [5, 18], "back": 27, "balanc": [33, 39, 54], "band": 39, "base": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 20, 21, 22, 23, 25, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "basic": [0, 16], "bdc": 33, "beam": [2, 3, 4], "beam_splitt": [16, 35], "befor": [33, 34, 39, 53, 54], "begin": [39, 54], "begin_flat": 11, "behavior": 4, "bend": [2, 3, 4, 5, 15, 23, 27, 32, 33, 39, 44, 51, 53, 54], "bend_cel": 14, "bend_dc": [33, 44], "bend_heat": 4, "bend_min": [39, 54], "bend_p2p": [39, 54], "bend_radiu": 5, "bend_rout": [39, 54], "bend_route_p2p": [39, 54], "bend_straight_bend_p2p": [39, 54], "bend_strt_bend": [39, 54], "bend_strt_bend_p2p": [39, 54], "bend_strt_bend_p2p_min": [39, 54], "bendendflag": [39, 54], "bent": [4, 32], "beol": 27, "between": [3, 4, 5, 27, 30, 31, 32, 33, 34, 36, 37, 39, 40, 49, 53, 54], "binari": 5, "block": 6, "bodi": [32, 36, 53], "bool": [2, 3, 4, 5, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "boolean": 53, "both": [3, 4, 32, 33, 36], "box": [5, 27], "brag": 40, "brag_wdm": 38, "bragg": [35, 40, 47], "bragg_apod": 47, "branch": [5, 32], "broadband": [32, 33, 44], "broadcast": 34, "bs1": 3, "bs2": 3, "bs3": 3, "bs_tdc": [35, 47], "bsb": [39, 54], "bu": [3, 4, 33, 37, 44], "build": [6, 30, 31, 34, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52], "built": [2, 4, 5, 33, 53], "bus_dop": 31, "bus_ord": 37, "butterfli": 3, "c": 39, "calcul": 33, "can": [15, 34, 39, 46, 54], "cband": 20, "cell": [2, 3, 4, 5, 10, 13, 20, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "cell_attribut": 50, "cell_nam": [10, 28, 34, 39, 46], "cell_transit": 53, "cell_xs_transit": [30, 31, 39, 49, 50, 51, 53], "cellnam": [33, 44], "cellsreus": 10, "center": [15, 32, 34, 53], "central": [27, 36, 51, 53], "chamfer": [32, 33, 36, 39, 53, 54], "channel": [5, 34], "chip": 27, "cicl": 51, "circl": [12, 33, 34, 44, 46, 51, 53], "circular": [15, 33, 37, 44, 53], "circumscrib": [], "clad": [2, 3, 27, 31, 33, 37, 39, 41, 42, 44, 48, 49, 50, 51], "cladmateri": 18, "class": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 20, 21, 22, 23, 25, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "clear": 27, "clothoid": [12, 33, 53], "clothoid_ord": [33, 44], "code": [39, 54], "coerc": 5, "column": 34, "common": 4, "compact": 3, "compens": [3, 4], "complet": [], "compon": [7, 9, 12, 17, 19, 24, 29, 35, 38, 47], "composit": [0, 16, 37, 40], "conchoid": [12, 53], "condit": 54, "configur": 34, "connect": [37, 39, 53, 54], "connpatch": [39, 54], "constant": 53, "constraint": 53, "contact": 4, "contain": [], "continu": [31, 33, 37, 39, 41, 42, 44, 48, 49, 50, 51], "contrast": 27, "control": [32, 53], "conveni": [3, 6, 36, 53], "convert": [27, 53], "core": [27, 33], "corner": [31, 33, 36, 37, 39, 41, 42, 44, 48, 49, 50, 51, 53], "correspond": 36, "cosin": 36, "count": [46, 48, 51], "coupl": [27, 32, 33, 39], "coupler": [2, 20, 21, 23, 27, 32, 33, 34, 35, 46, 47], "cp": [39, 54], "creat": [34, 39, 54], "cross": [2, 3, 4, 23, 27, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53], "cross_nam": 8, "cross_sin": 47, "crow": [6, 35, 38], "crow_a": 38, "crow_circular_r": 38, "crow_custom": 37, "crow_eul_r": 38, "crow_eul_rck": 38, "crow_std_adddrop": 38, "crow_std_allpass": 38, "crx_te_1310": 24, "crx_te_1550": 24, "ct_pitch": 28, "cubic": 32, "cumec": [20, 21], "cumec_csip130cu": [], "cumec_pdk": [16, 24], "cumec_sip130cu_pdk": 21, "curv": [12, 16], "curvatur": 27, "custom": [], "cycl": [51, 53], "d2wg_list": 28, "d_arm": [3, 4], "d_hole": 34, "d_port": [3, 4], "da_tran": [33, 44], "dac": [33, 37, 39, 44], "dc": [3, 4, 35, 47], "dc_bend": [23, 35, 47], "dc_bend_20_80_cband": 24, "dc_bend_4_96_cband": 24, "dc_bend_50_50_cband": 24, "dc_px3_50_50_cband": 24, "dc_px_3sg": [25, 35, 47], "dc_te_1550": 24, "debug": [33, 34, 36], "deep": 27, "default": [2, 3, 4, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "defin": [34, 46], "define_typ": [34, 46], "definit": [30, 31, 34, 37, 39, 40, 49], "deflect": [32, 33, 53], "degre": [2, 27, 31, 32, 33, 34, 37, 39, 41, 42, 44, 46, 49, 50, 53], "demultiplex": 40, "depend": [30, 31, 39, 49, 50, 51], "depth": 34, "deriv": [33, 53], "describ": [39, 54], "design": 39, "detail": [], "detch": [], "determin": 34, "dev_nam": 18, "dev_p": [29, 35], "devic": [18, 27, 30, 31, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52], "device_2x2_fdtd_init": 19, "device_coupl": 19, "device_port": 19, "device_ring_bu": 19, "devnam": 18, "diamet": [34, 53], "differ": [], "differenti": [3, 4], "diffract": 34, "dimens": 27, "direct": [2, 23, 33, 39, 44, 54], "directional_coupl": [16, 35], "disabl": [3, 4, 33], "disconnect": [39, 54], "discret": [32, 33], "disk": 15, "distanc": 3, "divis": 33, "dl": [3, 4], "dl_amzi": [3, 4], "dl_arm": 39, "dl_cal": 11, "dl_ht": 4, "dl_p2p": [31, 33, 37, 39, 44, 49, 50], "dl_tran": [33, 44], "dl_wg": 11, "dlc": [33, 44], "dlx": [14, 37, 49], "dly": [14, 37, 49], "dmin": [51, 53], "do": 34, "doc": [28, 31, 39, 49, 54], "document": 0, "doe": [39, 54], "dofirst": [39, 54], "dope": 28, "dope_offset": 30, "dope_ovlp": 30, "dostrfirst": [39, 54], "dp_in": [36, 48], "dp_out": [36, 48], "draw": [3, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "dt": 43, "dual": [27, 34], "dual_bu": 31, "dual_ht": 3, "dualportel": [17, 19], "dummi": 27, "dure": 3, "duti": 34, "duty_cycl": [34, 46], "dw": [33, 39, 44], "dw_toler": 52, "dx": 18, "dx_gc2gc": [21, 22, 32, 33, 34, 36, 42, 44, 45, 46, 48, 50], "dx_hole": [15, 34, 46], "dx_offset": 40, "dxgc2gc": [3, 4], "dy": 18, "dy_gc2gc": [32, 33, 36, 42, 44, 48, 50], "dy_hol": [15, 34, 46], "dygc2gc": [3, 4], "dz": 18, "e": 27, "each": [4, 32, 36, 53], "eas": 53, "ec_1550": 24, "ec_dual_layer_px3": [16, 35], "ec_te_1550": 24, "edg": [8, 27, 34], "edge1": [39, 54], "edge2": [39, 54], "edgepoint": [39, 54], "effici": [], "eic_unit": [9, 16], "either": 34, "electr": [31, 37, 39, 40], "electron": [0, 16], "element": [39, 54], "elips": 12, "elipse_du": 12, "ellipt": 15, "enabl": [4, 33], "end": [15, 33, 34, 39, 54], "end_angl": [39, 54], "end_patch": [11, 33, 44], "enforc": 53, "entir": 53, "entranc": [32, 34], "entri": 34, "epin_di": 39, "epin_dx": 39, "epin_ht_di": 31, "epin_ht_dx": 31, "equal": 36, "err": [33, 44], "err_asi": [32, 42], "et": [], "eta_d": 43, "eta_etch": [34, 43, 46], "etch": [34, 46], "etch_depth": [34, 46], "etch_shap": 43, "etch_typ": [34, 43, 46], "eul": 37, "euler": [3, 33, 44, 53], "euler_anti_bend": [33, 44], "euler_bend": [40, 51, 53], "euler_crow_bu": 19, "euler_crow_inter_cp": 19, "euler_point": [33, 44], "euler_sbend": [51, 53], "euler_transist": [33, 44], "euler_trasit": [31, 37, 39, 49, 50], "evalu": 33, "everi": 53, "exactli": 53, "exampl": [39, 54], "except": [34, 54], "exclus": 27, "excurs": 4, "exit": 32, "expect": 53, "explicit": 4, "export": [6, 34], "export_plt": [39, 54], "expos": 34, "extens": [27, 53], "extern": [32, 33], "extra": [34, 39, 54], "f": [39, 54], "fa": [35, 47], "fabric": [33, 44], "facet": 27, "fallback": [39, 54], "fals": [3, 4, 5, 8, 11, 15, 18, 23, 25, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "fan": 34, "fanout": 34, "fcw_tre": [34, 46], "fdtd": 18, "fdtd_height": 18, "fdtdbuild": 18, "featur": [2, 3], "feed": 34, "fetch": [34, 43, 46], "fiber": [27, 34, 46], "fiber_coupl": [34, 46], "field": 34, "field_sampl": 18, "file": 15, "fill": 34, "filler": 33, "final": [27, 33, 53], "final_flat": 11, "first": [3, 27, 33, 39, 53, 54], "float": [2, 3, 4, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 46, 48, 49, 50, 51, 52, 53, 54], "fold": 3, "folderpath": 18, "follow": 36, "footprint": [34, 53], "forc": 33, "form": [32, 53], "four": [], "fraction": 34, "from": [2, 4, 5, 23, 33, 34, 39, 53, 54], "function": [39, 54], "futur": [33, 34, 46], "g": [27, 39, 54], "g0": [33, 44], "g1": [33, 34, 44], "gaolei": [], "gap": [30, 31, 32, 33, 34, 37, 39, 41, 42, 44, 46, 49, 50, 51, 53, 54], "gap0": [33, 44], "gap1": [33, 37, 39, 44, 49, 50], "gap2": [37, 39, 49, 50], "gap_bu": 37, "gap_cp": 37, "gap_crow": 37, "gap_n_i": 31, "gap_p_i": 31, "gap_teeth_si": 34, "gap_teeth_sin": 34, "gc": [3, 4, 21, 22, 28, 32, 33, 34, 36, 39, 40, 42, 44, 45, 46, 48, 50], "gc2gc_dx": [21, 40], "gc2gc_dy": 40, "gc2gc_length": [21, 28, 39], "gc_in": 40, "gc_offset": 28, "gc_sin_si_dual_lay": 35, "gc_std_1d": [25, 35, 47], "gc_std_2d": [35, 47], "gc_te_1310": 24, "gc_te_1550": 24, "gc_tm_1310": 24, "gc_tm_1550": 24, "gd": [5, 27, 30, 33, 34, 39, 44, 46], "gds_devic": [0, 16], "gds_lib_gener": 25, "gds_lib_load": [16, 20, 21, 22], "ge": 20, "gener": [2, 3, 4, 5, 12, 28, 30, 31, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 54], "generate_2pi_gd": 39, "generate_eic_gd": [37, 39, 49], "generate_eic_part": 39, "generate_err": [33, 44], "generate_gd": [3, 4, 5, 8, 11, 14, 15, 27, 28, 30, 32, 33, 34, 36, 39, 40, 41, 42, 44, 45, 46, 48, 49, 51, 53], "generate_gds_error": [34, 46], "generate_gds_lib": [16, 25], "generate_gds_posit": [34, 46], "generate_imp_gd": 31, "generate_mzi_gd": 28, "generate_neg": [34, 43, 46], "generate_pic_gd": [37, 50], "generate_pic_part": 39, "generate_posit": [34, 43, 46], "generate_test_dev": [34, 46], "generate_test_gd": [3, 4, 21, 22, 28, 32, 33, 34, 36, 39, 40, 42, 44, 45, 46, 48, 50], "generate_test_mzi_gd": 39, "geo": [39, 54], "geometr": 13, "geometri": [0, 2, 3, 4, 16, 31, 33, 34, 37, 39, 41, 42, 44, 48, 49, 50, 51], "getch_tr": [34, 46], "give": [39, 54], "glass": 18, "go": [34, 46], "gpd_1550": 24, "gpuon": 18, "grate": [20, 21, 34, 35, 40, 47], "grating_2d_hol": [35, 47], "grating_2d_hole_3rec": 47, "grating_2d_hole_4rec": 47, "grating_coupl": [16, 35], "grating_unit": 46, "grid": [4, 39, 54], "gridpatch": [39, 54], "gridsnap": [39, 54], "gt_diamet": [34, 46], "gt_layer": [34, 46], "gt_vector": [34, 46], "guid": [33, 39, 54], "h": [], "half": [33, 53], "handl": 3, "heater": [3, 4, 28, 30, 31, 37, 39, 40, 49], "heater_length": 28, "heater_ndop": 29, "heater_width": 28, "height": 18, "helper": [4, 13, 32, 36, 53], "hgl_pdk_a": [16, 24], "high": [27, 28], "hole": [12, 34, 46], "hole_shap": [15, 34, 46], "horizont": [33, 34], "horsesho": [39, 54], "ht_notch_dual": [31, 39], "ht_rot": 39, "ht_same_sid": 4, "ht_shift": 37, "hu": [], "huang": [], "i": [2, 3, 4, 5, 23, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "ic": [39, 54], "ic_except": 16, "ictyp": [39, 54], "ident": [], "identifi": [27, 30, 31, 33, 34, 37, 39, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52], "if_open": 28, "ignor": [39, 54], "im": [39, 54], "imec": [34, 46], "imecas_pdk": [16, 24], "imecas_pdk2": 22, "implant": 31, "implement": 53, "import": [39, 54], "in_out_align": [51, 53], "includ": [], "index": 27, "individu": 34, "info": [39, 54], "inherit": 53, "initi": [8, 27, 32, 33], "inner": [3, 53], "innermost": 53, "input": [3, 4, 27, 33, 34, 36, 53], "insert": [32, 33, 36, 53], "insid": [32, 33, 53], "instanc": [34, 39, 54], "instanti": [3, 8, 10, 28, 31, 33, 34, 39, 49, 54], "instead": [36, 53], "instrcutpath": 18, "instruct": 18, "int": [3, 4, 5, 28, 30, 31, 33, 34, 36, 37, 39, 40, 41, 43, 44, 45, 46, 48, 49, 50, 51, 52, 54], "interact": 33, "interconnect": [28, 31, 39, 49, 54], "interfac": [3, 4], "interfer": 36, "interferomet": [3, 4, 28], "intern": [3, 4, 53], "interpol": 36, "introduc": [39, 54], "io": [32, 33, 53], "iri": [15, 31, 39, 50], "irx": [15, 31, 39, 50], "isl": [3, 4, 9, 31, 37, 39, 40], "isl_left": 37, "isl_low": 4, "isl_right": 37, "isl_upp": 4, "isol": [3, 4, 31, 37, 39, 40], "its": [39, 54], "jump": [39, 54], "junction": 28, "keep": [32, 33, 34, 36], "kei": [32, 33, 34, 36, 53], "kr": 11, "l": [3, 32, 39, 42, 45], "l0": 3, "l1": 40, "l12": [3, 40], "l2": 40, "l_ar": [34, 46], "l_arm": [3, 4, 36, 48], "l_attach": [32, 42], "l_box_end": 27, "l_compens": 4, "l_cp": [33, 44], "l_end": [21, 22, 27, 34, 45, 46], "l_end_si": 34, "l_end_sin": 34, "l_field_cent": [34, 46], "l_heater": [4, 40], "l_ht": [3, 30, 40], "l_in": 27, "l_in_tp": [32, 42], "l_inner": 3, "l_mmi": [36, 48], "l_patch": [3, 4], "l_port": 52, "l_tail": [34, 46], "l_taper": [30, 34, 46, 52], "l_tilt": [31, 37, 39, 49, 50], "l_tp": [3, 39, 40], "l_wg": [4, 28, 30, 40], "la": 15, "laid": 53, "later": [34, 39, 54], "layer": [11, 13, 14, 15, 27, 28, 30, 31, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "layer_d": 52, "layer_dt": 27, "layer_dum_exl_b": 27, "layer_fetch": 52, "layer_height": 18, "layer_metch": 52, "layer_ox_open": 34, "layer_si_etch": 34, "layer_si_slab": 34, "layer_si_teeth": 34, "layer_sin_etch": 34, "layer_sin_slab": [27, 34], "layer_sin_teeth": 34, "layer_top_cov": 27, "layer_u": 52, "layermap": 10, "layernam": [39, 54], "layout": [2, 3, 4, 5, 28, 30, 31, 33, 34, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52], "lb": 15, "lb0": [33, 44], "lc1": [33, 44], "lc2": [33, 44], "lcp": [32, 41, 42], "ld": [33, 44], "least": [], "len": 36, "length": [3, 4, 8, 13, 27, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "length1": [39, 54], "length2": [39, 54], "level": 5, "liang": [], "lib_nam": 10, "lib_path": 10, "libpath": 18, "librari": 0, "like": [], "line_mm": [39, 54], "linear": [34, 36, 39, 46, 54], "link": 32, "list": [28, 30, 34, 37, 42, 45, 46, 48, 52], "ll": [39, 54], "lmax": 8, "lmin": [51, 53], "ln": 3, "ln1": 3, "ln2": 3, "locat": 15, "logic": [34, 46], "longer": [39, 54], "longitudin": [32, 36], "loop": [2, 53], "loopmirror": [7, 16], "lower": [4, 5, 33], "lower_isl": 40, "lp1": [33, 44], "lpatch": [51, 53], "lport": [51, 53], "lr": [39, 54], "ls1": 3, "ls2": 3, "lstart": [39, 54], "lt": [33, 44], "lt_bu": [33, 44], "lt_cp": [33, 44], "lt_rib": 52, "lt_slab": 52, "ltot": [39, 54], "ltp": [3, 4, 39, 40, 51, 53, 54], "ltp1": [27, 52], "ltp2": [27, 52], "ltp3": 27, "ltp_bu": [31, 37, 39, 49, 50], "ltp_mm": [39, 54], "ltp_port": [30, 51, 53], "ltran": 52, "lu": [33, 44], "lumer": 18, "lumericalpath": 18, "lx_end": [34, 46], "lx_port": [34, 46], "lx_side": [34, 46], "lx_sq": 15, "lx_taper": [34, 46], "ly_end": [34, 46], "ly_port": [34, 46], "ly_sid": [34, 46], "ly_sq": 15, "ly_tap": [34, 46], "mach": [3, 4, 28], "made": [39, 54], "mai": [], "main": 34, "manag": 27, "manual": 53, "margin": 34, "marker": [28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53], "master": [], "match": [34, 53], "materi": 18, "matter": [39, 54], "max_theta": [34, 46], "maximum": [3, 33, 34, 39, 53, 54], "mdm": [25, 35, 40, 47], "mdm_adc_te1_1550": 24, "mdm_adc_te2_1550": 24, "mdm_adc_te3_1550": 24, "mean": [33, 34], "measur": 53, "mesh": 4, "mesh_ord": 18, "mesh_typ": 4, "metal": [3, 4, 8, 30, 31, 37, 39, 40, 49], "metch": [34, 46], "micrometr": [], "micron": [2, 3, 4, 5, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53], "mid_offset": 39, "midpoint": 27, "minimum": [3, 33, 51, 53], "mirror": [2, 33], "mitig": 33, "ml": 48, "mm": [31, 39, 49, 51], "mm_rout": [39, 54], "mmg_1d_d14um_1550_2mod": 24, "mmi": [21, 28, 35, 36, 39, 47], "mmi_1x2_te_1310": 24, "mmi_1x2_te_1550": 24, "mmi_2x2_te_1310": 24, "mmi_2x2_te_1550": 24, "mmi_ml": [35, 47], "mmi_sine_width": [36, 48], "mmi_std": [35, 47], "mode": [28, 31, 33, 34, 39, 40, 49, 54], "mode_radiu": 46, "modeidx": 18, "model": [39, 54], "modul": 39, "mohanti": [], "monitor": 20, "monitorpara": 19, "mono": 36, "mrr": [31, 39], "mrr_a": [31, 38], "mrr_dw_adddrop": 38, "mrr_dw_allpass": 38, "mrr_mm_adddrop": 38, "mrr_mm_allpass": 38, "mrr_std_adddrop": 38, "mrr_std_allpass": 38, "mrr_std_ring": 38, "msg": 54, "multi": 36, "multimod": [36, 39], "multimode_interferomet": [16, 35], "multiplex": [33, 40], "must": [32, 36], "mx_bend": 12, "mx_frame_lib": 15, "mxpic": [7, 9, 12, 16, 17, 19, 24, 29, 35, 38, 47], "mxpic_handbook": [], "myself": [39, 54], "mzi": [4, 7, 16], "mzi_2st_ubend": 7, "mzi_butterfli": 7, "mzi_eubend": 7, "mzi_mesh": [7, 16], "mzi_mesh_parl": 7, "mzi_mesh_tri": 7, "mzi_mesh_u": 7, "mzi_n": 7, "mzi_ns_ubend": 7, "mzi_offset": 28, "mzi_ubend": 7, "n": [28, 31, 43], "n_bend": 4, "n_in": [36, 48], "n_layer_list": 28, "n_out": [36, 48], "n_point": [13, 15, 45], "n_port": 4, "n_teeth_si": 34, "n_teeth_sin": 34, "name": [2, 3, 4, 8, 10, 11, 25, 27, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "nano": 34, "nano_": [35, 47], "nanoantenna": [34, 46], "nat": [], "nazca": [2, 3, 4, 5, 32, 33, 34, 36, 39, 53, 54], "nd": [34, 39, 53, 54], "ndarrai": 42, "nearest": 5, "need": [5, 39, 54], "neg": [15, 39, 54], "nest": 3, "new": [39, 54], "nitrid": 27, "nld": 30, "node": [39, 54], "nois": 39, "nomin": [3, 33, 53], "non": [34, 46], "none": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 25, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "normal": 39, "np": [28, 30, 31, 42], "num": [8, 21, 22, 34, 45, 46], "num_i": [34, 46], "num_socr": 39, "num_x": [34, 46], "number": [4, 5, 33, 34, 36, 39, 46, 53, 54], "nw": [28, 30], "object": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 27, 28, 30, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53], "offset": [4, 15, 28, 31, 33, 34, 39, 49, 50, 54], "offset_a": 15, "offset_b": 15, "offset_i": [15, 31, 39, 50], "offset_x": [15, 31, 39, 50], "omit": [3, 4, 5], "op": 53, "open": [27, 34], "oper": [3, 18], "opt_eul": [51, 53], "optic": [2, 3, 4, 5, 27, 34, 46], "optim": [51, 53], "option": [2, 3, 4, 5, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "order": 33, "ori": [15, 31, 39, 50], "ori_teeth_offset": 34, "orient": [39, 54], "original_funct": [39, 54], "orthogon": [39, 54], "orx": [15, 31, 39, 50], "other": [0, 16, 19], "out": [34, 53], "outer": [3, 32], "outer_isl": 3, "outermost": 53, "output": [3, 4, 5, 32, 33, 34, 36, 39, 53, 54], "output_numb": 5, "output_pitch": 5, "over": 39, "overal": 34, "overrid": [3, 4, 53], "oxid": 27, "oxide_facet": 27, "p": [31, 40], "p_ar": [34, 46], "p_in_n_out": 31, "p_layer_list": 28, "packag": [39, 54], "pad": [9, 27, 28], "pad_60_80": 24, "pad_opt": 27, "pair": 53, "palik": 18, "para": [], "parabol": [34, 46], "parallel": [39, 54], "parallelogram": 4, "paramet": [2, 3, 4, 5, 8, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "parametr": 53, "part": 32, "pass": 4, "passiv": [16, 35], "patch": [2, 3, 4, 31, 33, 37, 39, 41, 42, 44, 48, 49, 50, 51, 54], "path": [18, 53], "pattern": 30, "pb": [35, 47], "pbs_1550": 24, "pbs_3wg": 47, "pcb": [28, 31, 39, 49, 54], "pd_cband_cel": 24, "pdk": [0, 16], "pdk_path": [20, 21, 22], "per": [32, 34], "perform": 53, "period": [4, 34, 43, 46], "phase": [4, 28, 33, 34, 39, 46], "photon": 0, "photoresist": [34, 46], "physic": 34, "pic": [16, 35], "pin": [0, 3, 4, 5, 16, 18, 28, 30, 31, 33, 34, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 54], "pin1": [39, 54], "pin2": [39, 54], "pin_mrr_mm_adddrop": 29, "pin_mrr_mm_allpass": 29, "pin_mrr_std_allpass": 29, "pin_nam": 10, "pin_wg": [29, 35], "pinstyl": [28, 31, 39, 49, 54], "pitch": [3, 4, 5, 32, 34, 36, 46], "place": [4, 15, 39, 54], "placement": 4, "planar": 34, "plane": 33, "pld": 30, "point": [32, 33, 39, 54], "polar": [40, 52], "polygon": [12, 15, 16, 32, 33, 36, 53], "polysi_diamet": [34, 46], "polysi_lay": [34, 46], "polysi_vector": [34, 46], "polysilicon": 34, "port": [3, 4, 18, 32, 33, 34, 36, 53], "port_align": 4, "port_angl": [51, 53], "port_dist": 18, "port_nam": 18, "port_radiu": 18, "port_symmetr": [33, 44], "port_width": 18, "portpara": 19, "ports_extend": 18, "posit": [3, 34, 39, 46, 54], "possibl": [39, 54], "power": [5, 20, 33, 44], "pp": [28, 30, 31], "pre": 53, "preced": 34, "preset": 53, "primit": [0, 11, 12, 14, 15, 16, 29, 38, 47], "profil": 34, "provid": [2, 39, 54], "ps_2st": 38, "ps_2st_straight": 38, "ps_pin": 29, "psr": [40, 47], "psr_1x2": 38, "psr_unit": 52, "purpos": [33, 34], "put": [39, 54], "pw": [28, 30], "px": [33, 34, 44, 46], "px_type": [33, 44], "py": [15, 34, 46], "quickstart": [], "qy_pdk_a": [16, 24], "r": [8, 11, 51, 53], "r0": [11, 32, 33, 37, 42, 44, 49, 51, 53], "r0_rck": 49, "r1": [37, 49], "r1_att": [37, 39, 49, 50], "r1_att_min": [37, 39, 49, 50], "r1_cp": [37, 39, 49, 50], "r1_rck": 49, "r2": 37, "r2_att": [37, 39, 49, 50], "r2_att_min": [37, 39, 49, 50], "r2_cp": [37, 39, 49, 50], "r_att": [31, 32, 37, 39, 42, 49], "r_att_min": [31, 37, 39, 49], "r_bend": [3, 4, 14, 27, 36, 39, 40, 41, 48, 50, 51, 53], "r_compens": 4, "r_cp": [31, 33, 37, 44], "r_hole": 15, "r_in": [33, 44], "r_max_anti": [33, 44], "r_max_tran": [33, 44], "r_min_anti": [33, 44], "r_out": 39, "r_outer": 37, "r_ratio_mamnu": [51, 53], "r_rck": 49, "r_ring": [18, 31, 37, 39, 50], "r_teeth_ori_si": 34, "r_teeth_ori_sin": 34, "racetrack": [12, 16, 35, 47], "racetrack_mm_adddrop": 47, "racetrack_mm_allpass": 47, "racetrack_std_allpass": 47, "racetrackreson": 47, "radian": 53, "radiu": [2, 3, 4, 5, 13, 15, 18, 27, 28, 31, 32, 33, 34, 37, 39, 40, 41, 42, 44, 49, 50, 51, 53, 54], "radius1": [39, 54], "radius2": [39, 54], "rais": [34, 54], "rang": 15, "ratio": 53, "ratt": 49, "rbend": [32, 42], "rc_point": 8, "rc_radiu": 8, "rc_ratio": 53, "rck": 37, "rd0": [33, 44], "rd1": [33, 44], "re": [8, 11, 14, 15, 32, 33, 36, 39, 42, 44, 45, 48, 49, 50, 51, 52, 53], "reach": 53, "rect": 51, "rectangl": [34, 43, 51], "rectangular": [34, 53], "reduc": [27, 33], "ref": [39, 54], "refer": [34, 39, 54], "reflect": [27, 34], "reflector": [2, 34], "reflector_vector": [34, 46], "region": [3, 32, 34, 36, 46], "regist": 33, "renam": 10, "repeat": [4, 5, 34], "repetit": [46, 48, 51], "res_eic": 39, "reserv": 33, "resolut": [3, 15, 36, 53], "reson": 19, "respect": 27, "result": [34, 39, 46, 54], "return": [2, 30, 39, 54], "reus": 3, "reusabl": 12, "revers": 4, "rib": [30, 52, 53], "rib2strip": [51, 53], "rib_tap": 30, "rib_tr": 52, "right": [39, 54], "ring": [6, 12, 16, 29, 33, 35, 37, 38, 44, 47], "ring_bus_wg": [35, 47], "ring_phas": 19, "rl": [39, 54], "rm_ratio": 53, "rmax": [3, 11, 33, 44], "rmax_bend": [51, 53], "rmin": [3, 33, 40, 44], "rmin_bend": [51, 53], "rmin_bend_cent": [51, 53], "rmin_eul": [51, 53], "robust": [], "root": [], "rotat": [40, 52], "rout": [0, 2, 3, 4, 5, 16, 27, 29, 33, 38, 47], "row": [8, 34], "row_offset": 8, "rr": [39, 54], "rt_bend": [39, 54], "ru0": [33, 44], "ru1": [33, 44], "run": 18, "runfdtd": 18, "sa": [8, 30], "same": [4, 53], "sampl": [32, 33, 36, 53], "sample_build": 53, "sample_point": 18, "sample_step": [34, 46], "saveflag": 18, "sbend": [33, 39, 54], "sbend_p2p": [39, 54], "sbend_p2p_min": [39, 54], "sbend_rout": [39, 54], "sbend_typ": [33, 44], "scaffold": 33, "scalar": 34, "scale": [], "scheme": 34, "search": 3, "second": [3, 27, 33, 39, 54], "secondari": 27, "section": [2, 3, 4, 27, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "sector": 34, "sector_gc": [34, 46], "see": [], "segment": [32, 33, 34, 36, 53], "selector": 34, "self": [], "separ": 53, "sequenc": [32, 34, 36], "set": [33, 39, 53, 54], "setch": 34, "shape": [4, 32, 34, 39, 40, 46, 51, 52, 53, 54], "share": 53, "sharp": [2, 3, 31, 33, 37, 39, 41, 42, 44, 48, 49, 50, 51], "sharp_patch": [2, 3, 11, 15, 21, 31, 32, 33, 36, 37, 39, 41, 42, 44, 48, 49, 50, 51, 53, 54], "sharp_path": [39, 54], "shift": [3, 28, 39, 54], "shifter": [4, 28, 33], "shortest": [39, 54], "should": [], "show": [3, 4, 5], "show_pin": [3, 4, 5, 8, 11, 15, 23, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53], "showpin": [39, 54], "si": [18, 34], "side": [2, 4, 34], "sidelob": [39, 54], "sidewai": [39, 54], "sidewya": [39, 54], "silicon": [0, 18], "simpl": [5, 13], "simu_x": 18, "simubox": 18, "simudatafigureplot": 19, "simul": [16, 17, 34, 46], "simupath": 18, "sin": [27, 34], "sin_rib_wg": 27, "sine": [11, 15, 45, 52], "singl": [33, 34, 36, 53], "single_end": [33, 44], "sio2": 18, "size": [27, 34, 39, 54], "slab": [27, 34], "slab_width": 28, "small": [33, 53], "socr": 38, "socr_adiabat": 38, "socr_adiabatic_cband": 38, "socr_cband": 38, "soi": 27, "sourc": [], "sourcemod": 18, "sp_cont": 31, "sp_isl_met": 8, "sp_isl_wg": 8, "sp_sc": 30, "sp_via_i2m": 30, "sp_via_x": 8, "space": [4, 8, 30, 31, 32, 33, 34, 37, 39, 41, 42, 44, 46, 49, 50, 51, 53], "specif": [39, 54], "speed": 28, "sphinx": [], "spiral": [11, 16, 33, 35, 47], "spiral_cicle_mm": [35, 47], "spiral_cicle_std": [35, 47], "spiral_circl": [35, 47], "spiral_ord": 11, "spiral_rect_std": [35, 47], "spiral_rectangl": [35, 47], "spline": 32, "split": [5, 33, 44], "splitter": [2, 3, 4, 5, 33, 40, 52], "splittingtre": 7, "spot": 27, "spttree": [7, 16], "squar": 34, "stage": 3, "stand": 34, "standard": [4, 33, 36], "start": [15, 39, 54], "std": [31, 37, 39, 44, 46, 48, 49, 50, 51], "std_crow_v": 38, "std_pic_r": 47, "std_ring_amzi_adddrop": 38, "std_ring_pin": 29, "step": [33, 53], "stop": 15, "str": [2, 3, 4, 27, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "straight": [3, 4, 32, 33, 34, 39, 40, 53, 54], "strict_condit": [51, 53], "strip": [2, 3, 4, 11, 14, 15, 18, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "strip_cor": [30, 34, 46], "strip_tr": 52, "strong": 39, "strt": [39, 54], "strt_bend_strt_p2p": [39, 54], "strt_bend_strt_p2p_min": [39, 54], "strt_mm": [39, 54], "strt_mm_p2p": [39, 54], "strt_p2p": [39, 54], "strt_round_courn": 12, "structur": [3, 12, 15, 34, 46, 53], "stub": [3, 4, 5, 32, 33, 34, 36, 53], "style": [3, 53], "success": 53, "suffix": [], "sun": [], "suppli": [], "support": [34, 53], "suppr": 39, "swap": 4, "symbol": [39, 54], "symmetr": [32, 33, 39, 44, 54], "symmetri": [], "symmetric_bu": [33, 44], "sz": 8, "sz_bu": 37, "sz_ring": 37, "sz_via_i2m": 30, "szvia": 8, "t": [11, 18, 39, 54], "take": [39, 54], "taken": [39, 54], "taper": [3, 4, 27, 32, 33, 35, 36, 39, 47, 53, 54], "taper_length": [34, 46], "taper_p2p": [39, 54], "taper_xs2x": 47, "target": 33, "tdc": 44, "te": [20, 21], "teeth": 34, "teeth_numb": [34, 46], "templat": 24, "termin": [33, 34], "tessel": 53, "test": 28, "theta_arc": [33, 39, 44], "theta_ext": [33, 44], "theta_start": [8, 15], "theta_stop": [8, 15], "thi": [23, 27, 28, 30, 31, 33, 34, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 54], "thin_attach": 40, "third": 27, "three": [3, 33], "through": 23, "throughout": 53, "tilt": [27, 53], "tip": [27, 33], "toctre": [], "toler": [33, 44], "tooth": 34, "top": 27, "topologi": [4, 33], "total": [4, 32, 34], "tp_angl": [33, 44], "transit": [27, 33, 34, 36, 47, 53], "translat": [39, 54], "tree": 5, "trench": [3, 27, 31, 37, 39, 40], "triangl": 4, "triangular": 4, "true": [2, 3, 4, 8, 10, 11, 15, 18, 21, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 44, 46, 48, 49, 50, 51, 53, 54], "tube": [39, 54], "tube_min": [39, 54], "tunabl": 33, "tupl": [39, 53, 54], "tuple_to_complex": 19, "turn": 53, "two": [3, 5, 32, 33, 39, 54], "twod_grat": [], "type": [2, 3, 4, 5, 15, 30, 33, 34, 39, 46, 54], "type_tap": [34, 46], "u": [3, 39, 54], "ubend": [39, 54], "ubend_offset": 40, "ubend_p2p": [39, 54], "ubend_rout": [39, 54], "um": [39, 54], "umat_2x2_": 7, "uniform": 36, "uninstanti": [32, 34, 36], "uniqu": [27, 30, 31, 33, 34, 37, 39, 41, 42, 44, 45, 46, 48, 49, 50, 51, 52], "unit": [4, 35, 38, 46], "unit_mesh_2x2": 4, "univers": 4, "unless": [39, 54], "upper": [4, 33], "upper_isl": 40, "us": [2, 3, 4, 5, 12, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "util": 13, "v": 37, "valu": [5, 28, 30, 31, 34, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 54], "varnam": [28, 31, 39, 49, 54], "vector": [34, 46], "versatil": 34, "vertic": [3, 4, 32, 33, 34, 36, 53], "via": [3, 4, 9, 30, 31, 37, 39, 40, 49], "via_cel": 8, "via_h2m": [3, 4, 30, 31, 37, 39, 40, 49], "via_i2m": 31, "via_s2m": [8, 30], "vias_arc": 9, "visibl": [], "w": [4, 8, 11, 14, 32, 42, 43, 45, 52], "w0": [32, 33, 37, 42, 44, 49], "w0_rck": 49, "w0_ring": 39, "w1": [3, 32, 33, 37, 40, 42, 44, 49], "w1_bu": [37, 39, 49, 50], "w1_rck": 49, "w1_ring": 39, "w1_slab": 27, "w1_tp": 41, "w2": [3, 40], "w2_bu": [37, 39, 49, 50], "w2_tp": 41, "w_1": 52, "w_2": 52, "w_arm": [3, 4, 36, 48], "w_arm_min": 3, "w_bend_cent": [51, 53], "w_bend_port": [51, 53], "w_box": 27, "w_box_end": 27, "w_bu": [31, 33, 37, 39, 44, 49], "w_cp": [33, 39, 44], "w_dt": 27, "w_end": [11, 21, 22, 45], "w_grow_rib": 52, "w_grow_strip": 52, "w_gt": [34, 46], "w_heater": [3, 31, 37, 39, 40], "w_ht": [3, 4, 30, 49], "w_i": [30, 31], "w_in": [27, 33, 39, 44], "w_itr": 30, "w_m": 41, "w_metal": [3, 4, 31, 37, 39, 40], "w_metal_pn": 30, "w_mid_slab": 27, "w_mmi": [36, 48], "w_mt": [30, 49], "w_n": [30, 31], "w_n_ct": 30, "w_ncont": 31, "w_out": [33, 39, 44], "w_ovlp": 31, "w_p": [30, 31], "w_p_ct": 30, "w_pcont": 31, "w_plus_max": 28, "w_port": [30, 32, 34, 36, 40, 42, 48, 51, 53], "w_ram": 4, "w_rck": 49, "w_rib": 52, "w_ring": [31, 37, 39, 50], "w_slab": 28, "w_teeth_si": 34, "w_teeth_sin": 34, "w_term": 50, "w_tip_cor": 27, "w_tip_slab": 27, "w_tran": [33, 44], "w_waveguid": 7, "w_wg": [2, 3, 4, 23, 25, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 44, 46, 48, 49, 50], "w_wg_slab": 28, "wa": [15, 37], "wa0": [33, 44], "wa1": [33, 44], "wai": [], "waveguid": [2, 3, 4, 27, 30, 32, 33, 34, 36, 37, 38, 39, 53, 54], "waveguide1": [], "waveguide2": [], "waveguide_pin": 29, "wavelength": [], "wb": [15, 37], "wb0": [33, 44], "wb1": [33, 44], "wb_in": [33, 44], "wb_out": [33, 44], "wd0": [33, 44], "wd1": [33, 44], "wd_in": [33, 44], "wd_out": [33, 44], "wdm": 40, "welcom": 0, "wg": 44, "wg_ltp": [33, 44], "wgdope": 29, "when": [4, 5, 32, 33, 34, 36, 39, 53, 54], "where": [39, 54], "whether": [28, 30, 31, 33, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52], "which": [39, 54], "wideband": 23, "width": [2, 3, 4, 8, 10, 13, 15, 18, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "width1": [34, 39, 46, 54], "width2": [34, 39, 46, 54], "width2_mm": [39, 54], "width_mm": [39, 54], "width_typ": [11, 15, 37], "with_txt": 10, "within": [36, 53], "wl": 18, "wmin_bend": [51, 53], "wrapper": [3, 4, 33, 36, 46], "write": 18, "written": [], "wu0": [33, 44], "wu1": [33, 44], "wu_in": [33, 44], "wu_out": [33, 44], "x": [8, 10, 11, 14, 15, 18, 28, 30, 31, 32, 33, 34, 36, 39, 40, 41, 42, 43, 44, 45, 48, 49, 50, 51, 52, 53, 54], "x_space": 8, "xout_offset": [36, 48], "xs2x": 52, "xs_1": 52, "xs_2": 52, "xs_cont_wg": [30, 31], "xs_heater": [3, 4, 30, 31, 37, 39, 40], "xs_ht": [3, 30, 49], "xs_l1": 8, "xs_l2": 8, "xs_metal": [3, 4, 30, 31, 37, 39, 40], "xs_metal_imp": 31, "xs_mt": [30, 49], "xs_n": [30, 31], "xs_ncont": [30, 31], "xs_open": [34, 46], "xs_p": [30, 31], "xs_pad": 8, "xs_pcont": [30, 31], "xs_pn_ct": 30, "xs_port": 30, "xs_ring": [31, 37, 39], "xs_sa": 30, "xs_sin": 27, "xs_trench": 27, "xs_via_h2m": 30, "xs_via_s2m": 30, "xs_wg": [2, 3, 4, 30, 33, 34, 37, 39, 40, 44, 46], "xsection": [39, 54], "xya": 10, "y": [5, 18, 32, 34, 39, 54], "y_cut": 15, "y_space": 8, "yb": [35, 47], "ybranch": [5, 35, 47], "ybranch_3wg": [35, 47], "ybranch_t": 24, "you": [], "your": [], "z": 18, "zehnder": [3, 4, 28], "\u00b5m": [32, 34, 36, 53], "\u03c0": 53}, "titles": ["mxPIC Handbook", "mxpic.components.basic", "mxpic.components.composites.LoopMirror", "mxpic.components.composites.MZI", "mxpic.components.composites.MZI_mesh", "mxpic.components.composites.SptTree", "mxpic.components.composites.advance", "Composites", "mxpic.components.electronics.eic_units", "Electronics", "mxpic.components.gds_devices", "mxpic.components.geometry.curves", "Geometry", "mxpic.components.geometry.polygons", "mxpic.components.geometry.racetrack", "mxpic.components.geometry.rings", "Components", "Others", "mxpic.components.others.simulation.DualPortElements", "Simulation", "mxpic.components.pdks.AMF_pdk", "mxpic.components.pdks.CUMEC_pdk", "mxpic.components.pdks.IMECAS_pdk", "mxpic.components.pdks.hgl_pdk_A", "Pdks", "mxpic.components.pdks.qy_pdk_A", "mxpic.components.pins", "mxpic.components.primitives.EC_dual_layer_px3", "mxpic.components.primitives.active.dev_ps", "Active", "mxpic.components.primitives.active.pin_wg", "mxpic.components.primitives.active.rings", "mxpic.components.primitives.beam_splitters", "mxpic.components.primitives.directional_couplers", "mxpic.components.primitives.grating_couplers", "Primitives", "mxpic.components.primitives.multimode_interferometers", "mxpic.components.primitives.passive.crows", "Passive", "mxpic.components.primitives.passive.rings", "mxpic.components.primitives.passive.unit", "mxpic.components.primitives.pic.PBS", "mxpic.components.primitives.pic.YBS", "mxpic.components.primitives.pic.bragg", "mxpic.components.primitives.pic.couplers", "mxpic.components.primitives.pic.cross", "mxpic.components.primitives.pic.gratings", "Pic", "mxpic.components.primitives.pic.mmi", "mxpic.components.primitives.pic.racetrack", "mxpic.components.primitives.pic.rings", "mxpic.components.primitives.pic.spiral", "mxpic.components.primitives.pic.taper", "mxpic.components.primitives.spiral", "mxpic.components.routing"], "titleterms": {"activ": [28, 29, 30, 31], "adc_std_2x2": [33, 44], "advanc": 6, "aed_r": 50, "aed_ring_pin": 31, "amf_pdk": 20, "amzi_w": 4, "autom": [], "basic": 1, "beam_splitt": 32, "brag_wdm": 40, "bragg": 43, "bragg_apod": 43, "bs_tdc": [33, 44], "circl": 15, "clothoid": 11, "compon": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 14, 15, 16, 18, 20, 21, 22, 23, 25, 26, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "composit": [2, 3, 4, 5, 6, 7], "conchoid": 11, "coupler": 44, "cross": 45, "cross_sin": 45, "crow": 37, "crow_a": 37, "crow_circular_r": 37, "crow_eul_r": 37, "crow_eul_rck": 37, "crow_std_adddrop": 37, "crow_std_allpass": 37, "crx_te_1310": 22, "crx_te_1550": [21, 22], "cumec_pdk": 21, "curv": 11, "dc": [33, 44], "dc_bend": [33, 44], "dc_bend_20_80_cband": 23, "dc_bend_4_96_cband": 23, "dc_bend_50_50_cband": 23, "dc_px3_50_50_cband": 25, "dc_px_3sg": [33, 44], "dc_te_1550": 22, "dev_p": 28, "device_2x2_fdtd_init": 18, "device_coupl": 18, "device_port": 18, "device_ring_bu": 18, "directional_coupl": 33, "document": [], "dualportel": 18, "ec_1550": 21, "ec_dual_layer_px3": 27, "ec_te_1550": 22, "eic_unit": 8, "electron": [8, 9], "elips": 15, "elipse_du": 15, "euler_crow_bu": 18, "euler_crow_inter_cp": 18, "fa": [34, 46], "gc_sin_si_dual_lay": 34, "gc_std_1d": [34, 46], "gc_std_2d": [34, 46], "gc_te_1310": [20, 21, 22], "gc_te_1550": [20, 21, 22], "gc_tm_1310": 22, "gc_tm_1550": [21, 22], "gds_devic": 10, "gds_lib_load": 10, "generate_gds_lib": 10, "geometri": [11, 12, 13, 14, 15], "gpd_1550": 21, "grate": 46, "grating_2d_hol": [34, 46], "grating_2d_hole_3rec": 46, "grating_2d_hole_4rec": 46, "grating_coupl": 34, "handbook": 0, "heater_ndop": 28, "hgl_pdk_a": 23, "hole": 15, "ic_except": 54, "imecas_pdk": 22, "isl": 8, "librari": [], "loopmirror": 2, "mdm": [33, 44], "mdm_adc_te1_1550": 25, "mdm_adc_te2_1550": 25, "mdm_adc_te3_1550": 25, "mmg_1d_d14um_1550_2mod": 25, "mmi": 48, "mmi_1x2_te_1310": [21, 22], "mmi_1x2_te_1550": [21, 22], "mmi_2x2_te_1310": 22, "mmi_2x2_te_1550": [21, 22], "mmi_ml": [36, 48], "mmi_std": [36, 48], "monitorpara": 18, "mrr_a": 39, "mrr_dw_adddrop": 39, "mrr_dw_allpass": 39, "mrr_mm_adddrop": 39, "mrr_mm_allpass": 39, "mrr_std_adddrop": 39, "mrr_std_allpass": 39, "mrr_std_ring": 39, "multimode_interferomet": 36, "mx_bend": 15, "mxpic": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 14, 15, 18, 20, 21, 22, 23, 25, 26, 27, 28, 30, 31, 32, 33, 34, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54], "mzi": 3, "mzi_2st_ubend": 3, "mzi_butterfli": 3, "mzi_eubend": 3, "mzi_mesh": 4, "mzi_mesh_parl": 4, "mzi_mesh_tri": 4, "mzi_mesh_u": 4, "mzi_n": 3, "mzi_ns_ubend": 3, "mzi_ubend": 3, "nano_": [34, 46], "other": [17, 18], "pad": 8, "pad_60_80": 21, "passiv": [37, 38, 39, 40], "pb": 41, "pbs_1550": 21, "pbs_3wg": 41, "pd_cband_cel": 20, "pdk": [20, 21, 22, 23, 24, 25], "photon": [], "pic": [41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52], "pin": 26, "pin_mrr_mm_adddrop": 31, "pin_mrr_mm_allpass": 31, "pin_mrr_std_allpass": 31, "pin_wg": 30, "polygon": 13, "portpara": 18, "primit": [27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 48, 49, 50, 51, 52, 53], "ps_2st": 40, "ps_2st_straight": 40, "ps_pin": 28, "psr": 52, "psr_1x2": 40, "qy_pdk_a": 25, "racetrack": [14, 49], "racetrack_mm_adddrop": 49, "racetrack_mm_allpass": 49, "racetrack_std_allpass": 49, "racetrackreson": 49, "reson": 18, "ring": [15, 31, 39, 50], "ring_bus_wg": [33, 44], "ring_phas": 18, "rout": [28, 31, 39, 49, 54], "silicon": [], "simudatafigureplot": 18, "simul": [18, 19], "socr": 39, "socr_adiabat": 39, "socr_adiabatic_cband": 39, "socr_cband": 39, "spiral": [51, 53], "spiral_cicle_mm": [51, 53], "spiral_cicle_std": [51, 53], "spiral_circl": [51, 53], "spiral_rect_std": [51, 53], "spiral_rectangl": [51, 53], "splittingtre": 5, "spttree": 5, "std_crow_v": 37, "std_pic_r": 50, "std_ring_amzi_adddrop": 39, "std_ring_pin": 31, "strt_round_courn": 13, "structur": [], "taper": [34, 46, 52], "taper_xs2x": 52, "templat": 22, "transit": 52, "tuple_to_complex": 18, "umat_2x2_": 4, "unit": 40, "via": 8, "vias_arc": 8, "w_waveguid": 4, "waveguid": 40, "waveguide_pin": 30, "welcom": [], "wgdope": 30, "yb": 42, "ybranch": [32, 42], "ybranch_3wg": [32, 42], "ybranch_t": 22}}) \ No newline at end of file +Search.setIndex({"alltitles": {"ADC_STD_2x2": [[35, "adc-std-2x2"]], "AED_Ring_PIN": [[25, "aed-ring-pin"]], "AED_ring": [[41, "aed-ring"]], "AMZI_W": [[4, "amzi-w"]], "Active": [[23, null]], "BS_tdc": [[35, "bs-tdc"]], "Brag_WDM": [[31, "brag-wdm"]], "Bragg": [[34, "bragg"]], "Bragg_apodized": [[34, "bragg-apodized"]], "CROW_AED": [[28, "crow-aed"]], "CROW_Circular_ring": [[28, "crow-circular-ring"]], "CROW_Eul_RCK": [[28, "crow-eul-rck"]], "CROW_Eul_Ring": [[28, "crow-eul-ring"]], "CROW_STD_Adddrop": [[28, "crow-std-adddrop"]], "CROW_STD_Allpass": [[28, "crow-std-allpass"]], "Clothoid": [[11, "clothoid"]], "Components": [[16, null]], "Components:": [[0, null]], "Composites": [[7, null]], "Conchoid": [[11, "conchoid"]], "Cross": [[36, "cross"]], "Cross_Sine": [[36, "cross-sine"]], "DC": [[35, "dc"]], "DC_bend": [[35, "dc-bend"]], "DC_pX_3sg": [[35, "dc-px-3sg"]], "DEVICE_2X2_FDTD_INIT": [[18, "device-2x2-fdtd-init"]], "DEVICE_COUPLER": [[18, "device-coupler"]], "DEVICE_PORTS": [[18, "device-ports"]], "DEVICE_RING_BUS": [[18, "device-ring-bus"]], "EC_dual_layer_px3": [[21, "ec-dual-layer-px3"]], "EULER_CROW_BUS": [[18, "euler-crow-bus"]], "EULER_CROW_INTER_CP": [[18, "euler-crow-inter-cp"]], "Electronics": [[9, null]], "Elipse": [[15, "elipse"]], "Elipse_dual": [[15, "elipse-dual"]], "FA": [[37, "fa"]], "GC_STD_1D": [[37, "gc-std-1d"]], "GC_STD_2D": [[37, "gc-std-2d"]], "GC_SiN_Si_Dual_Layer": [[26, "gc-sin-si-dual-layer"]], "Geometry": [[12, null]], "Grating_2D_Hole": [[37, "grating-2d-hole"]], "Grating_2D_Hole_3Rec": [[37, "grating-2d-hole-3rec"]], "Grating_2D_Hole_4Rec": [[37, "grating-2d-hole-4rec"]], "Heater_NDoped": [[22, "heater-ndoped"]], "ISL": [[8, "isl"]], "LoopMirror": [[2, "loopmirror"]], "MDM": [[35, "mdm"]], "MMI_ML": [[39, "mmi-ml"]], "MMI_STD": [[39, "mmi-std"]], "MRR_AED": [[30, "mrr-aed"]], "MRR_DW_Adddrop": [[30, "mrr-dw-adddrop"]], "MRR_DW_Allpass": [[30, "mrr-dw-allpass"]], "MRR_MM_Adddrop": [[30, "mrr-mm-adddrop"]], "MRR_MM_Allpass": [[30, "mrr-mm-allpass"]], "MRR_STD_Adddrop": [[30, "mrr-std-adddrop"]], "MRR_STD_Allpass": [[30, "mrr-std-allpass"]], "MRR_STD_Ring": [[30, "mrr-std-ring"]], "MZI": [[3, "mzi"]], "MZI_2st_ubend": [[3, "mzi-2st-ubend"]], "MZI_Butterfly": [[3, "mzi-butterfly"]], "MZI_Eubend": [[3, "mzi-eubend"]], "MZI_NS": [[3, "mzi-ns"]], "MZI_NS_ubend": [[3, "mzi-ns-ubend"]], "MZI_Ubend": [[3, "mzi-ubend"]], "MZI_mesh_Parl": [[4, "mzi-mesh-parl"]], "MZI_mesh_Tri": [[4, "mzi-mesh-tri"]], "MZI_mesh_U": [[4, "mzi-mesh-u"]], "MonitorParas": [[18, "monitorparas"]], "Nano_ant": [[37, "nano-ant"]], "Others": [[17, null]], "PAD": [[8, "pad"]], "PADs": [[8, "pads"]], "PBS_3wg": [[32, "pbs-3wg"]], "PIN_MRR_MM_Adddrop": [[25, "pin-mrr-mm-adddrop"]], "PIN_MRR_MM_Allpass": [[25, "pin-mrr-mm-allpass"]], "PIN_MRR_STD_Allpass": [[25, "pin-mrr-std-allpass"]], "PSR": [[43, "psr"]], "PSR_1x2": [[31, "psr-1x2"]], "PS_2st": [[31, "ps-2st"]], "PS_2st_Straight": [[31, "ps-2st-straight"]], "PS_PIN": [[22, "ps-pin"]], "Passive": [[29, null]], "Pic": [[38, null]], "PortParas": [[18, "portparas"]], "Primitives": [[27, null]], "RESONATOR": [[18, "resonator"]], "RING_PHASE": [[18, "ring-phase"]], "Racetrack": [[14, "racetrack"]], "RacetrackResonator": [[40, "racetrackresonator"]], "Racetrack_MM_Adddrop": [[40, "racetrack-mm-adddrop"]], "Racetrack_MM_Allpass": [[40, "racetrack-mm-allpass"]], "Racetrack_STD_Allpass": [[40, "racetrack-std-allpass"]], "Route": [[22, "route"], [25, "route"], [30, "route"], [40, "route"], [44, "route"]], "SOCR": [[30, "socr"]], "SOCR_Adiabatic": [[30, "socr-adiabatic"]], "SOCR_Adiabatic_Cband": [[30, "socr-adiabatic-cband"]], "SOCR_Cband": [[30, "socr-cband"]], "STD_CROW_V": [[28, "std-crow-v"]], "STD_PIC_Rings": [[41, "std-pic-rings"]], "STD_Ring_PIN": [[25, "std-ring-pin"]], "STD_ring_AMZI_adddrop": [[30, "std-ring-amzi-adddrop"]], "SimuDataFigurePlot": [[18, "simudatafigureplot"]], "Simulation": [[19, null]], "Spiral_Cicle_MM": [[42, "spiral-cicle-mm"]], "Spiral_Cicle_STD": [[42, "spiral-cicle-std"]], "Spiral_Rect_STD": [[42, "spiral-rect-std"]], "SplittingTree": [[5, "splittingtree"]], "Taper": [[37, "taper"]], "UMat_2x2_S": [[4, "umat-2x2-s"]], "Vias": [[8, "vias"]], "Vias_arc": [[8, "vias-arc"]], "WGDoped": [[24, "wgdoped"]], "W_waveguide": [[4, "w-waveguide"]], "YBranch": [[33, "ybranch"]], "Ybranch_3wg": [[33, "ybranch-3wg"]], "circle": [[15, "circle"]], "gds_lib_load": [[10, "gds-lib-load"]], "generate_gds_lib": [[10, "generate-gds-lib"]], "hole": [[15, "hole"]], "ic_exception": [[44, "ic-exception"]], "mxPIC Handbook": [[0, null]], "mx_bend": [[15, "mx-bend"]], "mxpic.components.basic": [[1, null]], "mxpic.components.composites.LoopMirror": [[2, null]], "mxpic.components.composites.MZI": [[3, null]], "mxpic.components.composites.MZI_mesh": [[4, null]], "mxpic.components.composites.SptTree": [[5, null]], "mxpic.components.composites.advance": [[6, null]], "mxpic.components.electronics.eic_units": [[8, null]], "mxpic.components.gds_devices": [[10, null]], "mxpic.components.geometry.curves": [[11, null]], "mxpic.components.geometry.polygons": [[13, null]], "mxpic.components.geometry.racetrack": [[14, null]], "mxpic.components.geometry.rings": [[15, null]], "mxpic.components.others.simulation.DualPortElements": [[18, null]], "mxpic.components.pins": [[20, null]], "mxpic.components.primitives.EC_dual_layer_px3": [[21, null]], "mxpic.components.primitives.active.dev_ps": [[22, null]], "mxpic.components.primitives.active.pin_wg": [[24, null]], "mxpic.components.primitives.active.rings": [[25, null]], "mxpic.components.primitives.grating_couplers": [[26, null]], "mxpic.components.primitives.passive.crows": [[28, null]], "mxpic.components.primitives.passive.rings": [[30, null]], "mxpic.components.primitives.passive.unit": [[31, null]], "mxpic.components.primitives.pic.PBS": [[32, null]], "mxpic.components.primitives.pic.YBS": [[33, null]], "mxpic.components.primitives.pic.bragg": [[34, null]], "mxpic.components.primitives.pic.couplers": [[35, null]], "mxpic.components.primitives.pic.cross": [[36, null]], "mxpic.components.primitives.pic.gratings": [[37, null]], "mxpic.components.primitives.pic.mmi": [[39, null]], "mxpic.components.primitives.pic.racetrack": [[40, null]], "mxpic.components.primitives.pic.rings": [[41, null]], "mxpic.components.primitives.pic.spiral": [[42, null]], "mxpic.components.primitives.pic.taper": [[43, null]], "mxpic.components.routing": [[44, null]], "ring_bus_wg": [[35, "ring-bus-wg"]], "spiral": [[42, "spiral"]], "spiral_circle": [[42, "spiral-circle"]], "spiral_rectangle": [[42, "spiral-rectangle"]], "strt_round_courner": [[13, "strt-round-courner"]], "taper_xs2xs": [[43, "taper-xs2xs"]], "transition": [[43, "transition"]], "tuple_to_complex": [[18, "tuple-to-complex"]], "waveguide": [[31, "waveguide"]], "waveguide_PIN": [[24, "waveguide-pin"]]}, "docnames": ["index", "mxpic/components/basic", "mxpic/components/composites/LoopMirror", "mxpic/components/composites/MZI", "mxpic/components/composites/MZI_mesh", "mxpic/components/composites/SptTree", "mxpic/components/composites/advance", "mxpic/components/composites/index", "mxpic/components/electronics/eic_units", "mxpic/components/electronics/index", "mxpic/components/gds_devices", "mxpic/components/geometry/curves", "mxpic/components/geometry/index", "mxpic/components/geometry/polygons", "mxpic/components/geometry/racetrack", "mxpic/components/geometry/rings", "mxpic/components/index", "mxpic/components/others/index", "mxpic/components/others/simulation/DualPortElements", "mxpic/components/others/simulation/index", "mxpic/components/pins", "mxpic/components/primitives/EC_dual_layer_px3", "mxpic/components/primitives/active/dev_ps", "mxpic/components/primitives/active/index", "mxpic/components/primitives/active/pin_wg", "mxpic/components/primitives/active/rings", "mxpic/components/primitives/grating_couplers", "mxpic/components/primitives/index", "mxpic/components/primitives/passive/crows", "mxpic/components/primitives/passive/index", "mxpic/components/primitives/passive/rings", "mxpic/components/primitives/passive/unit", "mxpic/components/primitives/pic/PBS", "mxpic/components/primitives/pic/YBS", "mxpic/components/primitives/pic/bragg", "mxpic/components/primitives/pic/couplers", "mxpic/components/primitives/pic/cross", "mxpic/components/primitives/pic/gratings", "mxpic/components/primitives/pic/index", "mxpic/components/primitives/pic/mmi", "mxpic/components/primitives/pic/racetrack", "mxpic/components/primitives/pic/rings", "mxpic/components/primitives/pic/spiral", "mxpic/components/primitives/pic/taper", "mxpic/components/routing"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["index.md", "mxpic/components/basic.md", "mxpic/components/composites/LoopMirror.md", "mxpic/components/composites/MZI.md", "mxpic/components/composites/MZI_mesh.md", "mxpic/components/composites/SptTree.md", "mxpic/components/composites/advance.md", "mxpic/components/composites/index.md", "mxpic/components/electronics/eic_units.md", "mxpic/components/electronics/index.md", "mxpic/components/gds_devices.md", "mxpic/components/geometry/curves.md", "mxpic/components/geometry/index.md", "mxpic/components/geometry/polygons.md", "mxpic/components/geometry/racetrack.md", "mxpic/components/geometry/rings.md", "mxpic/components/index.md", "mxpic/components/others/index.md", "mxpic/components/others/simulation/DualPortElements.md", "mxpic/components/others/simulation/index.md", "mxpic/components/pins.md", "mxpic/components/primitives/EC_dual_layer_px3.md", "mxpic/components/primitives/active/dev_ps.md", "mxpic/components/primitives/active/index.md", "mxpic/components/primitives/active/pin_wg.md", "mxpic/components/primitives/active/rings.md", "mxpic/components/primitives/grating_couplers.md", "mxpic/components/primitives/index.md", "mxpic/components/primitives/passive/crows.md", "mxpic/components/primitives/passive/index.md", "mxpic/components/primitives/passive/rings.md", "mxpic/components/primitives/passive/unit.md", "mxpic/components/primitives/pic/PBS.md", "mxpic/components/primitives/pic/YBS.md", "mxpic/components/primitives/pic/bragg.md", "mxpic/components/primitives/pic/couplers.md", "mxpic/components/primitives/pic/cross.md", "mxpic/components/primitives/pic/gratings.md", "mxpic/components/primitives/pic/index.md", "mxpic/components/primitives/pic/mmi.md", "mxpic/components/primitives/pic/racetrack.md", "mxpic/components/primitives/pic/rings.md", "mxpic/components/primitives/pic/spiral.md", "mxpic/components/primitives/pic/taper.md", "mxpic/components/routing.md"], "indexentries": {"a_ht (mxpic.components.primitives.passive.crows.std_crow_v attribute)": [[28, "mxpic.components.primitives.passive.crows.STD_CROW_V.A_ht", false]], "adc_std_2x2 (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2", false]], "add_pin() (mxpic.components.gds_devices.gds_lib_load method)": [[10, "mxpic.components.gds_devices.gds_lib_load.add_pin", false]], "aed_ring (class in mxpic.components.primitives.pic.rings)": [[41, "mxpic.components.primitives.pic.rings.AED_ring", false]], "aed_ring_pin (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.AED_Ring_PIN", false]], "amzi_w (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W", false]], "bend_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_mine", false]], "bend_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_mine", false]], "bend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_p2p", false]], "bend_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_p2p", false]], "bend_route() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_route", false]], "bend_route() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_route", false]], "bend_route_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_route_p2p", false]], "bend_route_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_route_p2p", false]], "bend_strt_bend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_strt_bend_p2p", false]], "bend_strt_bend_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_strt_bend_p2p", false]], "bend_strt_bend_p2p_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.bend_strt_bend_p2p_mine", false]], "bend_strt_bend_p2p_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.bend_strt_bend_p2p_mine", false]], "brag_wdm (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.Brag_WDM", false]], "bragg (class in mxpic.components.primitives.pic.bragg)": [[34, "mxpic.components.primitives.pic.bragg.Bragg", false]], "bragg_apodized (class in mxpic.components.primitives.pic.bragg)": [[34, "mxpic.components.primitives.pic.bragg.Bragg_apodized", false]], "bs_tdc (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.BS_tdc", false]], "cell (mxpic.components.composites.loopmirror.loopmirror attribute)": [[2, "mxpic.components.composites.LoopMirror.LoopMirror.cell", false]], "cell (mxpic.components.composites.mzi.mzi attribute)": [[3, "mxpic.components.composites.MZI.MZI.cell", false]], "cell (mxpic.components.composites.mzi.mzi_2st_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_2st_ubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_butterfly attribute)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.cell", false]], "cell (mxpic.components.composites.mzi.mzi_eubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_Eubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ns attribute)": [[3, "mxpic.components.composites.MZI.MZI_NS.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ns_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_NS_ubend.cell", false]], "cell (mxpic.components.composites.mzi.mzi_ubend attribute)": [[3, "mxpic.components.composites.MZI.MZI_Ubend.cell", false]], "cell (mxpic.components.composites.mzi_mesh.amzi_w attribute)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_parl attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_tri attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri.cell", false]], "cell (mxpic.components.composites.mzi_mesh.mzi_mesh_u attribute)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U.cell", false]], "cell (mxpic.components.composites.mzi_mesh.umat_2x2_s attribute)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S.cell", false]], "cell (mxpic.components.composites.mzi_mesh.w_waveguide attribute)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide.cell", false]], "cell (mxpic.components.composites.spttree.splittingtree attribute)": [[5, "mxpic.components.composites.SptTree.SplittingTree.cell", false]], "cell (mxpic.components.primitives.active.dev_ps.ps_pin attribute)": [[22, "mxpic.components.primitives.active.dev_ps.PS_PIN.cell", false]], "cell (mxpic.components.primitives.pic.spiral.spiral_circle attribute)": [[42, "mxpic.components.primitives.pic.spiral.spiral_circle.cell", false]], "circle (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.circle", false]], "clothoid (class in mxpic.components.geometry.curves)": [[11, "mxpic.components.geometry.curves.Clothoid", false]], "conchoid (class in mxpic.components.geometry.curves)": [[11, "mxpic.components.geometry.curves.Conchoid", false]], "connpatch() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.connPatch", false]], "connpatch() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.connPatch", false]], "cross (class in mxpic.components.primitives.pic.cross)": [[36, "mxpic.components.primitives.pic.cross.Cross", false]], "cross_sine (class in mxpic.components.primitives.pic.cross)": [[36, "mxpic.components.primitives.pic.cross.Cross_Sine", false]], "crow_aed (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_AED", false]], "crow_circular_ring (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_Circular_ring", false]], "crow_eul_rck (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_Eul_RCK", false]], "crow_eul_ring (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_Eul_Ring", false]], "crow_std_adddrop (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_STD_Adddrop", false]], "crow_std_allpass (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.CROW_STD_Allpass", false]], "dc (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.DC", false]], "dc_bend (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.DC_bend", false]], "dc_px_3sg (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.DC_pX_3sg", false]], "device_2x2_fdtd_init() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_2X2_FDTD_INIT", false]], "device_coupler (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_COUPLER", false]], "device_ports (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS", false]], "device_ring_bus (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_RING_BUS", false]], "ec_dual_layer_px3 (class in mxpic.components.primitives.ec_dual_layer_px3)": [[21, "mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3", false]], "elipse (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.Elipse", false]], "elipse_dual (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.Elipse_dual", false]], "euler_crow_bus (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.EULER_CROW_BUS", false]], "euler_crow_inter_cp (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.EULER_CROW_INTER_CP", false]], "fa (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.FA", false]], "folderpath (mxpic.components.others.simulation.dualportelements.device_ports attribute)": [[18, "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS.FolderPath", false]], "gc_sin_si_dual_layer (class in mxpic.components.primitives.grating_couplers)": [[26, "mxpic.components.primitives.grating_couplers.GC_SiN_Si_Dual_Layer", false]], "gc_std_1d (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_1D", false]], "gc_std_2d (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_2D", false]], "gds_lib_load (class in mxpic.components.gds_devices)": [[10, "mxpic.components.gds_devices.gds_lib_load", false]], "generate_2pi_gds() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_2pi_gds", false]], "generate_eic_gds() (mxpic.components.primitives.passive.crows.std_crow_v method)": [[28, "mxpic.components.primitives.passive.crows.STD_CROW_V.generate_eic_gds", false]], "generate_eic_gds() (mxpic.components.primitives.passive.rings.mrr_aed method)": [[30, "mxpic.components.primitives.passive.rings.MRR_AED.generate_eic_gds", false]], "generate_eic_gds() (mxpic.components.primitives.pic.racetrack.racetrack_std_allpass method)": [[40, "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass.generate_eic_gds", false]], "generate_eic_part() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_eic_part", false]], "generate_eic_part() (mxpic.components.primitives.passive.rings.socr_adiabatic method)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic.generate_eic_part", false]], "generate_err() (mxpic.components.primitives.pic.couplers.adc_std_2x2 method)": [[35, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2.generate_err", false]], "generate_gds() (mxpic.components.composites.mzi.mzi_butterfly method)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.amzi_w method)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.mzi_mesh_u method)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.umat_2x2_s method)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S.generate_gds", false]], "generate_gds() (mxpic.components.composites.mzi_mesh.w_waveguide method)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide.generate_gds", false]], "generate_gds() (mxpic.components.composites.spttree.splittingtree method)": [[5, "mxpic.components.composites.SptTree.SplittingTree.generate_gds", false]], "generate_gds() (mxpic.components.electronics.eic_units.pad method)": [[8, "mxpic.components.electronics.eic_units.PAD.generate_gds", false]], "generate_gds() (mxpic.components.electronics.eic_units.pads method)": [[8, "mxpic.components.electronics.eic_units.PADs.generate_gds", false]], "generate_gds() (mxpic.components.electronics.eic_units.vias method)": [[8, "mxpic.components.electronics.eic_units.Vias.generate_gds", false]], "generate_gds() (mxpic.components.geometry.curves.clothoid method)": [[11, "mxpic.components.geometry.curves.Clothoid.generate_gds", false]], "generate_gds() (mxpic.components.geometry.racetrack.racetrack method)": [[14, "mxpic.components.geometry.racetrack.Racetrack.generate_gds", false]], "generate_gds() (mxpic.components.geometry.rings.elipse method)": [[15, "mxpic.components.geometry.rings.Elipse.generate_gds", false]], "generate_gds() (mxpic.components.geometry.rings.elipse_dual method)": [[15, "mxpic.components.geometry.rings.Elipse_dual.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.dev_ps.heater_ndoped method)": [[22, "mxpic.components.primitives.active.dev_ps.Heater_NDoped.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.dev_ps.ps_pin method)": [[22, "mxpic.components.primitives.active.dev_ps.PS_PIN.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.pin_wg.waveguide_pin method)": [[24, "mxpic.components.primitives.active.pin_wg.waveguide_PIN.generate_gds", false]], "generate_gds() (mxpic.components.primitives.active.pin_wg.wgdoped method)": [[24, "mxpic.components.primitives.active.pin_wg.WGDoped.generate_gds", false]], "generate_gds() (mxpic.components.primitives.ec_dual_layer_px3.ec_dual_layer_px3 method)": [[21, "mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3.generate_gds", false]], "generate_gds() (mxpic.components.primitives.grating_couplers.gc_sin_si_dual_layer method)": [[26, "mxpic.components.primitives.grating_couplers.GC_SiN_Si_Dual_Layer.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.rings.socr_adiabatic method)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.rings.std_ring_amzi_adddrop method)": [[30, "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.unit.ps_2st method)": [[31, "mxpic.components.primitives.passive.unit.PS_2st.generate_gds", false]], "generate_gds() (mxpic.components.primitives.passive.unit.ps_2st_straight method)": [[31, "mxpic.components.primitives.passive.unit.PS_2st_Straight.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.adc_std_2x2 method)": [[35, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.dc_bend method)": [[35, "mxpic.components.primitives.pic.couplers.DC_bend.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.dc_px_3sg method)": [[35, "mxpic.components.primitives.pic.couplers.DC_pX_3sg.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.couplers.ring_bus_wg method)": [[35, "mxpic.components.primitives.pic.couplers.ring_bus_wg.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.cross.cross method)": [[36, "mxpic.components.primitives.pic.cross.Cross.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.grating_2d_hole method)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.grating_2d_hole_3rec method)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.grating_2d_hole_4rec method)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.nano_ant method)": [[37, "mxpic.components.primitives.pic.gratings.Nano_ant.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.gratings.taper method)": [[37, "mxpic.components.primitives.pic.gratings.Taper.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.mmi.mmi_ml method)": [[39, "mxpic.components.primitives.pic.mmi.MMI_ML.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.pbs.pbs_3wg method)": [[32, "mxpic.components.primitives.pic.PBS.PBS_3wg.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.racetrack.racetrackresonator method)": [[40, "mxpic.components.primitives.pic.racetrack.RacetrackResonator.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral method)": [[42, "mxpic.components.primitives.pic.spiral.spiral.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral_circle method)": [[42, "mxpic.components.primitives.pic.spiral.spiral_circle.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.spiral.spiral_rectangle method)": [[42, "mxpic.components.primitives.pic.spiral.spiral_rectangle.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.ybs.ybranch method)": [[33, "mxpic.components.primitives.pic.YBS.YBranch.generate_gds", false]], "generate_gds() (mxpic.components.primitives.pic.ybs.ybranch_3wg method)": [[33, "mxpic.components.primitives.pic.YBS.Ybranch_3wg.generate_gds", false]], "generate_gds_error() (mxpic.components.primitives.pic.gratings.nano_ant method)": [[37, "mxpic.components.primitives.pic.gratings.Nano_ant.generate_gds_error", false]], "generate_gds_lib() (in module mxpic.components.gds_devices)": [[10, "mxpic.components.gds_devices.generate_gds_lib", false]], "generate_gds_positive() (mxpic.components.primitives.pic.gratings.nano_ant method)": [[37, "mxpic.components.primitives.pic.gratings.Nano_ant.generate_gds_positive", false]], "generate_imp_gds() (mxpic.components.primitives.active.rings.aed_ring_pin method)": [[25, "mxpic.components.primitives.active.rings.AED_Ring_PIN.generate_imp_gds", false]], "generate_mzi_gds() (mxpic.components.primitives.active.dev_ps.ps_pin method)": [[22, "mxpic.components.primitives.active.dev_ps.PS_PIN.generate_mzi_gds", false]], "generate_negative() (mxpic.components.primitives.pic.bragg.bragg_apodized method)": [[34, "mxpic.components.primitives.pic.bragg.Bragg_apodized.generate_negative", false]], "generate_negative() (mxpic.components.primitives.pic.gratings.gc_std_1d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_1D.generate_negative", false]], "generate_negative() (mxpic.components.primitives.pic.gratings.gc_std_2d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_2D.generate_negative", false]], "generate_pic_gds() (mxpic.components.primitives.passive.crows.std_crow_v method)": [[28, "mxpic.components.primitives.passive.crows.STD_CROW_V.generate_pic_gds", false]], "generate_pic_gds() (mxpic.components.primitives.pic.rings.aed_ring method)": [[41, "mxpic.components.primitives.pic.rings.AED_ring.generate_pic_gds", false]], "generate_pic_part() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_pic_part", false]], "generate_pic_part() (mxpic.components.primitives.passive.rings.socr_adiabatic method)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic.generate_pic_part", false]], "generate_positive() (mxpic.components.primitives.pic.bragg.bragg_apodized method)": [[34, "mxpic.components.primitives.pic.bragg.Bragg_apodized.generate_positive", false]], "generate_positive() (mxpic.components.primitives.pic.gratings.gc_std_1d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_1D.generate_positive", false]], "generate_positive() (mxpic.components.primitives.pic.gratings.gc_std_2d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_2D.generate_positive", false]], "generate_test_dev() (mxpic.components.primitives.pic.gratings.gc_std_1d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_1D.generate_test_dev", false]], "generate_test_gds() (mxpic.components.composites.mzi.mzi_butterfly method)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly.generate_test_gds", false]], "generate_test_gds() (mxpic.components.composites.mzi_mesh.amzi_w method)": [[4, "mxpic.components.composites.MZI_mesh.AMZI_W.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.active.dev_ps.heater_ndoped method)": [[22, "mxpic.components.primitives.active.dev_ps.Heater_NDoped.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.passive.unit.brag_wdm method)": [[31, "mxpic.components.primitives.passive.unit.Brag_WDM.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.passive.unit.psr_1x2 method)": [[31, "mxpic.components.primitives.passive.unit.PSR_1x2.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.adc_std_2x2 method)": [[35, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.dc method)": [[35, "mxpic.components.primitives.pic.couplers.DC.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.dc_bend method)": [[35, "mxpic.components.primitives.pic.couplers.DC_bend.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.dc_px_3sg method)": [[35, "mxpic.components.primitives.pic.couplers.DC_pX_3sg.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.couplers.mdm method)": [[35, "mxpic.components.primitives.pic.couplers.MDM.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.cross.cross method)": [[36, "mxpic.components.primitives.pic.cross.Cross.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.gratings.gc_std_2d method)": [[37, "mxpic.components.primitives.pic.gratings.GC_STD_2D.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.mmi.mmi_ml method)": [[39, "mxpic.components.primitives.pic.mmi.MMI_ML.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.rings.aed_ring method)": [[41, "mxpic.components.primitives.pic.rings.AED_ring.generate_test_gds", false]], "generate_test_gds() (mxpic.components.primitives.pic.ybs.ybranch_3wg method)": [[33, "mxpic.components.primitives.pic.YBS.Ybranch_3wg.generate_test_gds", false]], "generate_test_mzi_gds() (mxpic.components.primitives.passive.rings.socr method)": [[30, "mxpic.components.primitives.passive.rings.SOCR.generate_test_mzi_gds", false]], "grating_2d_hole (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole", false]], "grating_2d_hole_3rec (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec", false]], "grating_2d_hole_4rec (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec", false]], "heater_ndoped (class in mxpic.components.primitives.active.dev_ps)": [[22, "mxpic.components.primitives.active.dev_ps.Heater_NDoped", false]], "hole (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.hole", false]], "ic_exception() (in module mxpic.components.routing)": [[44, "mxpic.components.routing.ic_exception", false]], "isl (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.ISL", false]], "line_mm() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.line_mm", false]], "line_mm() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.line_mm", false]], "loopmirror (class in mxpic.components.composites.loopmirror)": [[2, "mxpic.components.composites.LoopMirror.LoopMirror", false]], "mdm (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.MDM", false]], "mmi_ml (class in mxpic.components.primitives.pic.mmi)": [[39, "mxpic.components.primitives.pic.mmi.MMI_ML", false]], "mmi_std (class in mxpic.components.primitives.pic.mmi)": [[39, "mxpic.components.primitives.pic.mmi.MMI_STD", false]], "module": [[1, "module-mxpic.components.basic", false], [2, "module-mxpic.components.composites.LoopMirror", false], [3, "module-mxpic.components.composites.MZI", false], [4, "module-mxpic.components.composites.MZI_mesh", false], [5, "module-mxpic.components.composites.SptTree", false], [6, "module-mxpic.components.composites.advance", false], [8, "module-mxpic.components.electronics.eic_units", false], [10, "module-mxpic.components.gds_devices", false], [11, "module-mxpic.components.geometry.curves", false], [13, "module-mxpic.components.geometry.polygons", false], [14, "module-mxpic.components.geometry.racetrack", false], [15, "module-mxpic.components.geometry.rings", false], [18, "module-mxpic.components.others.simulation.DualPortElements", false], [20, "module-mxpic.components.pins", false], [21, "module-mxpic.components.primitives.EC_dual_layer_px3", false], [22, "module-mxpic.components.primitives.active.dev_ps", false], [24, "module-mxpic.components.primitives.active.pin_wg", false], [25, "module-mxpic.components.primitives.active.rings", false], [26, "module-mxpic.components.primitives.grating_couplers", false], [28, "module-mxpic.components.primitives.passive.crows", false], [30, "module-mxpic.components.primitives.passive.rings", false], [31, "module-mxpic.components.primitives.passive.unit", false], [32, "module-mxpic.components.primitives.pic.PBS", false], [33, "module-mxpic.components.primitives.pic.YBS", false], [34, "module-mxpic.components.primitives.pic.bragg", false], [35, "module-mxpic.components.primitives.pic.couplers", false], [36, "module-mxpic.components.primitives.pic.cross", false], [37, "module-mxpic.components.primitives.pic.gratings", false], [39, "module-mxpic.components.primitives.pic.mmi", false], [40, "module-mxpic.components.primitives.pic.racetrack", false], [41, "module-mxpic.components.primitives.pic.rings", false], [42, "module-mxpic.components.primitives.pic.spiral", false], [43, "module-mxpic.components.primitives.pic.taper", false], [44, "module-mxpic.components.routing", false]], "monitorparas() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.MonitorParas", false]], "mrr_aed (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_AED", false]], "mrr_dw_adddrop (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_DW_Adddrop", false]], "mrr_dw_allpass (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_DW_Allpass", false]], "mrr_mm_adddrop (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_MM_Adddrop", false]], "mrr_mm_allpass (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_MM_Allpass", false]], "mrr_std_adddrop (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_STD_Adddrop", false]], "mrr_std_allpass (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_STD_Allpass", false]], "mrr_std_ring (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.MRR_STD_Ring", false]], "mx_bend (class in mxpic.components.geometry.rings)": [[15, "mxpic.components.geometry.rings.mx_bend", false]], "mxpic.components.basic": [[1, "module-mxpic.components.basic", false]], "mxpic.components.composites.advance": [[6, "module-mxpic.components.composites.advance", false]], "mxpic.components.composites.loopmirror": [[2, "module-mxpic.components.composites.LoopMirror", false]], "mxpic.components.composites.mzi": [[3, "module-mxpic.components.composites.MZI", false]], "mxpic.components.composites.mzi_mesh": [[4, "module-mxpic.components.composites.MZI_mesh", false]], "mxpic.components.composites.spttree": [[5, "module-mxpic.components.composites.SptTree", false]], "mxpic.components.electronics.eic_units": [[8, "module-mxpic.components.electronics.eic_units", false]], "mxpic.components.gds_devices": [[10, "module-mxpic.components.gds_devices", false]], "mxpic.components.geometry.curves": [[11, "module-mxpic.components.geometry.curves", false]], "mxpic.components.geometry.polygons": [[13, "module-mxpic.components.geometry.polygons", false]], "mxpic.components.geometry.racetrack": [[14, "module-mxpic.components.geometry.racetrack", false]], "mxpic.components.geometry.rings": [[15, "module-mxpic.components.geometry.rings", false]], "mxpic.components.others.simulation.dualportelements": [[18, "module-mxpic.components.others.simulation.DualPortElements", false]], "mxpic.components.pins": [[20, "module-mxpic.components.pins", false]], "mxpic.components.primitives.active.dev_ps": [[22, "module-mxpic.components.primitives.active.dev_ps", false]], "mxpic.components.primitives.active.pin_wg": [[24, "module-mxpic.components.primitives.active.pin_wg", false]], "mxpic.components.primitives.active.rings": [[25, "module-mxpic.components.primitives.active.rings", false]], "mxpic.components.primitives.ec_dual_layer_px3": [[21, "module-mxpic.components.primitives.EC_dual_layer_px3", false]], "mxpic.components.primitives.grating_couplers": [[26, "module-mxpic.components.primitives.grating_couplers", false]], "mxpic.components.primitives.passive.crows": [[28, "module-mxpic.components.primitives.passive.crows", false]], "mxpic.components.primitives.passive.rings": [[30, "module-mxpic.components.primitives.passive.rings", false]], "mxpic.components.primitives.passive.unit": [[31, "module-mxpic.components.primitives.passive.unit", false]], "mxpic.components.primitives.pic.bragg": [[34, "module-mxpic.components.primitives.pic.bragg", false]], "mxpic.components.primitives.pic.couplers": [[35, "module-mxpic.components.primitives.pic.couplers", false]], "mxpic.components.primitives.pic.cross": [[36, "module-mxpic.components.primitives.pic.cross", false]], "mxpic.components.primitives.pic.gratings": [[37, "module-mxpic.components.primitives.pic.gratings", false]], "mxpic.components.primitives.pic.mmi": [[39, "module-mxpic.components.primitives.pic.mmi", false]], "mxpic.components.primitives.pic.pbs": [[32, "module-mxpic.components.primitives.pic.PBS", false]], "mxpic.components.primitives.pic.racetrack": [[40, "module-mxpic.components.primitives.pic.racetrack", false]], "mxpic.components.primitives.pic.rings": [[41, "module-mxpic.components.primitives.pic.rings", false]], "mxpic.components.primitives.pic.spiral": [[42, "module-mxpic.components.primitives.pic.spiral", false]], "mxpic.components.primitives.pic.taper": [[43, "module-mxpic.components.primitives.pic.taper", false]], "mxpic.components.primitives.pic.ybs": [[33, "module-mxpic.components.primitives.pic.YBS", false]], "mxpic.components.routing": [[44, "module-mxpic.components.routing", false]], "mzi (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI", false]], "mzi_2st_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_2st_ubend", false]], "mzi_butterfly (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Butterfly", false]], "mzi_eubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Eubend", false]], "mzi_mesh_parl (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl", false]], "mzi_mesh_tri (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri", false]], "mzi_mesh_u (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.MZI_mesh_U", false]], "mzi_ns (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_NS", false]], "mzi_ns_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_NS_ubend", false]], "mzi_ubend (class in mxpic.components.composites.mzi)": [[3, "mxpic.components.composites.MZI.MZI_Ubend", false]], "nano_ant (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Nano_ant", false]], "opt_euler() (mxpic.components.primitives.pic.spiral.spiral_circle method)": [[42, "mxpic.components.primitives.pic.spiral.spiral_circle.opt_euler", false]], "pad (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.PAD", false]], "pads (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.PADs", false]], "pbs_3wg (class in mxpic.components.primitives.pic.pbs)": [[32, "mxpic.components.primitives.pic.PBS.PBS_3wg", false]], "pin_mrr_mm_adddrop (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.PIN_MRR_MM_Adddrop", false]], "pin_mrr_mm_allpass (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.PIN_MRR_MM_Allpass", false]], "pin_mrr_std_allpass (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.PIN_MRR_STD_Allpass", false]], "portparas() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.PortParas", false]], "ps_2st (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.PS_2st", false]], "ps_2st_straight (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.PS_2st_Straight", false]], "ps_pin (class in mxpic.components.primitives.active.dev_ps)": [[22, "mxpic.components.primitives.active.dev_ps.PS_PIN", false]], "psr (class in mxpic.components.primitives.pic.taper)": [[43, "mxpic.components.primitives.pic.taper.PSR", false]], "psr_1x2 (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.PSR_1x2", false]], "racetrack (class in mxpic.components.geometry.racetrack)": [[14, "mxpic.components.geometry.racetrack.Racetrack", false]], "racetrack_mm_adddrop (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.Racetrack_MM_Adddrop", false]], "racetrack_mm_allpass (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.Racetrack_MM_Allpass", false]], "racetrack_std_allpass (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass", false]], "racetrackresonator (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.RacetrackResonator", false]], "resonator (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.RESONATOR", false]], "ring_bus_wg (class in mxpic.components.primitives.pic.couplers)": [[35, "mxpic.components.primitives.pic.couplers.ring_bus_wg", false]], "ring_phase (class in mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.RING_PHASE", false]], "route (class in mxpic.components.primitives.active.dev_ps)": [[22, "mxpic.components.primitives.active.dev_ps.Route", false]], "route (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.Route", false]], "route (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.Route", false]], "route (class in mxpic.components.primitives.pic.racetrack)": [[40, "mxpic.components.primitives.pic.racetrack.Route", false]], "route (class in mxpic.components.routing)": [[44, "mxpic.components.routing.Route", false]], "rt_bend() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.rt_bend", false]], "rt_bend() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.rt_bend", false]], "sbend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.sbend_p2p", false]], "sbend_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.sbend_p2p", false]], "sbend_p2p_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.sbend_p2p_mine", false]], "sbend_p2p_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.sbend_p2p_mine", false]], "sbend_route() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.sbend_route", false]], "sbend_route() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.sbend_route", false]], "simudatafigureplot() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.SimuDataFigurePlot", false]], "socr (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.SOCR", false]], "socr_adiabatic (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic", false]], "socr_adiabatic_cband (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Adiabatic_Cband", false]], "socr_cband (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.SOCR_Cband", false]], "spiral (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.spiral", false]], "spiral_cicle_mm (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.Spiral_Cicle_MM", false]], "spiral_cicle_std (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.Spiral_Cicle_STD", false]], "spiral_circle (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.spiral_circle", false]], "spiral_rect_std (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.Spiral_Rect_STD", false]], "spiral_rectangle (class in mxpic.components.primitives.pic.spiral)": [[42, "mxpic.components.primitives.pic.spiral.spiral_rectangle", false]], "splittingtree (class in mxpic.components.composites.spttree)": [[5, "mxpic.components.composites.SptTree.SplittingTree", false]], "std_crow_v (class in mxpic.components.primitives.passive.crows)": [[28, "mxpic.components.primitives.passive.crows.STD_CROW_V", false]], "std_pic_rings (class in mxpic.components.primitives.pic.rings)": [[41, "mxpic.components.primitives.pic.rings.STD_PIC_Rings", false]], "std_ring_amzi_adddrop (class in mxpic.components.primitives.passive.rings)": [[30, "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop", false]], "std_ring_pin (class in mxpic.components.primitives.active.rings)": [[25, "mxpic.components.primitives.active.rings.STD_Ring_PIN", false]], "strt() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt", false]], "strt() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt", false]], "strt_bend_strt_p2p_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt_bend_strt_p2p_mine", false]], "strt_bend_strt_p2p_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt_bend_strt_p2p_mine", false]], "strt_mm() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt_mm", false]], "strt_mm() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt_mm", false]], "strt_mm_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt_mm_p2p", false]], "strt_mm_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt_mm_p2p", false]], "strt_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.strt_p2p", false]], "strt_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.strt_p2p", false]], "strt_round_courner (class in mxpic.components.geometry.polygons)": [[13, "mxpic.components.geometry.polygons.strt_round_courner", false]], "szvia (mxpic.components.electronics.eic_units.vias attribute)": [[8, "mxpic.components.electronics.eic_units.Vias.szVia", false]], "taper (class in mxpic.components.primitives.pic.gratings)": [[37, "mxpic.components.primitives.pic.gratings.Taper", false]], "taper() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.taper", false]], "taper() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.taper", false]], "taper_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.taper_p2p", false]], "taper_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.taper_p2p", false]], "taper_xs2xs (class in mxpic.components.primitives.pic.taper)": [[43, "mxpic.components.primitives.pic.taper.taper_xs2xs", false]], "transition (class in mxpic.components.primitives.pic.taper)": [[43, "mxpic.components.primitives.pic.taper.transition", false]], "tube_mine() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.tube_mine", false]], "tube_mine() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.tube_mine", false]], "tuple_to_complex() (in module mxpic.components.others.simulation.dualportelements)": [[18, "mxpic.components.others.simulation.DualPortElements.tuple_to_complex", false]], "ubend_p2p() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.ubend_p2p", false]], "ubend_p2p() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.ubend_p2p", false]], "ubend_route() (mxpic.components.primitives.passive.rings.route method)": [[30, "mxpic.components.primitives.passive.rings.Route.ubend_route", false]], "ubend_route() (mxpic.components.routing.route method)": [[44, "mxpic.components.routing.Route.ubend_route", false]], "umat_2x2_s (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.UMat_2x2_S", false]], "vias (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.Vias", false]], "vias_arc (class in mxpic.components.electronics.eic_units)": [[8, "mxpic.components.electronics.eic_units.Vias_arc", false]], "w_waveguide (class in mxpic.components.composites.mzi_mesh)": [[4, "mxpic.components.composites.MZI_mesh.W_waveguide", false]], "waveguide (class in mxpic.components.primitives.passive.unit)": [[31, "mxpic.components.primitives.passive.unit.waveguide", false]], "waveguide_pin (class in mxpic.components.primitives.active.pin_wg)": [[24, "mxpic.components.primitives.active.pin_wg.waveguide_PIN", false]], "wgdoped (class in mxpic.components.primitives.active.pin_wg)": [[24, "mxpic.components.primitives.active.pin_wg.WGDoped", false]], "ybranch (class in mxpic.components.primitives.pic.ybs)": [[33, "mxpic.components.primitives.pic.YBS.YBranch", false]], "ybranch_3wg (class in mxpic.components.primitives.pic.ybs)": [[33, "mxpic.components.primitives.pic.YBS.Ybranch_3wg", false]]}, "objects": {"mxpic.components": [[1, 0, 0, "-", "basic"], [10, 0, 0, "-", "gds_devices"], [20, 0, 0, "-", "pins"], [44, 0, 0, "-", "routing"]], "mxpic.components.composites": [[2, 0, 0, "-", "LoopMirror"], [3, 0, 0, "-", "MZI"], [4, 0, 0, "-", "MZI_mesh"], [5, 0, 0, "-", "SptTree"], [6, 0, 0, "-", "advance"]], "mxpic.components.composites.LoopMirror": [[2, 1, 1, "", "LoopMirror"]], "mxpic.components.composites.LoopMirror.LoopMirror": [[2, 2, 1, "", "cell"]], "mxpic.components.composites.MZI": [[3, 1, 1, "", "MZI"], [3, 1, 1, "", "MZI_2st_ubend"], [3, 1, 1, "", "MZI_Butterfly"], [3, 1, 1, "", "MZI_Eubend"], [3, 1, 1, "", "MZI_NS"], [3, 1, 1, "", "MZI_NS_ubend"], [3, 1, 1, "", "MZI_Ubend"]], "mxpic.components.composites.MZI.MZI": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_2st_ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_Butterfly": [[3, 2, 1, "", "cell"], [3, 3, 1, "", "generate_gds"], [3, 3, 1, "", "generate_test_gds"]], "mxpic.components.composites.MZI.MZI_Eubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_NS": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_NS_ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI.MZI_Ubend": [[3, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh": [[4, 1, 1, "", "AMZI_W"], [4, 1, 1, "", "MZI_mesh_Parl"], [4, 1, 1, "", "MZI_mesh_Tri"], [4, 1, 1, "", "MZI_mesh_U"], [4, 1, 1, "", "UMat_2x2_S"], [4, 1, 1, "", "W_waveguide"]], "mxpic.components.composites.MZI_mesh.AMZI_W": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"], [4, 3, 1, "", "generate_test_gds"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_Parl": [[4, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_Tri": [[4, 2, 1, "", "cell"]], "mxpic.components.composites.MZI_mesh.MZI_mesh_U": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.MZI_mesh.UMat_2x2_S": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.MZI_mesh.W_waveguide": [[4, 2, 1, "", "cell"], [4, 3, 1, "", "generate_gds"]], "mxpic.components.composites.SptTree": [[5, 1, 1, "", "SplittingTree"]], "mxpic.components.composites.SptTree.SplittingTree": [[5, 2, 1, "", "cell"], [5, 3, 1, "", "generate_gds"]], "mxpic.components.electronics": [[8, 0, 0, "-", "eic_units"]], "mxpic.components.electronics.eic_units": [[8, 1, 1, "", "ISL"], [8, 1, 1, "", "PAD"], [8, 1, 1, "", "PADs"], [8, 1, 1, "", "Vias"], [8, 1, 1, "", "Vias_arc"]], "mxpic.components.electronics.eic_units.PAD": [[8, 3, 1, "", "generate_gds"]], "mxpic.components.electronics.eic_units.PADs": [[8, 3, 1, "", "generate_gds"]], "mxpic.components.electronics.eic_units.Vias": [[8, 3, 1, "", "generate_gds"], [8, 2, 1, "", "szVia"]], "mxpic.components.gds_devices": [[10, 1, 1, "", "gds_lib_load"], [10, 4, 1, "", "generate_gds_lib"]], "mxpic.components.gds_devices.gds_lib_load": [[10, 3, 1, "", "add_pin"]], "mxpic.components.geometry": [[11, 0, 0, "-", "curves"], [13, 0, 0, "-", "polygons"], [14, 0, 0, "-", "racetrack"], [15, 0, 0, "-", "rings"]], "mxpic.components.geometry.curves": [[11, 1, 1, "", "Clothoid"], [11, 1, 1, "", "Conchoid"]], "mxpic.components.geometry.curves.Clothoid": [[11, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.polygons": [[13, 1, 1, "", "strt_round_courner"]], "mxpic.components.geometry.racetrack": [[14, 1, 1, "", "Racetrack"]], "mxpic.components.geometry.racetrack.Racetrack": [[14, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.rings": [[15, 1, 1, "", "Elipse"], [15, 1, 1, "", "Elipse_dual"], [15, 1, 1, "", "circle"], [15, 1, 1, "", "hole"], [15, 1, 1, "", "mx_bend"]], "mxpic.components.geometry.rings.Elipse": [[15, 3, 1, "", "generate_gds"]], "mxpic.components.geometry.rings.Elipse_dual": [[15, 3, 1, "", "generate_gds"]], "mxpic.components.others.simulation": [[18, 0, 0, "-", "DualPortElements"]], "mxpic.components.others.simulation.DualPortElements": [[18, 4, 1, "", "DEVICE_2X2_FDTD_INIT"], [18, 1, 1, "", "DEVICE_COUPLER"], [18, 1, 1, "", "DEVICE_PORTS"], [18, 1, 1, "", "DEVICE_RING_BUS"], [18, 1, 1, "", "EULER_CROW_BUS"], [18, 1, 1, "", "EULER_CROW_INTER_CP"], [18, 4, 1, "", "MonitorParas"], [18, 4, 1, "", "PortParas"], [18, 1, 1, "", "RESONATOR"], [18, 1, 1, "", "RING_PHASE"], [18, 4, 1, "", "SimuDataFigurePlot"], [18, 4, 1, "", "tuple_to_complex"]], "mxpic.components.others.simulation.DualPortElements.DEVICE_PORTS": [[18, 2, 1, "", "FolderPath"]], "mxpic.components.primitives": [[21, 0, 0, "-", "EC_dual_layer_px3"], [26, 0, 0, "-", "grating_couplers"]], "mxpic.components.primitives.EC_dual_layer_px3": [[21, 1, 1, "", "EC_dual_layer_px3"]], "mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3": [[21, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active": [[22, 0, 0, "-", "dev_ps"], [24, 0, 0, "-", "pin_wg"], [25, 0, 0, "-", "rings"]], "mxpic.components.primitives.active.dev_ps": [[22, 1, 1, "", "Heater_NDoped"], [22, 1, 1, "", "PS_PIN"], [22, 1, 1, "", "Route"]], "mxpic.components.primitives.active.dev_ps.Heater_NDoped": [[22, 3, 1, "", "generate_gds"], [22, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.active.dev_ps.PS_PIN": [[22, 2, 1, "", "cell"], [22, 3, 1, "", "generate_gds"], [22, 3, 1, "", "generate_mzi_gds"]], "mxpic.components.primitives.active.pin_wg": [[24, 1, 1, "", "WGDoped"], [24, 1, 1, "", "waveguide_PIN"]], "mxpic.components.primitives.active.pin_wg.WGDoped": [[24, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active.pin_wg.waveguide_PIN": [[24, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.active.rings": [[25, 1, 1, "", "AED_Ring_PIN"], [25, 1, 1, "", "PIN_MRR_MM_Adddrop"], [25, 1, 1, "", "PIN_MRR_MM_Allpass"], [25, 1, 1, "", "PIN_MRR_STD_Allpass"], [25, 1, 1, "", "Route"], [25, 1, 1, "", "STD_Ring_PIN"]], "mxpic.components.primitives.active.rings.AED_Ring_PIN": [[25, 3, 1, "", "generate_imp_gds"]], "mxpic.components.primitives.grating_couplers": [[26, 1, 1, "", "GC_SiN_Si_Dual_Layer"]], "mxpic.components.primitives.grating_couplers.GC_SiN_Si_Dual_Layer": [[26, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive": [[28, 0, 0, "-", "crows"], [30, 0, 0, "-", "rings"], [31, 0, 0, "-", "unit"]], "mxpic.components.primitives.passive.crows": [[28, 1, 1, "", "CROW_AED"], [28, 1, 1, "", "CROW_Circular_ring"], [28, 1, 1, "", "CROW_Eul_RCK"], [28, 1, 1, "", "CROW_Eul_Ring"], [28, 1, 1, "", "CROW_STD_Adddrop"], [28, 1, 1, "", "CROW_STD_Allpass"], [28, 1, 1, "", "STD_CROW_V"]], "mxpic.components.primitives.passive.crows.STD_CROW_V": [[28, 2, 1, "", "A_ht"], [28, 3, 1, "", "generate_eic_gds"], [28, 3, 1, "", "generate_pic_gds"]], "mxpic.components.primitives.passive.rings": [[30, 1, 1, "", "MRR_AED"], [30, 1, 1, "", "MRR_DW_Adddrop"], [30, 1, 1, "", "MRR_DW_Allpass"], [30, 1, 1, "", "MRR_MM_Adddrop"], [30, 1, 1, "", "MRR_MM_Allpass"], [30, 1, 1, "", "MRR_STD_Adddrop"], [30, 1, 1, "", "MRR_STD_Allpass"], [30, 1, 1, "", "MRR_STD_Ring"], [30, 1, 1, "", "Route"], [30, 1, 1, "", "SOCR"], [30, 1, 1, "", "SOCR_Adiabatic"], [30, 1, 1, "", "SOCR_Adiabatic_Cband"], [30, 1, 1, "", "SOCR_Cband"], [30, 1, 1, "", "STD_ring_AMZI_adddrop"]], "mxpic.components.primitives.passive.rings.MRR_AED": [[30, 3, 1, "", "generate_eic_gds"]], "mxpic.components.primitives.passive.rings.Route": [[30, 3, 1, "", "bend_mine"], [30, 3, 1, "", "bend_p2p"], [30, 3, 1, "", "bend_route"], [30, 3, 1, "", "bend_route_p2p"], [30, 3, 1, "", "bend_strt_bend_p2p"], [30, 3, 1, "", "bend_strt_bend_p2p_mine"], [30, 3, 1, "", "connPatch"], [30, 3, 1, "", "line_mm"], [30, 3, 1, "", "rt_bend"], [30, 3, 1, "", "sbend_p2p"], [30, 3, 1, "", "sbend_p2p_mine"], [30, 3, 1, "", "sbend_route"], [30, 3, 1, "", "strt"], [30, 3, 1, "", "strt_bend_strt_p2p_mine"], [30, 3, 1, "", "strt_mm"], [30, 3, 1, "", "strt_mm_p2p"], [30, 3, 1, "", "strt_p2p"], [30, 3, 1, "", "taper"], [30, 3, 1, "", "taper_p2p"], [30, 3, 1, "", "tube_mine"], [30, 3, 1, "", "ubend_p2p"], [30, 3, 1, "", "ubend_route"]], "mxpic.components.primitives.passive.rings.SOCR": [[30, 3, 1, "", "generate_2pi_gds"], [30, 3, 1, "", "generate_eic_part"], [30, 3, 1, "", "generate_gds"], [30, 3, 1, "", "generate_pic_part"], [30, 3, 1, "", "generate_test_gds"], [30, 3, 1, "", "generate_test_mzi_gds"]], "mxpic.components.primitives.passive.rings.SOCR_Adiabatic": [[30, 3, 1, "", "generate_eic_part"], [30, 3, 1, "", "generate_gds"], [30, 3, 1, "", "generate_pic_part"]], "mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop": [[30, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive.unit": [[31, 1, 1, "", "Brag_WDM"], [31, 1, 1, "", "PSR_1x2"], [31, 1, 1, "", "PS_2st"], [31, 1, 1, "", "PS_2st_Straight"], [31, 1, 1, "", "waveguide"]], "mxpic.components.primitives.passive.unit.Brag_WDM": [[31, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.passive.unit.PSR_1x2": [[31, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.passive.unit.PS_2st": [[31, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.passive.unit.PS_2st_Straight": [[31, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic": [[32, 0, 0, "-", "PBS"], [33, 0, 0, "-", "YBS"], [34, 0, 0, "-", "bragg"], [35, 0, 0, "-", "couplers"], [36, 0, 0, "-", "cross"], [37, 0, 0, "-", "gratings"], [39, 0, 0, "-", "mmi"], [40, 0, 0, "-", "racetrack"], [41, 0, 0, "-", "rings"], [42, 0, 0, "-", "spiral"], [43, 0, 0, "-", "taper"]], "mxpic.components.primitives.pic.PBS": [[32, 1, 1, "", "PBS_3wg"]], "mxpic.components.primitives.pic.PBS.PBS_3wg": [[32, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.YBS": [[33, 1, 1, "", "YBranch"], [33, 1, 1, "", "Ybranch_3wg"]], "mxpic.components.primitives.pic.YBS.YBranch": [[33, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.YBS.Ybranch_3wg": [[33, 3, 1, "", "generate_gds"], [33, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.bragg": [[34, 1, 1, "", "Bragg"], [34, 1, 1, "", "Bragg_apodized"]], "mxpic.components.primitives.pic.bragg.Bragg_apodized": [[34, 3, 1, "", "generate_negative"], [34, 3, 1, "", "generate_positive"]], "mxpic.components.primitives.pic.couplers": [[35, 1, 1, "", "ADC_STD_2x2"], [35, 1, 1, "", "BS_tdc"], [35, 1, 1, "", "DC"], [35, 1, 1, "", "DC_bend"], [35, 1, 1, "", "DC_pX_3sg"], [35, 1, 1, "", "MDM"], [35, 1, 1, "", "ring_bus_wg"]], "mxpic.components.primitives.pic.couplers.ADC_STD_2x2": [[35, 3, 1, "", "generate_err"], [35, 3, 1, "", "generate_gds"], [35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC": [[35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC_bend": [[35, 3, 1, "", "generate_gds"], [35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.DC_pX_3sg": [[35, 3, 1, "", "generate_gds"], [35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.MDM": [[35, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.couplers.ring_bus_wg": [[35, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.cross": [[36, 1, 1, "", "Cross"], [36, 1, 1, "", "Cross_Sine"]], "mxpic.components.primitives.pic.cross.Cross": [[36, 3, 1, "", "generate_gds"], [36, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.gratings": [[37, 1, 1, "", "FA"], [37, 1, 1, "", "GC_STD_1D"], [37, 1, 1, "", "GC_STD_2D"], [37, 1, 1, "", "Grating_2D_Hole"], [37, 1, 1, "", "Grating_2D_Hole_3Rec"], [37, 1, 1, "", "Grating_2D_Hole_4Rec"], [37, 1, 1, "", "Nano_ant"], [37, 1, 1, "", "Taper"]], "mxpic.components.primitives.pic.gratings.GC_STD_1D": [[37, 3, 1, "", "generate_negative"], [37, 3, 1, "", "generate_positive"], [37, 3, 1, "", "generate_test_dev"]], "mxpic.components.primitives.pic.gratings.GC_STD_2D": [[37, 3, 1, "", "generate_negative"], [37, 3, 1, "", "generate_positive"], [37, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole": [[37, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_3Rec": [[37, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Grating_2D_Hole_4Rec": [[37, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.gratings.Nano_ant": [[37, 3, 1, "", "generate_gds"], [37, 3, 1, "", "generate_gds_error"], [37, 3, 1, "", "generate_gds_positive"]], "mxpic.components.primitives.pic.gratings.Taper": [[37, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.mmi": [[39, 1, 1, "", "MMI_ML"], [39, 1, 1, "", "MMI_STD"]], "mxpic.components.primitives.pic.mmi.MMI_ML": [[39, 3, 1, "", "generate_gds"], [39, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.racetrack": [[40, 1, 1, "", "RacetrackResonator"], [40, 1, 1, "", "Racetrack_MM_Adddrop"], [40, 1, 1, "", "Racetrack_MM_Allpass"], [40, 1, 1, "", "Racetrack_STD_Allpass"], [40, 1, 1, "", "Route"]], "mxpic.components.primitives.pic.racetrack.RacetrackResonator": [[40, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass": [[40, 3, 1, "", "generate_eic_gds"]], "mxpic.components.primitives.pic.rings": [[41, 1, 1, "", "AED_ring"], [41, 1, 1, "", "STD_PIC_Rings"]], "mxpic.components.primitives.pic.rings.AED_ring": [[41, 3, 1, "", "generate_pic_gds"], [41, 3, 1, "", "generate_test_gds"]], "mxpic.components.primitives.pic.spiral": [[42, 1, 1, "", "Spiral_Cicle_MM"], [42, 1, 1, "", "Spiral_Cicle_STD"], [42, 1, 1, "", "Spiral_Rect_STD"], [42, 1, 1, "", "spiral"], [42, 1, 1, "", "spiral_circle"], [42, 1, 1, "", "spiral_rectangle"]], "mxpic.components.primitives.pic.spiral.spiral": [[42, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.spiral.spiral_circle": [[42, 2, 1, "", "cell"], [42, 3, 1, "", "generate_gds"], [42, 3, 1, "", "opt_euler"]], "mxpic.components.primitives.pic.spiral.spiral_rectangle": [[42, 3, 1, "", "generate_gds"]], "mxpic.components.primitives.pic.taper": [[43, 1, 1, "", "PSR"], [43, 1, 1, "", "taper_xs2xs"], [43, 1, 1, "", "transition"]], "mxpic.components.routing": [[44, 1, 1, "", "Route"], [44, 4, 1, "", "ic_exception"]], "mxpic.components.routing.Route": [[44, 3, 1, "", "bend_mine"], [44, 3, 1, "", "bend_p2p"], [44, 3, 1, "", "bend_route"], [44, 3, 1, "", "bend_route_p2p"], [44, 3, 1, "", "bend_strt_bend_p2p"], [44, 3, 1, "", "bend_strt_bend_p2p_mine"], [44, 3, 1, "", "connPatch"], [44, 3, 1, "", "line_mm"], [44, 3, 1, "", "rt_bend"], [44, 3, 1, "", "sbend_p2p"], [44, 3, 1, "", "sbend_p2p_mine"], [44, 3, 1, "", "sbend_route"], [44, 3, 1, "", "strt"], [44, 3, 1, "", "strt_bend_strt_p2p_mine"], [44, 3, 1, "", "strt_mm"], [44, 3, 1, "", "strt_mm_p2p"], [44, 3, 1, "", "strt_p2p"], [44, 3, 1, "", "taper"], [44, 3, 1, "", "taper_p2p"], [44, 3, 1, "", "tube_mine"], [44, 3, 1, "", "ubend_p2p"], [44, 3, 1, "", "ubend_route"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "method", "Python method"], "4": ["py", "function", "Python function"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:method", "4": "py:function"}, "terms": {"": [30, 44], "0": [2, 3, 4, 8, 10, 11, 14, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "001": [11, 14, 15, 41], "01": [39, 40, 41, 43], "02": 35, "05": [15, 30, 42], "1": [3, 8, 11, 13, 18, 21, 22, 24, 25, 28, 30, 31, 33, 34, 35, 36, 37, 39, 42, 43, 44], "10": [3, 4, 5, 8, 11, 13, 14, 15, 24, 25, 28, 30, 31, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "100": [8, 14, 21, 22, 24, 30, 35], "10000": 11, "10001": 18, "101": 18, "11": [8, 32], "110": 37, "12": 21, "120": 8, "120degre": [], "1310nm": [], "140": 31, "15": [3, 4, 21, 28, 31, 33, 34, 35, 40, 43], "150": [3, 31], "1500nm": [], "1550nm": [], "16": 5, "1600nm": [], "18": [33, 41], "180": [25, 42], "1by": [], "1d": 37, "1um": [], "1x2": 31, "2": [4, 8, 18, 21, 22, 24, 25, 26, 30, 31, 33, 35, 36, 37, 39, 40, 41, 42, 43, 44], "20": [2, 4, 11, 22, 25, 28, 30, 31, 32, 33, 35, 37, 40, 41, 42, 44], "200": [21, 24, 34], "200nm": [], "2021": [], "2022": [], "2026": [], "22": [18, 35], "25": [4, 24, 26, 32, 37], "250": 30, "270": [25, 30], "28": [], "2d": 37, "2st": 31, "2um": [], "2x2": [4, 35], "3": [4, 8, 15, 18, 25, 28, 30, 32, 33, 34, 36, 37, 39, 44], "30": [3, 4, 24, 25, 26, 28, 30, 31, 35, 37, 40, 41, 43], "300": [35, 37], "33": 35, "35": [24, 25, 28, 35, 39, 41], "360": 15, "38": 28, "3db": [], "3rec": 37, "3sg": 35, "3um": [], "3wg": [32, 33], "4": [11, 18, 24, 25, 26, 28, 30, 33, 36, 37, 44], "40": [3, 26, 30, 31, 35, 43, 44], "400": [21, 33, 35, 36], "41": 37, "45": [2, 3, 4, 10, 11, 15, 21, 22, 25, 28, 30, 31, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43], "450nm": [], "4rec": 37, "5": [3, 4, 8, 11, 13, 14, 18, 22, 24, 26, 28, 30, 31, 32, 34, 35, 36, 37, 39, 42, 43, 44], "50": [4, 8, 21, 30, 31, 37, 39, 40, 42, 44], "500": 22, "510nm": [], "55": [25, 30, 31, 32, 35, 41, 43], "57": 37, "5um": [], "6": [4, 15, 18, 21, 25, 30, 33, 36, 37], "60": [8, 22], "61": 35, "64": [8, 13, 35], "65": [25, 28, 41], "7": [31, 32], "75": 3, "8": [4, 8, 21, 24, 25, 28, 31, 33, 35, 37], "80": [4, 8, 33, 35], "800": 22, "88": 35, "9": [25, 26, 30, 31, 41], "90": [8, 22, 25, 30, 40, 44], "908": [], "913": [], "96": [], "A": [11, 35], "AED": [25, 28, 30, 41], "If": [2, 3, 4, 5, 30, 44], "The": [30, 44], "_description_": 24, "_type_": 24, "a0": [], "a1": [5, 18], "a1_att": [28, 30, 40, 41], "a1_cp": [28, 30, 40, 41], "a2": 18, "a2_att": [28, 30, 40, 41], "a2_cp": [28, 30, 40, 41], "a_anti": 35, "a_anti_rfl": 26, "a_att": [25, 28, 30, 33, 40], "a_bend": 32, "a_cp": [25, 28, 30, 40], "a_gc_tap": 26, "a_ht": [25, 28, 30], "a_imp_in": 25, "a_imp_out": 25, "a_tap": 37, "abandon": 22, "absent": 8, "account": [30, 44], "activ": [16, 27], "acut": [], "ad": [4, 30, 37, 44], "adapt": [], "adapt_width": [22, 25, 30, 40, 44], "adapt_x": [22, 25, 30, 40, 44], "adc": 35, "adc_std_2x2": 38, "add": [2, 3, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "add_pin": 10, "adddrop": [25, 28, 30, 40], "adiabat": [21, 30], "adjac": [], "advanc": [7, 16], "aed_r": [30, 38], "aed_ring_pin": 23, "after": [], "air": 21, "air_trench": 21, "al": [], "align": [4, 30, 44], "all": [30, 44], "allpass": [25, 28, 30, 40], "alon": [], "along": 4, "alreadi": 30, "altern": [], "amax": [30, 44], "amf": [], "amf_ipkiss_pdk": [], "amf_pdk": [], "amzi": [4, 30], "amzi_w": 7, "an": [30, 44], "analysi": 37, "angl": [2, 15, 21, 22, 25, 26, 28, 30, 32, 33, 35, 37, 40, 41, 44], "angle_til": 21, "ani": [2, 3, 4, 5, 24, 25, 28, 30, 31, 35, 37, 40, 41, 42], "anoth": [30, 44], "antenna": [], "anti": [], "apertur": [], "apod": 34, "aport": 18, "append": [], "appli": 44, "ar": 5, "arc": [], "area": 8, "arg": 15, "arm": [3, 4], "arm_sine_width": 39, "around": [2, 3], "arrai": 37, "arrow": [30, 44], "assembl": [], "associ": 21, "assum": [30, 44], "asymmetr": [3, 4], "attach": [30, 44], "attribut": 5, "auto": [], "autom": 0, "automat": [30, 44], "avoid": [30, 44], "axi": [], "b": [2, 3, 4, 34, 35], "b1": [5, 18], "b2": [5, 18], "back": 21, "balanc": [30, 44], "band": 30, "base": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "basic": [0, 16], "bdc": [], "beam": [2, 3, 4], "beam_splitt": [], "befor": [30, 44], "begin": [30, 44], "begin_flat": 11, "behavior": 4, "bend": [2, 3, 4, 5, 15, 21, 30, 35, 42, 44], "bend_cel": 14, "bend_dc": 35, "bend_heat": 4, "bend_min": [30, 44], "bend_p2p": [30, 44], "bend_radiu": 5, "bend_rout": [30, 44], "bend_route_p2p": [30, 44], "bend_straight_bend_p2p": [30, 44], "bend_strt_bend": [30, 44], "bend_strt_bend_p2p": [30, 44], "bend_strt_bend_p2p_min": [30, 44], "bendendflag": [30, 44], "bent": 4, "beol": 21, "between": [3, 4, 5, 21, 24, 25, 28, 30, 31, 40, 44], "binari": 5, "block": 6, "bodi": [], "bool": [2, 3, 4, 5, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "boolean": [], "both": [3, 4], "box": [5, 21], "brag": 31, "brag_wdm": 29, "bragg": [27, 31, 38], "bragg_apod": 38, "branch": 5, "broadband": 35, "broadcast": [], "bs1": 3, "bs2": 3, "bs3": 3, "bs_tdc": 38, "bsb": [30, 44], "bu": [3, 4, 28, 35], "build": [6, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "built": [2, 4, 5], "bus_dop": 25, "bus_ord": 28, "butterfli": 3, "c": 30, "calcul": [], "can": [15, 30, 37, 44], "cband": [], "cell": [2, 3, 4, 5, 10, 13, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "cell_attribut": 41, "cell_nam": [10, 22, 30, 37], "cell_transit": [], "cell_xs_transit": [24, 25, 30, 40, 41, 42], "cellnam": 35, "cellsreus": 10, "center": 15, "central": [21, 42], "chamfer": [30, 44], "channel": 5, "chip": 21, "cicl": 42, "circl": [12, 35, 37, 42], "circular": [15, 28, 35], "circumscrib": [], "clad": [2, 3, 21, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "cladmateri": 18, "class": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "clear": 21, "clothoid": 12, "clothoid_ord": 35, "code": [30, 44], "coerc": 5, "column": [], "common": 4, "compact": 3, "compens": [3, 4], "complet": [], "compon": [7, 9, 12, 17, 19, 23, 27, 29, 38], "composit": [0, 16, 28, 31], "conchoid": 12, "condit": 44, "configur": [], "connect": [28, 30, 44], "connpatch": [30, 44], "constant": [], "constraint": [], "contact": 4, "contain": [], "continu": [25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "contrast": 21, "control": [], "conveni": [3, 6], "convert": 21, "core": 21, "corner": [25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "correspond": [], "cosin": [], "count": [37, 39, 42], "coupl": [21, 30], "coupler": [2, 21, 27, 37, 38], "cp": [30, 44], "creat": [26, 30, 44], "cross": [2, 3, 4, 21, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 43], "cross_nam": 8, "cross_sin": 38, "crow": [6, 27, 29], "crow_a": 29, "crow_circular_r": 29, "crow_custom": 28, "crow_eul_r": 29, "crow_eul_rck": 29, "crow_std_adddrop": 29, "crow_std_allpass": 29, "crx_te_1310": [], "crx_te_1550": [], "ct_pitch": 22, "cubic": [], "cumec": [], "cumec_csip130cu": [], "cumec_pdk": [], "cumec_sip130cu_pdk": [], "curv": [12, 16], "curvatur": 21, "custom": [], "cycl": 42, "d2wg_list": 22, "d_arm": [3, 4], "d_hole": [], "d_port": [3, 4], "da_tran": 35, "dac": [28, 30, 35], "dc": [3, 4, 38], "dc_bend": 38, "dc_bend_20_80_cband": [], "dc_bend_4_96_cband": [], "dc_bend_50_50_cband": [], "dc_px3_50_50_cband": [], "dc_px_3sg": 38, "dc_te_1550": [], "debug": [], "deep": 21, "default": [2, 3, 4, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "defin": 37, "define_typ": 37, "definit": [24, 25, 28, 30, 31, 40], "deflect": [], "degre": [2, 21, 25, 26, 28, 30, 32, 33, 35, 37, 40, 41], "demultiplex": 31, "depend": [24, 25, 30, 40, 41, 42], "depth": [], "deriv": [], "describ": [30, 44], "design": 30, "detail": [], "detch": [], "determin": [], "dev_nam": 18, "dev_p": [23, 27], "devic": [18, 21, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "device_2x2_fdtd_init": 19, "device_coupl": 19, "device_port": 19, "device_ring_bu": 19, "devnam": 18, "diamet": [], "differ": [], "differenti": [3, 4], "diffract": [], "dimens": 21, "direct": [2, 30, 35, 44], "directional_coupl": [], "disabl": [3, 4], "disconnect": [30, 44], "discret": [], "disk": 15, "distanc": 3, "divis": [], "dl": [3, 4], "dl_amzi": [3, 4], "dl_arm": 30, "dl_cal": 11, "dl_ht": 4, "dl_p2p": [25, 28, 30, 35, 40, 41], "dl_tran": 35, "dl_wg": 11, "dlc": 35, "dlx": [14, 28, 40], "dly": [14, 28, 40], "dmin": 42, "do": [], "doc": [22, 25, 30, 40, 44], "document": 0, "doe": [30, 44], "dofirst": [30, 44], "dope": 22, "dope_offset": 24, "dope_ovlp": 24, "dostrfirst": [30, 44], "dp_in": 39, "dp_out": 39, "draw": [3, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "dt": 34, "dual": [21, 26], "dual_bu": 25, "dual_ht": 3, "dualportel": [17, 19], "dummi": 21, "dure": 3, "duti": [], "duty_cycl": 37, "dw": [30, 35], "dw_toler": 43, "dx": 18, "dx_gc2gc": [33, 35, 36, 37, 39, 41], "dx_hole": [15, 37], "dx_offset": 31, "dxgc2gc": [3, 4], "dy": 18, "dy_gc2gc": [33, 35, 39, 41], "dy_hol": [15, 37], "dygc2gc": [3, 4], "dz": 18, "e": 21, "each": 4, "eas": [], "ec_1550": [], "ec_dual_layer_px3": [16, 27], "ec_te_1550": [], "edg": [8, 21], "edge1": [30, 44], "edge2": [30, 44], "edgepoint": [30, 44], "effici": [], "eic_unit": [9, 16], "either": [], "electr": [25, 28, 30, 31], "electron": [0, 16], "element": [30, 44], "elips": 12, "elipse_du": 12, "ellipt": 15, "enabl": 4, "end": [15, 30, 44], "end_angl": [30, 44], "end_patch": [11, 35], "enforc": [], "entir": [], "entranc": [], "entri": [], "epin_di": 30, "epin_dx": 30, "epin_ht_di": 25, "epin_ht_dx": 25, "equal": [], "err": 35, "err_asi": 33, "et": [], "eta_d": 34, "eta_etch": [34, 37], "etch": 37, "etch_depth": 37, "etch_shap": 34, "etch_typ": [34, 37], "eul": 28, "euler": [3, 35], "euler_anti_bend": 35, "euler_bend": [31, 42], "euler_crow_bu": 19, "euler_crow_inter_cp": 19, "euler_point": 35, "euler_sbend": 42, "euler_transist": 35, "euler_trasit": [25, 28, 30, 40, 41], "evalu": [], "everi": [], "exactli": [], "exampl": [30, 44], "except": 44, "exclus": 21, "excurs": 4, "exit": [], "expect": [], "explicit": 4, "export": 6, "export_plt": [30, 44], "expos": [], "extens": 21, "extern": [], "extra": [30, 44], "f": [30, 44], "fa": 38, "fabric": 35, "facet": 21, "fallback": [30, 44], "fals": [3, 4, 5, 8, 11, 15, 18, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "fan": [], "fanout": [], "fcw_tre": 37, "fdtd": 18, "fdtd_height": 18, "fdtdbuild": 18, "featur": [2, 3], "feed": [], "fetch": [34, 37], "fiber": [21, 37], "fiber_coupl": 37, "field": [], "field_sampl": 18, "file": 15, "fill": [], "filler": [], "final": 21, "final_flat": 11, "first": [3, 21, 30, 44], "float": [2, 3, 4, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 37, 39, 40, 41, 42, 43, 44], "fold": 3, "folderpath": 18, "follow": [], "footprint": [], "forc": [], "form": [], "four": [], "fraction": [], "from": [2, 4, 5, 30, 44], "function": [30, 44], "futur": 37, "g": [21, 30, 44], "g0": 35, "g1": 35, "gaolei": [], "gap": [24, 25, 26, 28, 30, 32, 33, 35, 37, 40, 41, 42, 44], "gap0": 35, "gap1": [28, 30, 35, 40, 41], "gap2": [28, 30, 40, 41], "gap_bu": 28, "gap_cp": 28, "gap_crow": 28, "gap_n_i": 25, "gap_p_i": 25, "gap_teeth_si": 26, "gap_teeth_sin": 26, "gc": [3, 4, 22, 26, 30, 31, 33, 35, 36, 37, 39, 41], "gc2gc_dx": 31, "gc2gc_dy": 31, "gc2gc_length": [22, 30], "gc_in": 31, "gc_offset": 22, "gc_sin_si_dual_lay": 27, "gc_std_1d": 38, "gc_std_2d": 38, "gc_te_1310": [], "gc_te_1550": [], "gc_tm_1310": [], "gc_tm_1550": [], "gd": [5, 21, 24, 30, 35, 37], "gds_devic": [0, 16], "gds_lib_gener": [], "gds_lib_load": 16, "ge": [], "gener": [2, 3, 4, 5, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "generate_2pi_gd": 30, "generate_eic_gd": [28, 30, 40], "generate_eic_part": 30, "generate_err": 35, "generate_gd": [3, 4, 5, 8, 11, 14, 15, 21, 22, 24, 26, 30, 31, 32, 33, 35, 36, 37, 39, 40, 42], "generate_gds_error": 37, "generate_gds_lib": 16, "generate_gds_posit": 37, "generate_imp_gd": 25, "generate_mzi_gd": 22, "generate_neg": [34, 37], "generate_pic_gd": [28, 41], "generate_pic_part": 30, "generate_posit": [34, 37], "generate_test_dev": 37, "generate_test_gd": [3, 4, 22, 30, 31, 33, 35, 36, 37, 39, 41], "generate_test_mzi_gd": 30, "geo": [30, 44], "geometr": 13, "geometri": [0, 2, 3, 4, 16, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "getch_tr": 37, "give": [30, 44], "glass": 18, "go": 37, "gpd_1550": [], "gpuon": 18, "grate": [27, 31, 38], "grating_2d_hol": 38, "grating_2d_hole_3rec": 38, "grating_2d_hole_4rec": 38, "grating_coupl": [16, 27], "grating_unit": 37, "grid": [4, 30, 44], "gridpatch": [30, 44], "gridsnap": [30, 44], "gt_diamet": 37, "gt_layer": 37, "gt_vector": 37, "guid": [30, 44], "h": [], "half": [], "handl": 3, "heater": [3, 4, 22, 24, 25, 28, 30, 31, 40], "heater_length": 22, "heater_ndop": 23, "heater_width": 22, "height": 18, "helper": [4, 13], "hgl_pdk_a": [], "high": [21, 22], "hole": [12, 37], "hole_shap": [15, 37], "horizont": [], "horsesho": [30, 44], "ht_notch_dual": [25, 30], "ht_rot": 30, "ht_same_sid": 4, "ht_shift": 28, "hu": [], "huang": [], "i": [2, 3, 4, 5, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "ic": [30, 44], "ic_except": 16, "ictyp": [30, 44], "ident": [], "identifi": [21, 24, 25, 26, 28, 30, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43], "if_open": 22, "ignor": [30, 44], "im": [30, 44], "imec": 37, "imecas_pdk": [], "imecas_pdk2": [], "implant": 25, "implement": [], "import": [30, 44], "in_out_align": 42, "includ": [], "index": 21, "individu": [], "info": [30, 44], "inherit": [], "initi": [8, 21], "inner": 3, "innermost": [], "input": [3, 4, 21], "insert": [], "insid": [], "instanc": [26, 30, 44], "instanti": [3, 8, 10, 22, 25, 30, 40, 44], "instead": [], "instrcutpath": 18, "instruct": 18, "int": [3, 4, 5, 22, 24, 25, 28, 30, 31, 32, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "interact": [], "interconnect": [22, 25, 30, 40, 44], "interfac": [3, 4], "interfer": [], "interferomet": [3, 4, 22], "intern": [3, 4], "interpol": [], "introduc": [30, 44], "io": [], "iri": [15, 25, 30, 41], "irx": [15, 25, 30, 41], "isl": [3, 4, 9, 25, 28, 30, 31], "isl_left": 28, "isl_low": 4, "isl_right": 28, "isl_upp": 4, "isol": [3, 4, 25, 28, 30, 31], "its": [30, 44], "jump": [30, 44], "junction": 22, "keep": [], "kei": [], "kr": 11, "l": [3, 30, 33, 36], "l0": 3, "l1": 31, "l12": [3, 31], "l2": 31, "l_ar": 37, "l_arm": [3, 4, 39], "l_attach": 33, "l_box_end": 21, "l_compens": 4, "l_cp": 35, "l_end": [21, 36, 37], "l_end_si": 26, "l_end_sin": 26, "l_field_cent": 37, "l_heater": [4, 31], "l_ht": [3, 24, 31], "l_in": 21, "l_in_tp": 33, "l_inner": 3, "l_mmi": 39, "l_patch": [3, 4], "l_port": 43, "l_tail": 37, "l_taper": [24, 37, 43], "l_tilt": [25, 28, 30, 40, 41], "l_tp": [3, 30, 31], "l_wg": [4, 22, 24, 31], "la": 15, "laid": [], "later": [30, 44], "layer": [11, 13, 14, 15, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "layer_d": 43, "layer_dt": 21, "layer_dum_exl_b": 21, "layer_fetch": 43, "layer_height": 18, "layer_metch": 43, "layer_ox_open": 26, "layer_si_etch": 26, "layer_si_slab": 26, "layer_si_teeth": 26, "layer_sin_etch": 26, "layer_sin_slab": [21, 26], "layer_sin_teeth": 26, "layer_top_cov": 21, "layer_u": 43, "layermap": 10, "layernam": [30, 44], "layout": [2, 3, 4, 5, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "lb": 15, "lb0": 35, "lc1": 35, "lc2": 35, "lcp": [32, 33], "ld": 35, "least": [], "len": [], "length": [3, 4, 8, 13, 21, 24, 25, 26, 28, 30, 31, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43, 44], "length1": [30, 44], "length2": [30, 44], "level": 5, "liang": [], "lib_nam": 10, "lib_path": 10, "libpath": 18, "librari": 0, "like": [], "line_mm": [30, 44], "linear": [30, 37, 44], "link": [], "list": [22, 24, 26, 28, 33, 36, 37, 39, 43], "ll": [30, 44], "lmax": 8, "lmin": 42, "ln": 3, "ln1": 3, "ln2": 3, "locat": 15, "logic": 37, "longer": [30, 44], "longitudin": [], "loop": 2, "loopmirror": [7, 16], "lower": [4, 5], "lower_isl": 31, "lp1": 35, "lpatch": 42, "lport": 42, "lr": [30, 44], "ls1": 3, "ls2": 3, "lstart": [30, 44], "lt": 35, "lt_bu": 35, "lt_cp": 35, "lt_rib": 43, "lt_slab": 43, "ltot": [30, 44], "ltp": [3, 4, 30, 31, 42, 44], "ltp1": [21, 43], "ltp2": [21, 43], "ltp3": 21, "ltp_bu": [25, 28, 30, 40, 41], "ltp_mm": [30, 44], "ltp_port": [24, 42], "ltran": 43, "lu": 35, "lumer": 18, "lumericalpath": 18, "lx_end": 37, "lx_port": 37, "lx_side": 37, "lx_sq": 15, "lx_taper": 37, "ly_end": 37, "ly_port": 37, "ly_sid": 37, "ly_sq": 15, "ly_tap": 37, "mach": [3, 4, 22], "made": [30, 44], "mai": [], "main": [], "manag": 21, "manual": [], "margin": [], "marker": [22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "master": [], "match": [], "materi": 18, "matter": [30, 44], "max_theta": 37, "maximum": [3, 30, 44], "mdm": [31, 38], "mdm_adc_te1_1550": [], "mdm_adc_te2_1550": [], "mdm_adc_te3_1550": [], "mean": [], "measur": [], "mesh": 4, "mesh_ord": 18, "mesh_typ": 4, "metal": [3, 4, 8, 24, 25, 28, 30, 31, 40], "metch": 37, "micrometr": [], "micron": [2, 3, 4, 5, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "mid_offset": 30, "midpoint": 21, "minimum": [3, 42], "mirror": 2, "mitig": [], "ml": 39, "mm": [25, 30, 40, 42], "mm_rout": [30, 44], "mmg_1d_d14um_1550_2mod": [], "mmi": [22, 27, 30, 38], "mmi_1x2_te_1310": [], "mmi_1x2_te_1550": [], "mmi_2x2_te_1310": [], "mmi_2x2_te_1550": [], "mmi_ml": 38, "mmi_sine_width": 39, "mmi_std": 38, "mode": [22, 25, 30, 31, 40, 44], "mode_radiu": 37, "modeidx": 18, "model": [30, 44], "modul": 30, "mohanti": [], "monitor": [], "monitorpara": 19, "mono": [], "mrr": [25, 30], "mrr_a": [25, 29], "mrr_dw_adddrop": 29, "mrr_dw_allpass": 29, "mrr_mm_adddrop": 29, "mrr_mm_allpass": 29, "mrr_std_adddrop": 29, "mrr_std_allpass": 29, "mrr_std_ring": 29, "msg": 44, "multi": [], "multimod": 30, "multimode_interferomet": [], "multiplex": 31, "must": [], "mx_bend": 12, "mx_frame_lib": 15, "mxpic": [7, 9, 12, 16, 17, 19, 23, 27, 29, 38], "mxpic_handbook": [], "myself": [30, 44], "mzi": [4, 7, 16], "mzi_2st_ubend": 7, "mzi_butterfli": 7, "mzi_eubend": 7, "mzi_mesh": [7, 16], "mzi_mesh_parl": 7, "mzi_mesh_tri": 7, "mzi_mesh_u": 7, "mzi_n": 7, "mzi_ns_ubend": 7, "mzi_offset": 22, "mzi_ubend": 7, "n": [22, 25, 34], "n_bend": 4, "n_in": 39, "n_layer_list": 22, "n_out": 39, "n_point": [13, 15, 36], "n_port": 4, "n_teeth_si": 26, "n_teeth_sin": 26, "name": [2, 3, 4, 8, 10, 11, 21, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "nano": [], "nano_": 38, "nanoantenna": 37, "nat": [], "nazca": [2, 3, 4, 5, 30, 44], "nd": [30, 44], "ndarrai": 33, "nearest": 5, "need": [5, 30, 44], "neg": [15, 30, 44], "nest": 3, "new": [30, 44], "nitrid": 21, "nld": 24, "node": [30, 44], "nois": 30, "nomin": 3, "non": 37, "none": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43, 44], "normal": 30, "np": [22, 24, 25, 33], "num": [8, 36, 37], "num_i": 37, "num_socr": 30, "num_x": 37, "number": [4, 5, 30, 37, 44], "nw": [22, 24], "object": [2, 3, 4, 5, 8, 10, 11, 13, 14, 15, 18, 21, 22, 24, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "offset": [4, 15, 22, 25, 30, 40, 41, 44], "offset_a": 15, "offset_b": 15, "offset_i": [15, 25, 30, 41], "offset_x": [15, 25, 30, 41], "omit": [3, 4, 5], "op": [], "open": 21, "oper": [3, 18], "opt_eul": 42, "optic": [2, 3, 4, 5, 21, 37], "optim": 42, "option": [2, 3, 4, 5, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "order": [], "ori": [15, 25, 30, 41], "ori_teeth_offset": 26, "orient": [30, 44], "original_funct": [30, 44], "orthogon": [30, 44], "orx": [15, 25, 30, 41], "other": [0, 16, 19], "out": [], "outer": 3, "outer_isl": 3, "outermost": [], "output": [3, 4, 5, 30, 44], "output_numb": 5, "output_pitch": 5, "over": 30, "overal": [], "overrid": [3, 4], "oxid": 21, "oxide_facet": 21, "p": [25, 31], "p_ar": 37, "p_in_n_out": 25, "p_layer_list": 22, "packag": [30, 44], "pad": [9, 21, 22], "pad_60_80": [], "pad_opt": 21, "pair": [], "palik": 18, "para": [], "parabol": 37, "parallel": [30, 44], "parallelogram": 4, "paramet": [2, 3, 4, 5, 8, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "parametr": [], "part": [], "pass": 4, "passiv": [16, 27], "patch": [2, 3, 4, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42, 44], "path": 18, "pattern": 24, "pb": [27, 38], "pbs_1550": [], "pbs_3wg": 38, "pcb": [22, 25, 30, 40, 44], "pd_cband_cel": [], "pdk": [], "pdk_path": [], "per": [], "perform": [], "period": [4, 34, 37], "phase": [4, 22, 30, 37], "photon": 0, "photoresist": 37, "physic": [], "pic": [16, 27], "pin": [0, 3, 4, 5, 16, 18, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "pin1": [30, 44], "pin2": [30, 44], "pin_mrr_mm_adddrop": 23, "pin_mrr_mm_allpass": 23, "pin_mrr_std_allpass": 23, "pin_nam": 10, "pin_wg": [23, 27], "pinstyl": [22, 25, 30, 40, 44], "pitch": [3, 4, 5, 37], "place": [4, 15, 30, 44], "placement": 4, "planar": [], "plane": [], "pld": 24, "point": [30, 44], "polar": [31, 43], "polygon": [12, 15, 16], "polysi_diamet": 37, "polysi_lay": 37, "polysi_vector": 37, "polysilicon": [], "port": [3, 4, 18], "port_align": 4, "port_angl": 42, "port_dist": 18, "port_nam": 18, "port_radiu": 18, "port_symmetr": 35, "port_width": 18, "portpara": 19, "ports_extend": 18, "posit": [3, 30, 37, 44], "possibl": [30, 44], "power": [5, 35], "pp": [22, 24, 25], "pre": [], "preced": [], "preset": [], "primit": [0, 11, 14, 15, 16, 23, 29, 38], "profil": [], "provid": [2, 30, 44], "ps_2st": 29, "ps_2st_straight": 29, "ps_pin": 23, "psr": [31, 38], "psr_1x2": 29, "psr_unit": 43, "purpos": [], "put": [30, 44], "pw": [22, 24], "px": [35, 37], "px_type": 35, "py": [15, 37], "quickstart": [], "qy_pdk_a": [], "r": [8, 11, 42], "r0": [11, 28, 33, 35, 40, 42], "r0_rck": 40, "r1": [28, 40], "r1_att": [28, 30, 40, 41], "r1_att_min": [28, 30, 40, 41], "r1_cp": [28, 30, 40, 41], "r1_rck": 40, "r2": 28, "r2_att": [28, 30, 40, 41], "r2_att_min": [28, 30, 40, 41], "r2_cp": [28, 30, 40, 41], "r_att": [25, 28, 30, 33, 40], "r_att_min": [25, 28, 30, 40], "r_bend": [3, 4, 14, 21, 30, 31, 32, 39, 41, 42], "r_compens": 4, "r_cp": [25, 28, 35], "r_hole": 15, "r_in": 35, "r_max_anti": 35, "r_max_tran": 35, "r_min_anti": 35, "r_out": 30, "r_outer": 28, "r_ratio_mamnu": 42, "r_rck": 40, "r_ring": [18, 25, 28, 30, 41], "r_teeth_ori_si": 26, "r_teeth_ori_sin": 26, "racetrack": [12, 16, 27, 38], "racetrack_mm_adddrop": 38, "racetrack_mm_allpass": 38, "racetrack_std_allpass": 38, "racetrackreson": 38, "radian": [], "radiu": [2, 3, 4, 5, 13, 15, 18, 21, 22, 25, 26, 28, 30, 31, 32, 33, 35, 40, 41, 42, 44], "radius1": [30, 44], "radius2": [30, 44], "rais": 44, "rang": 15, "ratio": [], "ratt": 40, "rbend": 33, "rc_point": 8, "rc_radiu": 8, "rc_ratio": [], "rck": 28, "rd0": 35, "rd1": 35, "re": [8, 11, 14, 15, 30, 33, 35, 36, 39, 40, 41, 42, 43], "reach": [], "rect": 42, "rectangl": [34, 42], "rectangular": [], "reduc": 21, "ref": [30, 44], "refer": [30, 44], "reflect": 21, "reflector": 2, "reflector_vector": 37, "region": [3, 37], "regist": [], "renam": 10, "repeat": [4, 5], "repetit": [37, 39, 42], "res_eic": 30, "reserv": [], "resolut": [3, 15], "reson": 19, "respect": 21, "result": [30, 37, 44], "return": [2, 24, 30, 44], "reus": 3, "reusabl": [], "revers": 4, "rib": [24, 43], "rib2strip": 42, "rib_tap": 24, "rib_tr": 43, "right": [30, 44], "ring": [6, 12, 16, 23, 27, 28, 29, 35, 38], "ring_bus_wg": 38, "ring_phas": 19, "rl": [30, 44], "rm_ratio": [], "rmax": [3, 11, 35], "rmax_bend": 42, "rmin": [3, 31, 35], "rmin_bend": 42, "rmin_bend_cent": 42, "rmin_eul": 42, "robust": [], "root": [], "rotat": [31, 43], "rout": [0, 2, 3, 4, 5, 16, 21, 23, 29, 38], "row": 8, "row_offset": 8, "rr": [30, 44], "rt_bend": [30, 44], "ru0": 35, "ru1": 35, "run": 18, "runfdtd": 18, "sa": [8, 24], "same": 4, "sampl": [], "sample_build": [], "sample_point": 18, "sample_step": 37, "saveflag": 18, "sbend": [30, 44], "sbend_p2p": [30, 44], "sbend_p2p_min": [30, 44], "sbend_rout": [30, 44], "sbend_typ": 35, "scaffold": [], "scalar": [], "scale": [], "scheme": [], "search": 3, "second": [3, 21, 30, 44], "secondari": 21, "section": [2, 3, 4, 21, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "sector": [], "sector_gc": 37, "see": [], "segment": [], "selector": [], "self": [], "separ": [], "sequenc": [], "set": [30, 44], "setch": [], "shape": [4, 30, 31, 37, 42, 43, 44], "share": [], "sharp": [2, 3, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42], "sharp_patch": [2, 3, 11, 15, 25, 28, 30, 32, 33, 35, 39, 40, 41, 42, 44], "sharp_path": [30, 44], "shift": [3, 22, 30, 44], "shifter": [4, 22], "shortest": [30, 44], "should": [], "show": [3, 4, 5], "show_pin": [3, 4, 5, 8, 11, 15, 22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "showpin": [30, 44], "si": [18, 26], "side": [2, 4], "sidelob": [30, 44], "sidewai": [30, 44], "sidewya": [30, 44], "silicon": [0, 18], "simpl": [5, 13], "simu_x": 18, "simubox": 18, "simudatafigureplot": 19, "simul": [16, 17, 37], "simupath": 18, "sin": [21, 26], "sin_rib_wg": 21, "sine": [11, 15, 36, 43], "singl": [], "single_end": 35, "sio2": 18, "size": [21, 30, 44], "slab": 21, "slab_width": 22, "small": [], "socr": 29, "socr_adiabat": 29, "socr_adiabatic_cband": 29, "socr_cband": 29, "soi": 21, "sourc": [], "sourcemod": 18, "sp_cont": 25, "sp_isl_met": 8, "sp_isl_wg": 8, "sp_sc": 24, "sp_via_i2m": 24, "sp_via_x": 8, "space": [4, 8, 24, 25, 26, 28, 30, 32, 33, 35, 37, 40, 41, 42], "specif": [30, 44], "speed": 22, "sphinx": [], "spiral": [11, 27, 38], "spiral_cicle_mm": 38, "spiral_cicle_std": 38, "spiral_circl": 38, "spiral_ord": 11, "spiral_rect_std": 38, "spiral_rectangl": 38, "spline": [], "split": [5, 35], "splitter": [2, 3, 4, 5, 31, 43], "splittingtre": 7, "spot": 21, "spttree": [7, 16], "squar": [], "stage": 3, "stand": [], "standard": 4, "start": [15, 30, 44], "std": [25, 28, 30, 35, 37, 39, 40, 41, 42], "std_crow_v": 29, "std_pic_r": 38, "std_ring_amzi_adddrop": 29, "std_ring_pin": 23, "step": [], "stop": 15, "str": [2, 3, 4, 21, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "straight": [3, 4, 30, 31, 44], "strict_condit": 42, "strip": [2, 3, 4, 11, 14, 15, 18, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "strip_cor": [24, 37], "strip_tr": 43, "strong": 30, "strt": [30, 44], "strt_bend_strt_p2p": [30, 44], "strt_bend_strt_p2p_min": [30, 44], "strt_mm": [30, 44], "strt_mm_p2p": [30, 44], "strt_p2p": [30, 44], "strt_round_courn": 12, "structur": [3, 15, 37], "stub": [3, 4, 5], "style": 3, "success": [], "suffix": [], "sun": [], "suppli": [], "support": [], "suppr": 30, "swap": 4, "symbol": [30, 44], "symmetr": [30, 35, 44], "symmetri": [], "symmetric_bu": 35, "sz": 8, "sz_bu": 28, "sz_ring": 28, "sz_via_i2m": 24, "szvia": 8, "t": [11, 18, 30, 44], "take": [30, 44], "taken": [30, 44], "taper": [3, 4, 21, 27, 30, 38, 44], "taper_length": 37, "taper_p2p": [30, 44], "taper_xs2x": 38, "target": [], "tdc": 35, "te": [], "teeth": [], "teeth_numb": 37, "templat": [], "termin": [], "tessel": [], "test": 22, "theta_arc": [30, 35], "theta_ext": 35, "theta_start": [8, 15], "theta_stop": [8, 15], "thi": [21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "thin_attach": 31, "third": 21, "three": 3, "through": [], "throughout": [], "tilt": 21, "tip": 21, "toctre": [], "toler": 35, "tooth": [], "top": 21, "topologi": 4, "total": 4, "tp_angl": 35, "transit": [21, 38], "translat": [30, 44], "tree": 5, "trench": [3, 21, 25, 28, 30, 31], "triangl": 4, "triangular": 4, "true": [2, 3, 4, 8, 10, 11, 15, 18, 22, 24, 25, 28, 30, 31, 32, 33, 35, 37, 39, 40, 41, 42, 44], "tube": [30, 44], "tube_min": [30, 44], "tunabl": [], "tupl": [30, 44], "tuple_to_complex": 19, "turn": [], "two": [3, 5, 30, 44], "twod_grat": [], "type": [2, 3, 4, 5, 15, 24, 30, 37, 44], "type_tap": 37, "u": [3, 30, 44], "ubend": [30, 44], "ubend_offset": 31, "ubend_p2p": [30, 44], "ubend_rout": [30, 44], "um": [30, 44], "umat_2x2_": 7, "uniform": [], "uninstanti": [], "uniqu": [21, 24, 25, 26, 28, 30, 32, 33, 35, 36, 37, 39, 40, 41, 42, 43], "unit": [4, 27, 29, 37], "unit_mesh_2x2": 4, "univers": 4, "unless": [30, 44], "upper": 4, "upper_isl": 31, "us": [2, 3, 4, 5, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "util": 13, "v": 28, "valu": [5, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "varnam": [22, 25, 30, 40, 44], "vector": 37, "versatil": [], "vertic": [3, 4], "via": [3, 4, 9, 24, 25, 28, 30, 31, 40], "via_cel": 8, "via_h2m": [3, 4, 24, 25, 28, 30, 31, 40], "via_i2m": 25, "via_s2m": [8, 24], "vias_arc": 9, "visibl": [], "w": [4, 8, 11, 14, 33, 34, 36, 43], "w0": [28, 33, 35, 40], "w0_rck": 40, "w0_ring": 30, "w1": [3, 28, 31, 33, 35, 40], "w1_bu": [28, 30, 40, 41], "w1_rck": 40, "w1_ring": 30, "w1_slab": 21, "w1_tp": 32, "w2": [3, 31], "w2_bu": [28, 30, 40, 41], "w2_tp": 32, "w_1": 43, "w_2": 43, "w_arm": [3, 4, 39], "w_arm_min": 3, "w_bend_cent": 42, "w_bend_port": 42, "w_box": 21, "w_box_end": 21, "w_bu": [25, 28, 30, 35, 40], "w_cp": [30, 35], "w_dt": 21, "w_end": [11, 36], "w_grow_rib": 43, "w_grow_strip": 43, "w_gt": 37, "w_heater": [3, 25, 28, 30, 31], "w_ht": [3, 4, 24, 40], "w_i": [24, 25], "w_in": [21, 30, 35], "w_itr": 24, "w_m": 32, "w_metal": [3, 4, 25, 28, 30, 31], "w_metal_pn": 24, "w_mid_slab": 21, "w_mmi": 39, "w_mt": [24, 40], "w_n": [24, 25], "w_n_ct": 24, "w_ncont": 25, "w_out": [30, 35], "w_ovlp": 25, "w_p": [24, 25], "w_p_ct": 24, "w_pcont": 25, "w_plus_max": 22, "w_port": [24, 26, 31, 33, 39, 42], "w_ram": 4, "w_rck": 40, "w_rib": 43, "w_ring": [25, 28, 30, 41], "w_slab": 22, "w_teeth_si": 26, "w_teeth_sin": 26, "w_term": 41, "w_tip_cor": 21, "w_tip_slab": 21, "w_tran": 35, "w_waveguid": 7, "w_wg": [2, 3, 4, 22, 24, 25, 28, 30, 31, 32, 33, 35, 37, 39, 40, 41], "w_wg_slab": 22, "wa": [15, 28], "wa0": 35, "wa1": 35, "wai": [], "waveguid": [2, 3, 4, 21, 24, 28, 29, 30, 44], "waveguide1": [], "waveguide2": [], "waveguide_pin": 23, "wavelength": [], "wb": [15, 28], "wb0": 35, "wb1": 35, "wb_in": 35, "wb_out": 35, "wd0": 35, "wd1": 35, "wd_in": 35, "wd_out": 35, "wdm": 31, "welcom": 0, "wg": 35, "wg_ltp": 35, "wgdope": 23, "when": [4, 5, 30, 44], "where": [30, 44], "whether": [22, 24, 25, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "which": [30, 44], "wideband": [], "width": [2, 3, 4, 8, 10, 13, 15, 18, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "width1": [30, 37, 44], "width2": [30, 37, 44], "width2_mm": [30, 44], "width_mm": [30, 44], "width_typ": [11, 15, 28], "with_txt": 10, "within": [], "wl": 18, "wmin_bend": 42, "wrapper": [3, 4, 37], "write": 18, "written": [], "wu0": 35, "wu1": 35, "wu_in": 35, "wu_out": 35, "x": [8, 10, 11, 14, 15, 18, 22, 24, 25, 30, 31, 32, 33, 34, 35, 36, 39, 40, 41, 42, 43, 44], "x_space": 8, "xout_offset": 39, "xs2x": 43, "xs_1": 43, "xs_2": 43, "xs_cont_wg": [24, 25], "xs_heater": [3, 4, 24, 25, 28, 30, 31], "xs_ht": [3, 24, 40], "xs_l1": 8, "xs_l2": 8, "xs_metal": [3, 4, 24, 25, 28, 30, 31], "xs_metal_imp": 25, "xs_mt": [24, 40], "xs_n": [24, 25], "xs_ncont": [24, 25], "xs_open": 37, "xs_p": [24, 25], "xs_pad": 8, "xs_pcont": [24, 25], "xs_pn_ct": 24, "xs_port": 24, "xs_ring": [25, 28, 30], "xs_sa": 24, "xs_sin": 21, "xs_trench": 21, "xs_via_h2m": 24, "xs_via_s2m": 24, "xs_wg": [2, 3, 4, 24, 28, 30, 31, 35, 37], "xsection": [30, 44], "xya": 10, "y": [5, 18, 30, 44], "y_cut": 15, "y_space": 8, "yb": [27, 38], "ybranch": [5, 38], "ybranch_3wg": 38, "ybranch_t": [], "you": [], "your": [], "z": 18, "zehnder": [3, 4, 22], "\u00b5m": [], "\u03c0": []}, "titles": ["mxPIC Handbook", "mxpic.components.basic", "mxpic.components.composites.LoopMirror", "mxpic.components.composites.MZI", "mxpic.components.composites.MZI_mesh", "mxpic.components.composites.SptTree", "mxpic.components.composites.advance", "Composites", "mxpic.components.electronics.eic_units", "Electronics", "mxpic.components.gds_devices", "mxpic.components.geometry.curves", "Geometry", "mxpic.components.geometry.polygons", "mxpic.components.geometry.racetrack", "mxpic.components.geometry.rings", "Components", "Others", "mxpic.components.others.simulation.DualPortElements", "Simulation", "mxpic.components.pins", "mxpic.components.primitives.EC_dual_layer_px3", "mxpic.components.primitives.active.dev_ps", "Active", "mxpic.components.primitives.active.pin_wg", "mxpic.components.primitives.active.rings", "mxpic.components.primitives.grating_couplers", "Primitives", "mxpic.components.primitives.passive.crows", "Passive", "mxpic.components.primitives.passive.rings", "mxpic.components.primitives.passive.unit", "mxpic.components.primitives.pic.PBS", "mxpic.components.primitives.pic.YBS", "mxpic.components.primitives.pic.bragg", "mxpic.components.primitives.pic.couplers", "mxpic.components.primitives.pic.cross", "mxpic.components.primitives.pic.gratings", "Pic", "mxpic.components.primitives.pic.mmi", "mxpic.components.primitives.pic.racetrack", "mxpic.components.primitives.pic.rings", "mxpic.components.primitives.pic.spiral", "mxpic.components.primitives.pic.taper", "mxpic.components.routing"], "titleterms": {"activ": [22, 23, 24, 25], "adc_std_2x2": 35, "advanc": 6, "aed_r": 41, "aed_ring_pin": 25, "amf_pdk": [], "amzi_w": 4, "autom": [], "basic": 1, "beam_splitt": [], "brag_wdm": 31, "bragg": 34, "bragg_apod": 34, "bs_tdc": 35, "circl": 15, "clothoid": 11, "compon": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "composit": [2, 3, 4, 5, 6, 7], "conchoid": 11, "coupler": 35, "cross": 36, "cross_sin": 36, "crow": 28, "crow_a": 28, "crow_circular_r": 28, "crow_eul_r": 28, "crow_eul_rck": 28, "crow_std_adddrop": 28, "crow_std_allpass": 28, "crx_te_1310": [], "crx_te_1550": [], "cumec_pdk": [], "curv": 11, "dc": 35, "dc_bend": 35, "dc_bend_20_80_cband": [], "dc_bend_4_96_cband": [], "dc_bend_50_50_cband": [], "dc_px3_50_50_cband": [], "dc_px_3sg": 35, "dc_te_1550": [], "dev_p": 22, "device_2x2_fdtd_init": 18, "device_coupl": 18, "device_port": 18, "device_ring_bu": 18, "directional_coupl": [], "document": [], "dualportel": 18, "ec_1550": [], "ec_dual_layer_px3": 21, "ec_te_1550": [], "eic_unit": 8, "electron": [8, 9], "elips": 15, "elipse_du": 15, "euler_crow_bu": 18, "euler_crow_inter_cp": 18, "fa": 37, "gc_sin_si_dual_lay": 26, "gc_std_1d": 37, "gc_std_2d": 37, "gc_te_1310": [], "gc_te_1550": [], "gc_tm_1310": [], "gc_tm_1550": [], "gds_devic": 10, "gds_lib_load": 10, "generate_gds_lib": 10, "geometri": [11, 12, 13, 14, 15], "gpd_1550": [], "grate": 37, "grating_2d_hol": 37, "grating_2d_hole_3rec": 37, "grating_2d_hole_4rec": 37, "grating_coupl": 26, "handbook": 0, "heater_ndop": 22, "hgl_pdk_a": [], "hole": 15, "ic_except": 44, "imecas_pdk": [], "isl": 8, "librari": [], "loopmirror": 2, "mdm": 35, "mdm_adc_te1_1550": [], "mdm_adc_te2_1550": [], "mdm_adc_te3_1550": [], "mmg_1d_d14um_1550_2mod": [], "mmi": 39, "mmi_1x2_te_1310": [], "mmi_1x2_te_1550": [], "mmi_2x2_te_1310": [], "mmi_2x2_te_1550": [], "mmi_ml": 39, "mmi_std": 39, "monitorpara": 18, "mrr_a": 30, "mrr_dw_adddrop": 30, "mrr_dw_allpass": 30, "mrr_mm_adddrop": 30, "mrr_mm_allpass": 30, "mrr_std_adddrop": 30, "mrr_std_allpass": 30, "mrr_std_ring": 30, "multimode_interferomet": [], "mx_bend": 15, "mxpic": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 14, 15, 18, 20, 21, 22, 24, 25, 26, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44], "mzi": 3, "mzi_2st_ubend": 3, "mzi_butterfli": 3, "mzi_eubend": 3, "mzi_mesh": 4, "mzi_mesh_parl": 4, "mzi_mesh_tri": 4, "mzi_mesh_u": 4, "mzi_n": 3, "mzi_ns_ubend": 3, "mzi_ubend": 3, "nano_": 37, "other": [17, 18], "pad": 8, "pad_60_80": [], "passiv": [28, 29, 30, 31], "pb": 32, "pbs_1550": [], "pbs_3wg": 32, "pd_cband_cel": [], "pdk": [], "photon": [], "pic": [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43], "pin": 20, "pin_mrr_mm_adddrop": 25, "pin_mrr_mm_allpass": 25, "pin_mrr_std_allpass": 25, "pin_wg": 24, "polygon": 13, "portpara": 18, "primit": [21, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43], "ps_2st": 31, "ps_2st_straight": 31, "ps_pin": 22, "psr": 43, "psr_1x2": 31, "qy_pdk_a": [], "racetrack": [14, 40], "racetrack_mm_adddrop": 40, "racetrack_mm_allpass": 40, "racetrack_std_allpass": 40, "racetrackreson": 40, "reson": 18, "ring": [15, 25, 30, 41], "ring_bus_wg": 35, "ring_phas": 18, "rout": [22, 25, 30, 40, 44], "silicon": [], "simudatafigureplot": 18, "simul": [18, 19], "socr": 30, "socr_adiabat": 30, "socr_adiabatic_cband": 30, "socr_cband": 30, "spiral": 42, "spiral_cicle_mm": 42, "spiral_cicle_std": 42, "spiral_circl": 42, "spiral_rect_std": 42, "spiral_rectangl": 42, "splittingtre": 5, "spttree": 5, "std_crow_v": 28, "std_pic_r": 41, "std_ring_amzi_adddrop": 30, "std_ring_pin": 25, "strt_round_courn": 13, "structur": [], "taper": [37, 43], "taper_xs2x": 43, "templat": [], "transit": 43, "tuple_to_complex": 18, "umat_2x2_": 4, "unit": 31, "via": 8, "vias_arc": 8, "w_waveguid": 4, "waveguid": 31, "waveguide_pin": 24, "welcom": [], "wgdope": 24, "yb": 33, "ybranch": 33, "ybranch_3wg": 33, "ybranch_t": []}}) \ No newline at end of file diff --git a/docs/source/images/ADC_STD_2x2.png b/docs/source/images/ADC_STD_2x2.png deleted file mode 100644 index 877e271..0000000 Binary files a/docs/source/images/ADC_STD_2x2.png and /dev/null differ diff --git a/docs/source/images/BS_tdc.png b/docs/source/images/BS_tdc.png deleted file mode 100644 index fadacae..0000000 Binary files a/docs/source/images/BS_tdc.png and /dev/null differ diff --git a/docs/source/images/DC.png b/docs/source/images/DC.png deleted file mode 100644 index ed9b64b..0000000 Binary files a/docs/source/images/DC.png and /dev/null differ diff --git a/docs/source/images/DC_bend.png b/docs/source/images/DC_bend.png deleted file mode 100644 index 7ee7944..0000000 Binary files a/docs/source/images/DC_bend.png and /dev/null differ diff --git a/docs/source/images/DC_pX_3sg.png b/docs/source/images/DC_pX_3sg.png deleted file mode 100644 index 69a147a..0000000 Binary files a/docs/source/images/DC_pX_3sg.png and /dev/null differ diff --git a/docs/source/images/EC_dual_layer_px3.png b/docs/source/images/EC_dual_layer_px3.png deleted file mode 100644 index ee81ea4..0000000 Binary files a/docs/source/images/EC_dual_layer_px3.png and /dev/null differ diff --git a/docs/source/images/FA.png b/docs/source/images/FA.png deleted file mode 100644 index 8c30e05..0000000 Binary files a/docs/source/images/FA.png and /dev/null differ diff --git a/docs/source/images/GC_STD_1D.png b/docs/source/images/GC_STD_1D.png deleted file mode 100644 index 003ee7c..0000000 Binary files a/docs/source/images/GC_STD_1D.png and /dev/null differ diff --git a/docs/source/images/GC_STD_2D.png b/docs/source/images/GC_STD_2D.png deleted file mode 100644 index ba0bf2c..0000000 Binary files a/docs/source/images/GC_STD_2D.png and /dev/null differ diff --git a/docs/source/images/GC_SiN_Si_Dual_Layer.png b/docs/source/images/GC_SiN_Si_Dual_Layer.png deleted file mode 100644 index 87f896e..0000000 Binary files a/docs/source/images/GC_SiN_Si_Dual_Layer.png and /dev/null differ diff --git a/docs/source/images/Grating_2D_Hole.png b/docs/source/images/Grating_2D_Hole.png deleted file mode 100644 index 75c2cce..0000000 Binary files a/docs/source/images/Grating_2D_Hole.png and /dev/null differ diff --git a/docs/source/images/MDM.png b/docs/source/images/MDM.png deleted file mode 100644 index ed883cd..0000000 Binary files a/docs/source/images/MDM.png and /dev/null differ diff --git a/docs/source/images/MMI_ML.png b/docs/source/images/MMI_ML.png deleted file mode 100644 index 5a9cf27..0000000 Binary files a/docs/source/images/MMI_ML.png and /dev/null differ diff --git a/docs/source/images/MMI_STD.png b/docs/source/images/MMI_STD.png deleted file mode 100644 index 91d447b..0000000 Binary files a/docs/source/images/MMI_STD.png and /dev/null differ diff --git a/docs/source/images/Nano_ant.png b/docs/source/images/Nano_ant.png deleted file mode 100644 index 3106854..0000000 Binary files a/docs/source/images/Nano_ant.png and /dev/null differ diff --git a/docs/source/images/Spiral_Cicle_MM.png b/docs/source/images/Spiral_Cicle_MM.png deleted file mode 100644 index de446f0..0000000 Binary files a/docs/source/images/Spiral_Cicle_MM.png and /dev/null differ diff --git a/docs/source/images/Spiral_Cicle_STD.png b/docs/source/images/Spiral_Cicle_STD.png deleted file mode 100644 index a59a338..0000000 Binary files a/docs/source/images/Spiral_Cicle_STD.png and /dev/null differ diff --git a/docs/source/images/Spiral_Rect_STD.png b/docs/source/images/Spiral_Rect_STD.png deleted file mode 100644 index 9b66782..0000000 Binary files a/docs/source/images/Spiral_Rect_STD.png and /dev/null differ diff --git a/docs/source/images/Taper.png b/docs/source/images/Taper.png deleted file mode 100644 index 21bfd66..0000000 Binary files a/docs/source/images/Taper.png and /dev/null differ diff --git a/docs/source/images/YBranch.png b/docs/source/images/YBranch.png deleted file mode 100644 index b9f5e47..0000000 Binary files a/docs/source/images/YBranch.png and /dev/null differ diff --git a/docs/source/images/Ybranch_3wg.png b/docs/source/images/Ybranch_3wg.png deleted file mode 100644 index 3557c5f..0000000 Binary files a/docs/source/images/Ybranch_3wg.png and /dev/null differ diff --git a/docs/source/images/active/AED_Ring_PIN.png b/docs/source/images/active/AED_Ring_PIN.png index 7f34e13..04d7151 100644 Binary files a/docs/source/images/active/AED_Ring_PIN.png and b/docs/source/images/active/AED_Ring_PIN.png differ diff --git a/docs/source/images/active/Heater_NDoped.png b/docs/source/images/active/Heater_NDoped.png index 584f083..3b2cfd8 100644 Binary files a/docs/source/images/active/Heater_NDoped.png and b/docs/source/images/active/Heater_NDoped.png differ diff --git a/docs/source/images/active/PIN_MRR_MM_Adddrop.png b/docs/source/images/active/PIN_MRR_MM_Adddrop.png index 0ce77ed..9ac8089 100644 Binary files a/docs/source/images/active/PIN_MRR_MM_Adddrop.png and b/docs/source/images/active/PIN_MRR_MM_Adddrop.png differ diff --git a/docs/source/images/active/PIN_MRR_MM_Allpass.png b/docs/source/images/active/PIN_MRR_MM_Allpass.png index b704736..57c1444 100644 Binary files a/docs/source/images/active/PIN_MRR_MM_Allpass.png and b/docs/source/images/active/PIN_MRR_MM_Allpass.png differ diff --git a/docs/source/images/active/PIN_MRR_STD_Allpass.png b/docs/source/images/active/PIN_MRR_STD_Allpass.png index f65824d..cd4de93 100644 Binary files a/docs/source/images/active/PIN_MRR_STD_Allpass.png and b/docs/source/images/active/PIN_MRR_STD_Allpass.png differ diff --git a/docs/source/images/active/PS_PIN.png b/docs/source/images/active/PS_PIN.png index a73c3a6..c36920e 100644 Binary files a/docs/source/images/active/PS_PIN.png and b/docs/source/images/active/PS_PIN.png differ diff --git a/docs/source/images/active/STD_Ring_PIN.png b/docs/source/images/active/STD_Ring_PIN.png index b1ef95a..3550754 100644 Binary files a/docs/source/images/active/STD_Ring_PIN.png and b/docs/source/images/active/STD_Ring_PIN.png differ diff --git a/docs/source/images/active/WGDoped.png b/docs/source/images/active/WGDoped.png index cc58e90..0f2ed71 100644 Binary files a/docs/source/images/active/WGDoped.png and b/docs/source/images/active/WGDoped.png differ diff --git a/docs/source/images/active/waveguide_PIN.png b/docs/source/images/active/waveguide_PIN.png index 29aaff3..e6ca13a 100644 Binary files a/docs/source/images/active/waveguide_PIN.png and b/docs/source/images/active/waveguide_PIN.png differ diff --git a/docs/source/images/passive/Brag_WDM.png b/docs/source/images/passive/Brag_WDM.png index 20bf2f4..a3d8bbd 100644 Binary files a/docs/source/images/passive/Brag_WDM.png and b/docs/source/images/passive/Brag_WDM.png differ diff --git a/docs/source/images/passive/CROW_AED.png b/docs/source/images/passive/CROW_AED.png index 38ca120..b18b4a0 100644 Binary files a/docs/source/images/passive/CROW_AED.png and b/docs/source/images/passive/CROW_AED.png differ diff --git a/docs/source/images/passive/CROW_Circular_ring.png b/docs/source/images/passive/CROW_Circular_ring.png deleted file mode 100644 index 4249e29..0000000 Binary files a/docs/source/images/passive/CROW_Circular_ring.png and /dev/null differ diff --git a/docs/source/images/passive/CROW_Eul_RCK.png b/docs/source/images/passive/CROW_Eul_RCK.png index c29d5a4..4d3802d 100644 Binary files a/docs/source/images/passive/CROW_Eul_RCK.png and b/docs/source/images/passive/CROW_Eul_RCK.png differ diff --git a/docs/source/images/passive/CROW_Eul_Ring.png b/docs/source/images/passive/CROW_Eul_Ring.png index 1dff58c..ffe4412 100644 Binary files a/docs/source/images/passive/CROW_Eul_Ring.png and b/docs/source/images/passive/CROW_Eul_Ring.png differ diff --git a/docs/source/images/passive/CROW_STD_Adddrop.png b/docs/source/images/passive/CROW_STD_Adddrop.png index 15cf4ff..eda53e4 100644 Binary files a/docs/source/images/passive/CROW_STD_Adddrop.png and b/docs/source/images/passive/CROW_STD_Adddrop.png differ diff --git a/docs/source/images/passive/CROW_STD_Allpass.png b/docs/source/images/passive/CROW_STD_Allpass.png index 08fbece..b657058 100644 Binary files a/docs/source/images/passive/CROW_STD_Allpass.png and b/docs/source/images/passive/CROW_STD_Allpass.png differ diff --git a/docs/source/images/passive/MRR_AED.png b/docs/source/images/passive/MRR_AED.png deleted file mode 100644 index 7cff766..0000000 Binary files a/docs/source/images/passive/MRR_AED.png and /dev/null differ diff --git a/docs/source/images/passive/MRR_DW_Adddrop.png b/docs/source/images/passive/MRR_DW_Adddrop.png index 2b7dc55..6516148 100644 Binary files a/docs/source/images/passive/MRR_DW_Adddrop.png and b/docs/source/images/passive/MRR_DW_Adddrop.png differ diff --git a/docs/source/images/passive/MRR_DW_Allpass.png b/docs/source/images/passive/MRR_DW_Allpass.png index 0b08847..f016ad6 100644 Binary files a/docs/source/images/passive/MRR_DW_Allpass.png and b/docs/source/images/passive/MRR_DW_Allpass.png differ diff --git a/docs/source/images/passive/MRR_MM_Adddrop.png b/docs/source/images/passive/MRR_MM_Adddrop.png index e1a53e9..15e1867 100644 Binary files a/docs/source/images/passive/MRR_MM_Adddrop.png and b/docs/source/images/passive/MRR_MM_Adddrop.png differ diff --git a/docs/source/images/passive/MRR_MM_Allpass.png b/docs/source/images/passive/MRR_MM_Allpass.png index c19a795..4e6a5c9 100644 Binary files a/docs/source/images/passive/MRR_MM_Allpass.png and b/docs/source/images/passive/MRR_MM_Allpass.png differ diff --git a/docs/source/images/passive/MRR_STD_Adddrop.png b/docs/source/images/passive/MRR_STD_Adddrop.png index 1e35289..2d29ced 100644 Binary files a/docs/source/images/passive/MRR_STD_Adddrop.png and b/docs/source/images/passive/MRR_STD_Adddrop.png differ diff --git a/docs/source/images/passive/MRR_STD_Allpass.png b/docs/source/images/passive/MRR_STD_Allpass.png index 37b827d..118f983 100644 Binary files a/docs/source/images/passive/MRR_STD_Allpass.png and b/docs/source/images/passive/MRR_STD_Allpass.png differ diff --git a/docs/source/images/passive/MRR_STD_Ring.png b/docs/source/images/passive/MRR_STD_Ring.png deleted file mode 100644 index afbf26c..0000000 Binary files a/docs/source/images/passive/MRR_STD_Ring.png and /dev/null differ diff --git a/docs/source/images/passive/PSR_1x2.png b/docs/source/images/passive/PSR_1x2.png index fa21672..c75ed8e 100644 Binary files a/docs/source/images/passive/PSR_1x2.png and b/docs/source/images/passive/PSR_1x2.png differ diff --git a/docs/source/images/passive/PS_2st.png b/docs/source/images/passive/PS_2st.png index ecd7015..f5f9156 100644 Binary files a/docs/source/images/passive/PS_2st.png and b/docs/source/images/passive/PS_2st.png differ diff --git a/docs/source/images/passive/PS_2st_Straight.png b/docs/source/images/passive/PS_2st_Straight.png index 2c24265..51bb9dd 100644 Binary files a/docs/source/images/passive/PS_2st_Straight.png and b/docs/source/images/passive/PS_2st_Straight.png differ diff --git a/docs/source/images/passive/SOCR.png b/docs/source/images/passive/SOCR.png deleted file mode 100644 index 42c82a5..0000000 Binary files a/docs/source/images/passive/SOCR.png and /dev/null differ diff --git a/docs/source/images/passive/SOCR_Adiabatic.png b/docs/source/images/passive/SOCR_Adiabatic.png deleted file mode 100644 index 8c98f6d..0000000 Binary files a/docs/source/images/passive/SOCR_Adiabatic.png and /dev/null differ diff --git a/docs/source/images/passive/SOCR_Adiabatic_Cband.png b/docs/source/images/passive/SOCR_Adiabatic_Cband.png deleted file mode 100644 index a463f9c..0000000 Binary files a/docs/source/images/passive/SOCR_Adiabatic_Cband.png and /dev/null differ diff --git a/docs/source/images/passive/SOCR_Cband.png b/docs/source/images/passive/SOCR_Cband.png deleted file mode 100644 index 4f7440f..0000000 Binary files a/docs/source/images/passive/SOCR_Cband.png and /dev/null differ diff --git a/docs/source/images/passive/STD_CROW_V.png b/docs/source/images/passive/STD_CROW_V.png deleted file mode 100644 index 6218d8e..0000000 Binary files a/docs/source/images/passive/STD_CROW_V.png and /dev/null differ diff --git a/docs/source/images/passive/STD_ring_AMZI_adddrop.png b/docs/source/images/passive/STD_ring_AMZI_adddrop.png index e992dd9..dd9260d 100644 Binary files a/docs/source/images/passive/STD_ring_AMZI_adddrop.png and b/docs/source/images/passive/STD_ring_AMZI_adddrop.png differ diff --git a/docs/source/images/passive/waveguide.png b/docs/source/images/passive/waveguide.png index a74e209..aefd9ac 100644 Binary files a/docs/source/images/passive/waveguide.png and b/docs/source/images/passive/waveguide.png differ diff --git a/docs/source/images/pic/ADC_STD_2x2.png b/docs/source/images/pic/ADC_STD_2x2.png index a97ed9a..2bdd6e6 100644 Binary files a/docs/source/images/pic/ADC_STD_2x2.png and b/docs/source/images/pic/ADC_STD_2x2.png differ diff --git a/docs/source/images/pic/AED_ring.png b/docs/source/images/pic/AED_ring.png index 51bc25d..62a79a2 100644 Binary files a/docs/source/images/pic/AED_ring.png and b/docs/source/images/pic/AED_ring.png differ diff --git a/docs/source/images/pic/BS_tdc.png b/docs/source/images/pic/BS_tdc.png index fadacae..bd602c8 100644 Binary files a/docs/source/images/pic/BS_tdc.png and b/docs/source/images/pic/BS_tdc.png differ diff --git a/docs/source/images/pic/Bragg.png b/docs/source/images/pic/Bragg.png index 0c80fdb..a704faf 100644 Binary files a/docs/source/images/pic/Bragg.png and b/docs/source/images/pic/Bragg.png differ diff --git a/docs/source/images/pic/Bragg_apodized.png b/docs/source/images/pic/Bragg_apodized.png index ad75ea7..e7be6d0 100644 Binary files a/docs/source/images/pic/Bragg_apodized.png and b/docs/source/images/pic/Bragg_apodized.png differ diff --git a/docs/source/images/pic/Cross.png b/docs/source/images/pic/Cross.png index 68b134c..9f68d6d 100644 Binary files a/docs/source/images/pic/Cross.png and b/docs/source/images/pic/Cross.png differ diff --git a/docs/source/images/pic/Cross_Sine.png b/docs/source/images/pic/Cross_Sine.png index 67bdd2c..11d94a0 100644 Binary files a/docs/source/images/pic/Cross_Sine.png and b/docs/source/images/pic/Cross_Sine.png differ diff --git a/docs/source/images/pic/DC.png b/docs/source/images/pic/DC.png index ed9b64b..5733b54 100644 Binary files a/docs/source/images/pic/DC.png and b/docs/source/images/pic/DC.png differ diff --git a/docs/source/images/pic/DC_bend.png b/docs/source/images/pic/DC_bend.png index 7ee7944..c6fa387 100644 Binary files a/docs/source/images/pic/DC_bend.png and b/docs/source/images/pic/DC_bend.png differ diff --git a/docs/source/images/pic/DC_pX_3sg.png b/docs/source/images/pic/DC_pX_3sg.png index 69a147a..60fdd99 100644 Binary files a/docs/source/images/pic/DC_pX_3sg.png and b/docs/source/images/pic/DC_pX_3sg.png differ diff --git a/docs/source/images/pic/FA.png b/docs/source/images/pic/FA.png deleted file mode 100644 index 8c30e05..0000000 Binary files a/docs/source/images/pic/FA.png and /dev/null differ diff --git a/docs/source/images/pic/GC_STD_1D.png b/docs/source/images/pic/GC_STD_1D.png deleted file mode 100644 index 8795ded..0000000 Binary files a/docs/source/images/pic/GC_STD_1D.png and /dev/null differ diff --git a/docs/source/images/pic/GC_STD_2D.png b/docs/source/images/pic/GC_STD_2D.png deleted file mode 100644 index ba0bf2c..0000000 Binary files a/docs/source/images/pic/GC_STD_2D.png and /dev/null differ diff --git a/docs/source/images/pic/Grating_2D_Hole.png b/docs/source/images/pic/Grating_2D_Hole.png deleted file mode 100644 index 75c2cce..0000000 Binary files a/docs/source/images/pic/Grating_2D_Hole.png and /dev/null differ diff --git a/docs/source/images/pic/Grating_2D_Hole_3Rec.png b/docs/source/images/pic/Grating_2D_Hole_3Rec.png deleted file mode 100644 index 1c0c8e9..0000000 Binary files a/docs/source/images/pic/Grating_2D_Hole_3Rec.png and /dev/null differ diff --git a/docs/source/images/pic/Grating_2D_Hole_4Rec.png b/docs/source/images/pic/Grating_2D_Hole_4Rec.png deleted file mode 100644 index 881abcc..0000000 Binary files a/docs/source/images/pic/Grating_2D_Hole_4Rec.png and /dev/null differ diff --git a/docs/source/images/pic/MDM.png b/docs/source/images/pic/MDM.png index a76591c..7c469d6 100644 Binary files a/docs/source/images/pic/MDM.png and b/docs/source/images/pic/MDM.png differ diff --git a/docs/source/images/pic/MMI_ML.png b/docs/source/images/pic/MMI_ML.png index 5a9cf27..cc25e60 100644 Binary files a/docs/source/images/pic/MMI_ML.png and b/docs/source/images/pic/MMI_ML.png differ diff --git a/docs/source/images/pic/MMI_STD.png b/docs/source/images/pic/MMI_STD.png index 91d447b..af3a34b 100644 Binary files a/docs/source/images/pic/MMI_STD.png and b/docs/source/images/pic/MMI_STD.png differ diff --git a/docs/source/images/pic/Nano_ant.png b/docs/source/images/pic/Nano_ant.png deleted file mode 100644 index 3106854..0000000 Binary files a/docs/source/images/pic/Nano_ant.png and /dev/null differ diff --git a/docs/source/images/pic/PBS_3wg.png b/docs/source/images/pic/PBS_3wg.png index 90ddc83..47ac7f9 100644 Binary files a/docs/source/images/pic/PBS_3wg.png and b/docs/source/images/pic/PBS_3wg.png differ diff --git a/docs/source/images/pic/PSR.png b/docs/source/images/pic/PSR.png index a22b1a4..884d166 100644 Binary files a/docs/source/images/pic/PSR.png and b/docs/source/images/pic/PSR.png differ diff --git a/docs/source/images/pic/RacetrackResonator.png b/docs/source/images/pic/RacetrackResonator.png index 549ee01..0724714 100644 Binary files a/docs/source/images/pic/RacetrackResonator.png and b/docs/source/images/pic/RacetrackResonator.png differ diff --git a/docs/source/images/pic/Racetrack_MM_Adddrop.png b/docs/source/images/pic/Racetrack_MM_Adddrop.png index 5fa7dbb..d68d9b7 100644 Binary files a/docs/source/images/pic/Racetrack_MM_Adddrop.png and b/docs/source/images/pic/Racetrack_MM_Adddrop.png differ diff --git a/docs/source/images/pic/Racetrack_MM_Allpass.png b/docs/source/images/pic/Racetrack_MM_Allpass.png index cf05de1..3841212 100644 Binary files a/docs/source/images/pic/Racetrack_MM_Allpass.png and b/docs/source/images/pic/Racetrack_MM_Allpass.png differ diff --git a/docs/source/images/pic/Racetrack_STD_Allpass.png b/docs/source/images/pic/Racetrack_STD_Allpass.png index 3c1b860..cdae78e 100644 Binary files a/docs/source/images/pic/Racetrack_STD_Allpass.png and b/docs/source/images/pic/Racetrack_STD_Allpass.png differ diff --git a/docs/source/images/pic/STD_PIC_Rings.png b/docs/source/images/pic/STD_PIC_Rings.png index 086501c..6f919d7 100644 Binary files a/docs/source/images/pic/STD_PIC_Rings.png and b/docs/source/images/pic/STD_PIC_Rings.png differ diff --git a/docs/source/images/pic/Spiral_Cicle_MM.png b/docs/source/images/pic/Spiral_Cicle_MM.png index de446f0..3b168c7 100644 Binary files a/docs/source/images/pic/Spiral_Cicle_MM.png and b/docs/source/images/pic/Spiral_Cicle_MM.png differ diff --git a/docs/source/images/pic/Spiral_Cicle_STD.png b/docs/source/images/pic/Spiral_Cicle_STD.png index a59a338..d6e4bc8 100644 Binary files a/docs/source/images/pic/Spiral_Cicle_STD.png and b/docs/source/images/pic/Spiral_Cicle_STD.png differ diff --git a/docs/source/images/pic/Spiral_Rect_STD.png b/docs/source/images/pic/Spiral_Rect_STD.png index 35ca0ea..3b8b9e6 100644 Binary files a/docs/source/images/pic/Spiral_Rect_STD.png and b/docs/source/images/pic/Spiral_Rect_STD.png differ diff --git a/docs/source/images/pic/Taper.png b/docs/source/images/pic/Taper.png deleted file mode 100644 index 21bfd66..0000000 Binary files a/docs/source/images/pic/Taper.png and /dev/null differ diff --git a/docs/source/images/pic/YBranch.png b/docs/source/images/pic/YBranch.png index b9f5e47..fefb931 100644 Binary files a/docs/source/images/pic/YBranch.png and b/docs/source/images/pic/YBranch.png differ diff --git a/docs/source/images/pic/Ybranch_3wg.png b/docs/source/images/pic/Ybranch_3wg.png index 3557c5f..18887d0 100644 Binary files a/docs/source/images/pic/Ybranch_3wg.png and b/docs/source/images/pic/Ybranch_3wg.png differ diff --git a/docs/source/images/pic/ring_bus_wg.png b/docs/source/images/pic/ring_bus_wg.png index 1b6b3b3..a8b3a25 100644 Binary files a/docs/source/images/pic/ring_bus_wg.png and b/docs/source/images/pic/ring_bus_wg.png differ diff --git a/docs/source/images/pic/spiral.png b/docs/source/images/pic/spiral.png index 14fd429..d6b5d03 100644 Binary files a/docs/source/images/pic/spiral.png and b/docs/source/images/pic/spiral.png differ diff --git a/docs/source/images/pic/spiral_circle.png b/docs/source/images/pic/spiral_circle.png index 195a806..6a5157e 100644 Binary files a/docs/source/images/pic/spiral_circle.png and b/docs/source/images/pic/spiral_circle.png differ diff --git a/docs/source/images/pic/spiral_rectangle.png b/docs/source/images/pic/spiral_rectangle.png index 3d13ddf..8e6e73f 100644 Binary files a/docs/source/images/pic/spiral_rectangle.png and b/docs/source/images/pic/spiral_rectangle.png differ diff --git a/docs/source/images/pic/taper_xs2xs.png b/docs/source/images/pic/taper_xs2xs.png index 884b21c..571ed0b 100644 Binary files a/docs/source/images/pic/taper_xs2xs.png and b/docs/source/images/pic/taper_xs2xs.png differ diff --git a/docs/source/images/pic/transition.png b/docs/source/images/pic/transition.png index b0a61ea..07f9c58 100644 Binary files a/docs/source/images/pic/transition.png and b/docs/source/images/pic/transition.png differ diff --git a/docs/source/images/ring_bus_wg.png b/docs/source/images/ring_bus_wg.png deleted file mode 100644 index 1b6b3b3..0000000 Binary files a/docs/source/images/ring_bus_wg.png and /dev/null differ diff --git a/docs/source/images/spiral.png b/docs/source/images/spiral.png deleted file mode 100644 index 14fd429..0000000 Binary files a/docs/source/images/spiral.png and /dev/null differ diff --git a/docs/source/images/spiral_circle.png b/docs/source/images/spiral_circle.png deleted file mode 100644 index 195a806..0000000 Binary files a/docs/source/images/spiral_circle.png and /dev/null differ diff --git a/docs/source/images/spiral_rectangle.png b/docs/source/images/spiral_rectangle.png deleted file mode 100644 index 15945a4..0000000 Binary files a/docs/source/images/spiral_rectangle.png and /dev/null differ diff --git a/docs/source/mxpic/components/geometry/index.md b/docs/source/mxpic/components/geometry/index.md index 8284e52..b6168ff 100644 --- a/docs/source/mxpic/components/geometry/index.md +++ b/docs/source/mxpic/components/geometry/index.md @@ -1,12 +1,10 @@ # Geometry -Reusable geometry structures used by component and primitive generators. - ```{toctree} :maxdepth: 2 -polygons -rings curves +polygons racetrack +rings ``` diff --git a/docs/source/mxpic/components/index.md b/docs/source/mxpic/components/index.md index 32b47a3..f7891b5 100644 --- a/docs/source/mxpic/components/index.md +++ b/docs/source/mxpic/components/index.md @@ -5,12 +5,11 @@ composites/index electronics/index +geometry/index others/index -pdks/index primitives/index basic gds_devices pins routing -geometry/index ``` diff --git a/docs/source/mxpic/components/pdks/AMF_pdk.md b/docs/source/mxpic/components/pdks/AMF_pdk.md deleted file mode 100644 index 0a7e3fb..0000000 --- a/docs/source/mxpic/components/pdks/AMF_pdk.md +++ /dev/null @@ -1,33 +0,0 @@ -# mxpic.components.pdks.AMF_pdk - -```{eval-rst} -.. automodule:: mxpic.components.pdks.AMF_pdk - :no-members: -``` - -## GC_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.AMF_pdk.GC_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_TE_1310 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.AMF_pdk.GC_TE_1310 - :members: - :undoc-members: - :show-inheritance: -``` - -## PD_Cband_Cell - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.AMF_pdk.PD_Cband_Cell - :members: - :undoc-members: - :show-inheritance: -``` diff --git a/docs/source/mxpic/components/pdks/CUMEC_pdk.md b/docs/source/mxpic/components/pdks/CUMEC_pdk.md deleted file mode 100644 index d36476f..0000000 --- a/docs/source/mxpic/components/pdks/CUMEC_pdk.md +++ /dev/null @@ -1,105 +0,0 @@ -# mxpic.components.pdks.CUMEC_pdk - -```{eval-rst} -.. automodule:: mxpic.components.pdks.CUMEC_pdk - :no-members: -``` - -## PAD_60_80 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.PAD_60_80 - :members: - :undoc-members: - :show-inheritance: -``` - -## GPD_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.GPD_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## EC_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.EC_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.GC_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_TM_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.GC_TM_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_TE_1310 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.GC_TE_1310 - :members: - :undoc-members: - :show-inheritance: -``` - -## MMI_1x2_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.MMI_1x2_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## MMI_1x2_TE_1310 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.MMI_1x2_TE_1310 - :members: - :undoc-members: - :show-inheritance: -``` - -## MMI_2x2_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.MMI_2x2_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## CRX_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.CRX_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## PBS_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.CUMEC_pdk.PBS_1550 - :members: - :undoc-members: - :show-inheritance: -``` diff --git a/docs/source/mxpic/components/pdks/IMECAS_pdk.md b/docs/source/mxpic/components/pdks/IMECAS_pdk.md deleted file mode 100644 index 2a16b1f..0000000 --- a/docs/source/mxpic/components/pdks/IMECAS_pdk.md +++ /dev/null @@ -1,132 +0,0 @@ -# mxpic.components.pdks.IMECAS_pdk - -```{eval-rst} -.. automodule:: mxpic.components.pdks.IMECAS_pdk - :no-members: -``` - -## Template - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.Template - :members: - :undoc-members: - :show-inheritance: -``` - -## EC_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.EC_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.GC_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_TM_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.GC_TM_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_TE_1310 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.GC_TE_1310 - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_TM_1310 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.GC_TM_1310 - :members: - :undoc-members: - :show-inheritance: -``` - -## DC_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.DC_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## MMI_2x2_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.MMI_2x2_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## MMI_1x2_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.MMI_1x2_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## MMI_2x2_TE_1310 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.MMI_2x2_TE_1310 - :members: - :undoc-members: - :show-inheritance: -``` - -## MMI_1x2_TE_1310 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.MMI_1x2_TE_1310 - :members: - :undoc-members: - :show-inheritance: -``` - -## Ybranch_TE - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.Ybranch_TE - :members: - :undoc-members: - :show-inheritance: -``` - -## CRX_TE_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.CRX_TE_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## CRX_TE_1310 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.IMECAS_pdk.CRX_TE_1310 - :members: - :undoc-members: - :show-inheritance: -``` diff --git a/docs/source/mxpic/components/pdks/hgl_pdk_A.md b/docs/source/mxpic/components/pdks/hgl_pdk_A.md deleted file mode 100644 index 12b6799..0000000 --- a/docs/source/mxpic/components/pdks/hgl_pdk_A.md +++ /dev/null @@ -1,33 +0,0 @@ -# mxpic.components.pdks.hgl_pdk_A - -```{eval-rst} -.. automodule:: mxpic.components.pdks.hgl_pdk_A - :no-members: -``` - -## DC_bend_50_50_Cband - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.hgl_pdk_A.DC_bend_50_50_Cband - :members: - :undoc-members: - :show-inheritance: -``` - -## DC_bend_20_80_Cband - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.hgl_pdk_A.DC_bend_20_80_Cband - :members: - :undoc-members: - :show-inheritance: -``` - -## DC_bend_4_96_Cband - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.hgl_pdk_A.DC_bend_4_96_Cband - :members: - :undoc-members: - :show-inheritance: -``` diff --git a/docs/source/mxpic/components/pdks/index.md b/docs/source/mxpic/components/pdks/index.md deleted file mode 100644 index 73524d0..0000000 --- a/docs/source/mxpic/components/pdks/index.md +++ /dev/null @@ -1,11 +0,0 @@ -# Pdks - -```{toctree} - :maxdepth: 2 - -AMF_pdk -CUMEC_pdk -IMECAS_pdk -hgl_pdk_A -qy_pdk_A -``` diff --git a/docs/source/mxpic/components/pdks/qy_pdk_A.md b/docs/source/mxpic/components/pdks/qy_pdk_A.md deleted file mode 100644 index 8a228ea..0000000 --- a/docs/source/mxpic/components/pdks/qy_pdk_A.md +++ /dev/null @@ -1,51 +0,0 @@ -# mxpic.components.pdks.qy_pdk_A - -```{eval-rst} -.. automodule:: mxpic.components.pdks.qy_pdk_A - :no-members: -``` - -## DC_pX3_50_50_Cband - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.qy_pdk_A.DC_pX3_50_50_Cband - :members: - :undoc-members: - :show-inheritance: -``` - -## MMG_1D_D14um_1550_2modes - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.qy_pdk_A.MMG_1D_D14um_1550_2modes - :members: - :undoc-members: - :show-inheritance: -``` - -## MDM_ADC_TE1_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.qy_pdk_A.MDM_ADC_TE1_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## MDM_ADC_TE2_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.qy_pdk_A.MDM_ADC_TE2_1550 - :members: - :undoc-members: - :show-inheritance: -``` - -## MDM_ADC_TE3_1550 - -```{eval-rst} -.. autoclass:: mxpic.components.pdks.qy_pdk_A.MDM_ADC_TE3_1550 - :members: - :undoc-members: - :show-inheritance: -``` diff --git a/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md b/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md index 64504cf..73c6493 100644 --- a/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md +++ b/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md @@ -8,10 +8,6 @@ ## EC_dual_layer_px3 ```{eval-rst} -.. image:: EC_dual_layer_px3.png - :align: center - :width: 600px - .. autoclass:: mxpic.components.primitives.EC_dual_layer_px3.EC_dual_layer_px3 :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/active/dev_ps.md b/docs/source/mxpic/components/primitives/active/dev_ps.md index 4662e8a..ebfe92b 100644 --- a/docs/source/mxpic/components/primitives/active/dev_ps.md +++ b/docs/source/mxpic/components/primitives/active/dev_ps.md @@ -17,6 +17,10 @@ ## Heater_NDoped ```{eval-rst} +.. image:: ../../../../images/active/Heater_NDoped.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.dev_ps.Heater_NDoped :members: :undoc-members: @@ -26,6 +30,10 @@ ## PS_PIN ```{eval-rst} +.. image:: ../../../../images/active/PS_PIN.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.dev_ps.PS_PIN :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/active/pin_wg.md b/docs/source/mxpic/components/primitives/active/pin_wg.md index 38a8483..702b7f0 100644 --- a/docs/source/mxpic/components/primitives/active/pin_wg.md +++ b/docs/source/mxpic/components/primitives/active/pin_wg.md @@ -8,6 +8,10 @@ ## waveguide_PIN ```{eval-rst} +.. image:: ../../../../images/active/waveguide_PIN.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.pin_wg.waveguide_PIN :members: :undoc-members: @@ -17,6 +21,10 @@ ## WGDoped ```{eval-rst} +.. image:: ../../../../images/active/WGDoped.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.pin_wg.WGDoped :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/active/rings.md b/docs/source/mxpic/components/primitives/active/rings.md index c440905..f792da4 100644 --- a/docs/source/mxpic/components/primitives/active/rings.md +++ b/docs/source/mxpic/components/primitives/active/rings.md @@ -17,6 +17,10 @@ ## AED_Ring_PIN ```{eval-rst} +.. image:: ../../../../images/active/AED_Ring_PIN.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.AED_Ring_PIN :members: :undoc-members: @@ -26,6 +30,10 @@ ## STD_Ring_PIN ```{eval-rst} +.. image:: ../../../../images/active/STD_Ring_PIN.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.STD_Ring_PIN :members: :undoc-members: @@ -35,6 +43,10 @@ ## PIN_MRR_MM_Allpass ```{eval-rst} +.. image:: ../../../../images/active/PIN_MRR_MM_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.PIN_MRR_MM_Allpass :members: :undoc-members: @@ -44,6 +56,10 @@ ## PIN_MRR_MM_Adddrop ```{eval-rst} +.. image:: ../../../../images/active/PIN_MRR_MM_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.PIN_MRR_MM_Adddrop :members: :undoc-members: @@ -53,6 +69,10 @@ ## PIN_MRR_STD_Allpass ```{eval-rst} +.. image:: ../../../../images/active/PIN_MRR_STD_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.active.rings.PIN_MRR_STD_Allpass :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/beam_splitters.md b/docs/source/mxpic/components/primitives/beam_splitters.md deleted file mode 100644 index 0e01922..0000000 --- a/docs/source/mxpic/components/primitives/beam_splitters.md +++ /dev/null @@ -1,32 +0,0 @@ -# mxpic.components.primitives.beam_splitters - -```{eval-rst} -.. automodule:: mxpic.components.primitives.beam_splitters - :no-members: -``` - -## YBranch - -```{eval-rst} -.. image:: YBranch.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.beam_splitters.YBranch - :members: - :undoc-members: - :show-inheritance: -``` - -## Ybranch_3wg - -```{eval-rst} -.. image:: Ybranch_3wg.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.beam_splitters.Ybranch_3wg - :members: - :undoc-members: - :show-inheritance: -``` diff --git a/docs/source/mxpic/components/primitives/directional_couplers.md b/docs/source/mxpic/components/primitives/directional_couplers.md deleted file mode 100644 index 5778932..0000000 --- a/docs/source/mxpic/components/primitives/directional_couplers.md +++ /dev/null @@ -1,97 +0,0 @@ -# mxpic.components.primitives.directional_couplers - -```{eval-rst} -.. automodule:: mxpic.components.primitives.directional_couplers - :no-members: -``` - -## ring_bus_wg - -```{eval-rst} -.. image:: ring_bus_wg.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.directional_couplers.ring_bus_wg - :members: - :undoc-members: - :show-inheritance: -``` - -## ADC_STD_2x2 - -```{eval-rst} -.. image:: ADC_STD_2x2.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.directional_couplers.ADC_STD_2x2 - :members: - :undoc-members: - :show-inheritance: -``` - -## DC - -```{eval-rst} -.. image:: DC.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.directional_couplers.DC - :members: - :undoc-members: - :show-inheritance: -``` - -## BS_tdc - -```{eval-rst} -.. image:: BS_tdc.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.directional_couplers.BS_tdc - :members: - :undoc-members: - :show-inheritance: -``` - -## MDM - -```{eval-rst} -.. image:: MDM.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.directional_couplers.MDM - :members: - :undoc-members: - :show-inheritance: -``` - -## DC_bend - -```{eval-rst} -.. image:: DC_bend.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.directional_couplers.DC_bend - :members: - :undoc-members: - :show-inheritance: -``` - -## DC_pX_3sg - -```{eval-rst} -.. image:: DC_pX_3sg.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.directional_couplers.DC_pX_3sg - :members: - :undoc-members: - :show-inheritance: -``` diff --git a/docs/source/mxpic/components/primitives/grating_couplers.md b/docs/source/mxpic/components/primitives/grating_couplers.md index d80e76b..5f7343f 100644 --- a/docs/source/mxpic/components/primitives/grating_couplers.md +++ b/docs/source/mxpic/components/primitives/grating_couplers.md @@ -5,80 +5,6 @@ :no-members: ``` -## Nano_ant - -```{eval-rst} -.. image:: Nano_ant.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.Nano_ant - :members: - :undoc-members: - :show-inheritance: -``` - -## Taper - -```{eval-rst} -.. image:: Taper.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.Taper - :members: - :undoc-members: - :show-inheritance: -``` - -## Grating_2D_Hole - -```{eval-rst} -.. image:: Grating_2D_Hole.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.Grating_2D_Hole - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_STD_2D - -```{eval-rst} -.. image:: GC_STD_2D.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.GC_STD_2D - :members: - :undoc-members: - :show-inheritance: -``` - -## GC_STD_1D - -```{eval-rst} -.. image:: GC_STD_1D.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.GC_STD_1D - :members: - :undoc-members: - :show-inheritance: -``` - -## FA - -```{eval-rst} -.. autoclass:: mxpic.components.primitives.grating_couplers.FA - :members: - :undoc-members: - :show-inheritance: -``` - ## GC_SiN_Si_Dual_Layer ```{eval-rst} diff --git a/docs/source/mxpic/components/primitives/index.md b/docs/source/mxpic/components/primitives/index.md index e582776..56eff7b 100644 --- a/docs/source/mxpic/components/primitives/index.md +++ b/docs/source/mxpic/components/primitives/index.md @@ -7,9 +7,5 @@ active/index passive/index pic/index EC_dual_layer_px3 -beam_splitters -directional_couplers grating_couplers -multimode_interferometers -spiral ``` diff --git a/docs/source/mxpic/components/primitives/multimode_interferometers.md b/docs/source/mxpic/components/primitives/multimode_interferometers.md deleted file mode 100644 index d6729af..0000000 --- a/docs/source/mxpic/components/primitives/multimode_interferometers.md +++ /dev/null @@ -1,32 +0,0 @@ -# mxpic.components.primitives.multimode_interferometers - -```{eval-rst} -.. automodule:: mxpic.components.primitives.multimode_interferometers - :no-members: -``` - -## MMI_ML - -```{eval-rst} -.. image:: MMI_ML.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.multimode_interferometers.MMI_ML - :members: - :undoc-members: - :show-inheritance: -``` - -## MMI_STD - -```{eval-rst} -.. image:: MMI_STD.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.multimode_interferometers.MMI_STD - :members: - :undoc-members: - :show-inheritance: -``` diff --git a/docs/source/mxpic/components/primitives/passive/crows.md b/docs/source/mxpic/components/primitives/passive/crows.md index e1d0c25..c4460fc 100644 --- a/docs/source/mxpic/components/primitives/passive/crows.md +++ b/docs/source/mxpic/components/primitives/passive/crows.md @@ -17,6 +17,10 @@ ## CROW_Eul_Ring ```{eval-rst} +.. image:: ../../../../images/passive/CROW_Eul_Ring.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_Eul_Ring :members: :undoc-members: @@ -26,6 +30,10 @@ ## CROW_Eul_RCK ```{eval-rst} +.. image:: ../../../../images/passive/CROW_Eul_RCK.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_Eul_RCK :members: :undoc-members: @@ -44,6 +52,10 @@ ## CROW_STD_Allpass ```{eval-rst} +.. image:: ../../../../images/passive/CROW_STD_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_STD_Allpass :members: :undoc-members: @@ -53,6 +65,10 @@ ## CROW_STD_Adddrop ```{eval-rst} +.. image:: ../../../../images/passive/CROW_STD_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_STD_Adddrop :members: :undoc-members: @@ -62,6 +78,10 @@ ## CROW_AED ```{eval-rst} +.. image:: ../../../../images/passive/CROW_AED.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.crows.CROW_AED :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/passive/rings.md b/docs/source/mxpic/components/primitives/passive/rings.md index deff422..ebf046f 100644 --- a/docs/source/mxpic/components/primitives/passive/rings.md +++ b/docs/source/mxpic/components/primitives/passive/rings.md @@ -71,6 +71,10 @@ ## MRR_STD_Allpass ```{eval-rst} +.. image:: ../../../../images/passive/MRR_STD_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_STD_Allpass :members: :undoc-members: @@ -80,6 +84,10 @@ ## MRR_STD_Adddrop ```{eval-rst} +.. image:: ../../../../images/passive/MRR_STD_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_STD_Adddrop :members: :undoc-members: @@ -89,6 +97,10 @@ ## MRR_MM_Allpass ```{eval-rst} +.. image:: ../../../../images/passive/MRR_MM_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_MM_Allpass :members: :undoc-members: @@ -98,6 +110,10 @@ ## MRR_MM_Adddrop ```{eval-rst} +.. image:: ../../../../images/passive/MRR_MM_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_MM_Adddrop :members: :undoc-members: @@ -107,6 +123,10 @@ ## MRR_DW_Adddrop ```{eval-rst} +.. image:: ../../../../images/passive/MRR_DW_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_DW_Adddrop :members: :undoc-members: @@ -116,6 +136,10 @@ ## MRR_DW_Allpass ```{eval-rst} +.. image:: ../../../../images/passive/MRR_DW_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.MRR_DW_Allpass :members: :undoc-members: @@ -125,6 +149,10 @@ ## STD_ring_AMZI_adddrop ```{eval-rst} +.. image:: ../../../../images/passive/STD_ring_AMZI_adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.rings.STD_ring_AMZI_adddrop :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/passive/unit.md b/docs/source/mxpic/components/primitives/passive/unit.md index 05ada25..a673f4e 100644 --- a/docs/source/mxpic/components/primitives/passive/unit.md +++ b/docs/source/mxpic/components/primitives/passive/unit.md @@ -8,6 +8,10 @@ ## waveguide ```{eval-rst} +.. image:: ../../../../images/passive/waveguide.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.waveguide :members: :undoc-members: @@ -17,6 +21,10 @@ ## PS_2st ```{eval-rst} +.. image:: ../../../../images/passive/PS_2st.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.PS_2st :members: :undoc-members: @@ -26,6 +34,10 @@ ## PS_2st_Straight ```{eval-rst} +.. image:: ../../../../images/passive/PS_2st_Straight.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.PS_2st_Straight :members: :undoc-members: @@ -35,6 +47,10 @@ ## PSR_1x2 ```{eval-rst} +.. image:: ../../../../images/passive/PSR_1x2.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.PSR_1x2 :members: :undoc-members: @@ -44,6 +60,10 @@ ## Brag_WDM ```{eval-rst} +.. image:: ../../../../images/passive/Brag_WDM.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.passive.unit.Brag_WDM :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/PBS.md b/docs/source/mxpic/components/primitives/pic/PBS.md index 68af890..cd955c7 100644 --- a/docs/source/mxpic/components/primitives/pic/PBS.md +++ b/docs/source/mxpic/components/primitives/pic/PBS.md @@ -8,6 +8,10 @@ ## PBS_3wg ```{eval-rst} +.. image:: ../../../../images/pic/PBS_3wg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.PBS.PBS_3wg :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/YBS.md b/docs/source/mxpic/components/primitives/pic/YBS.md index 89d1fe2..f9722f1 100644 --- a/docs/source/mxpic/components/primitives/pic/YBS.md +++ b/docs/source/mxpic/components/primitives/pic/YBS.md @@ -8,6 +8,10 @@ ## YBranch ```{eval-rst} +.. image:: ../../../../images/pic/YBranch.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.YBS.YBranch :members: :undoc-members: @@ -17,6 +21,10 @@ ## Ybranch_3wg ```{eval-rst} +.. image:: ../../../../images/pic/Ybranch_3wg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.YBS.Ybranch_3wg :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/bragg.md b/docs/source/mxpic/components/primitives/pic/bragg.md index 9a283ed..ea87c58 100644 --- a/docs/source/mxpic/components/primitives/pic/bragg.md +++ b/docs/source/mxpic/components/primitives/pic/bragg.md @@ -8,6 +8,10 @@ ## Bragg_apodized ```{eval-rst} +.. image:: ../../../../images/pic/Bragg_apodized.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.bragg.Bragg_apodized :members: :undoc-members: @@ -17,6 +21,10 @@ ## Bragg ```{eval-rst} +.. image:: ../../../../images/pic/Bragg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.bragg.Bragg :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/couplers.md b/docs/source/mxpic/components/primitives/pic/couplers.md index 1da320b..039f191 100644 --- a/docs/source/mxpic/components/primitives/pic/couplers.md +++ b/docs/source/mxpic/components/primitives/pic/couplers.md @@ -8,6 +8,10 @@ ## ring_bus_wg ```{eval-rst} +.. image:: ../../../../images/pic/ring_bus_wg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.ring_bus_wg :members: :undoc-members: @@ -17,6 +21,10 @@ ## ADC_STD_2x2 ```{eval-rst} +.. image:: ../../../../images/pic/ADC_STD_2x2.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.ADC_STD_2x2 :members: :undoc-members: @@ -26,6 +34,10 @@ ## DC ```{eval-rst} +.. image:: ../../../../images/pic/DC.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.DC :members: :undoc-members: @@ -35,6 +47,10 @@ ## BS_tdc ```{eval-rst} +.. image:: ../../../../images/pic/BS_tdc.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.BS_tdc :members: :undoc-members: @@ -44,6 +60,10 @@ ## MDM ```{eval-rst} +.. image:: ../../../../images/pic/MDM.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.MDM :members: :undoc-members: @@ -53,6 +73,10 @@ ## DC_bend ```{eval-rst} +.. image:: ../../../../images/pic/DC_bend.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.DC_bend :members: :undoc-members: @@ -62,6 +86,10 @@ ## DC_pX_3sg ```{eval-rst} +.. image:: ../../../../images/pic/DC_pX_3sg.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.couplers.DC_pX_3sg :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/cross.md b/docs/source/mxpic/components/primitives/pic/cross.md index 9c8b53a..ab01d00 100644 --- a/docs/source/mxpic/components/primitives/pic/cross.md +++ b/docs/source/mxpic/components/primitives/pic/cross.md @@ -8,6 +8,10 @@ ## Cross ```{eval-rst} +.. image:: ../../../../images/pic/Cross.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.cross.Cross :members: :undoc-members: @@ -17,6 +21,10 @@ ## Cross_Sine ```{eval-rst} +.. image:: ../../../../images/pic/Cross_Sine.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.cross.Cross_Sine :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/mmi.md b/docs/source/mxpic/components/primitives/pic/mmi.md index af3a612..cb2120f 100644 --- a/docs/source/mxpic/components/primitives/pic/mmi.md +++ b/docs/source/mxpic/components/primitives/pic/mmi.md @@ -8,6 +8,10 @@ ## MMI_ML ```{eval-rst} +.. image:: ../../../../images/pic/MMI_ML.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.mmi.MMI_ML :members: :undoc-members: @@ -17,6 +21,10 @@ ## MMI_STD ```{eval-rst} +.. image:: ../../../../images/pic/MMI_STD.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.mmi.MMI_STD :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/racetrack.md b/docs/source/mxpic/components/primitives/pic/racetrack.md index a1be195..01f12d7 100644 --- a/docs/source/mxpic/components/primitives/pic/racetrack.md +++ b/docs/source/mxpic/components/primitives/pic/racetrack.md @@ -17,6 +17,10 @@ ## RacetrackResonator ```{eval-rst} +.. image:: ../../../../images/pic/RacetrackResonator.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.racetrack.RacetrackResonator :members: :undoc-members: @@ -26,6 +30,10 @@ ## Racetrack_STD_Allpass ```{eval-rst} +.. image:: ../../../../images/pic/Racetrack_STD_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.racetrack.Racetrack_STD_Allpass :members: :undoc-members: @@ -35,6 +43,10 @@ ## Racetrack_MM_Allpass ```{eval-rst} +.. image:: ../../../../images/pic/Racetrack_MM_Allpass.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.racetrack.Racetrack_MM_Allpass :members: :undoc-members: @@ -44,6 +56,10 @@ ## Racetrack_MM_Adddrop ```{eval-rst} +.. image:: ../../../../images/pic/Racetrack_MM_Adddrop.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.racetrack.Racetrack_MM_Adddrop :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/rings.md b/docs/source/mxpic/components/primitives/pic/rings.md index a6b8d8e..1a03453 100644 --- a/docs/source/mxpic/components/primitives/pic/rings.md +++ b/docs/source/mxpic/components/primitives/pic/rings.md @@ -8,6 +8,10 @@ ## AED_ring ```{eval-rst} +.. image:: ../../../../images/pic/AED_ring.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.rings.AED_ring :members: :undoc-members: @@ -17,6 +21,10 @@ ## STD_PIC_Rings ```{eval-rst} +.. image:: ../../../../images/pic/STD_PIC_Rings.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.rings.STD_PIC_Rings :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/spiral.md b/docs/source/mxpic/components/primitives/pic/spiral.md index a475ae3..40f73a2 100644 --- a/docs/source/mxpic/components/primitives/pic/spiral.md +++ b/docs/source/mxpic/components/primitives/pic/spiral.md @@ -8,6 +8,10 @@ ## spiral ```{eval-rst} +.. image:: ../../../../images/pic/spiral.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.spiral :members: :undoc-members: @@ -17,6 +21,10 @@ ## spiral_rectangle ```{eval-rst} +.. image:: ../../../../images/pic/spiral_rectangle.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.spiral_rectangle :members: :undoc-members: @@ -26,6 +34,10 @@ ## Spiral_Rect_STD ```{eval-rst} +.. image:: ../../../../images/pic/Spiral_Rect_STD.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.Spiral_Rect_STD :members: :undoc-members: @@ -35,6 +47,10 @@ ## spiral_circle ```{eval-rst} +.. image:: ../../../../images/pic/spiral_circle.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.spiral_circle :members: :undoc-members: @@ -44,6 +60,10 @@ ## Spiral_Cicle_MM ```{eval-rst} +.. image:: ../../../../images/pic/Spiral_Cicle_MM.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.Spiral_Cicle_MM :members: :undoc-members: @@ -53,6 +73,10 @@ ## Spiral_Cicle_STD ```{eval-rst} +.. image:: ../../../../images/pic/Spiral_Cicle_STD.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.spiral.Spiral_Cicle_STD :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/pic/taper.md b/docs/source/mxpic/components/primitives/pic/taper.md index 74079ba..c9a93f8 100644 --- a/docs/source/mxpic/components/primitives/pic/taper.md +++ b/docs/source/mxpic/components/primitives/pic/taper.md @@ -8,6 +8,10 @@ ## transition ```{eval-rst} +.. image:: ../../../../images/pic/transition.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.taper.transition :members: :undoc-members: @@ -17,6 +21,10 @@ ## taper_xs2xs ```{eval-rst} +.. image:: ../../../../images/pic/taper_xs2xs.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.taper.taper_xs2xs :members: :undoc-members: @@ -26,6 +34,10 @@ ## PSR ```{eval-rst} +.. image:: ../../../../images/pic/PSR.png + :align: center + :width: 600px + .. autoclass:: mxpic.components.primitives.pic.taper.PSR :members: :undoc-members: diff --git a/docs/source/mxpic/components/primitives/spiral.md b/docs/source/mxpic/components/primitives/spiral.md deleted file mode 100644 index a863627..0000000 --- a/docs/source/mxpic/components/primitives/spiral.md +++ /dev/null @@ -1,84 +0,0 @@ -# mxpic.components.primitives.spiral - -```{eval-rst} -.. automodule:: mxpic.components.primitives.spiral - :no-members: -``` - -## spiral - -```{eval-rst} -.. image:: spiral.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.spiral.spiral - :members: - :undoc-members: - :show-inheritance: -``` - -## spiral_rectangle - -```{eval-rst} -.. image:: spiral_rectangle.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.spiral.spiral_rectangle - :members: - :undoc-members: - :show-inheritance: -``` - -## Spiral_Rect_STD - -```{eval-rst} -.. image:: Spiral_Rect_STD.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.spiral.Spiral_Rect_STD - :members: - :undoc-members: - :show-inheritance: -``` - -## spiral_circle - -```{eval-rst} -.. image:: spiral_circle.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.spiral.spiral_circle - :members: - :undoc-members: - :show-inheritance: -``` - -## Spiral_Cicle_MM - -```{eval-rst} -.. image:: Spiral_Cicle_MM.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.spiral.Spiral_Cicle_MM - :members: - :undoc-members: - :show-inheritance: -``` - -## Spiral_Cicle_STD - -```{eval-rst} -.. image:: Spiral_Cicle_STD.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.spiral.Spiral_Cicle_STD - :members: - :undoc-members: - :show-inheritance: -``` diff --git a/mxpic/__init__.py b/mxpic/__init__.py index 5b388cf..b2354e0 100644 --- a/mxpic/__init__.py +++ b/mxpic/__init__.py @@ -24,8 +24,6 @@ from .components import electronics as eic from . import technologies foundry = technologies -from .components import pdks as pdk -from .components import pdks from .components import primitives as functional from .components.composites import advance diff --git a/mxpic/components/__init__.py b/mxpic/components/__init__.py index 43c4a89..b45069d 100644 --- a/mxpic/components/__init__.py +++ b/mxpic/components/__init__.py @@ -13,5 +13,4 @@ from . import geometry from . import primitives from . import composites from . import electronics -from . import pdks from . import others diff --git a/mxpic/components/pdks/AMF_pdk.py b/mxpic/components/pdks/AMF_pdk.py deleted file mode 100644 index 27a019e..0000000 --- a/mxpic/components/pdks/AMF_pdk.py +++ /dev/null @@ -1,44 +0,0 @@ -import nazca as nd -from ..gds_devices import gds_lib_load - -class GC_TE_1550(gds_lib_load) : - ''' - CUMEC TE Grating Coupler at 1550nm. - ''' - def __init__(self,pdk_path: str="AMF_IPKISS_PDK") -> None: - lib_path = pdk_path - lib_name = "AMF_PDK_BB" - cell_name = "AMF_Si_GC1D_Cband_v3p0" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False) - self.w_wg = 0.5 - self.add_pin(pin_name="a0", xya=(0,0,180)) - self.add_pin(pin_name="g1", xya=(0,0,180), width=0.5) - -class GC_TE_1310(gds_lib_load) : - ''' - CUMEC TE Grating Coupler at 1310nm. - ''' - def __init__(self,pdk_path: str="AMF_IPKISS_PDK") -> None: - lib_path = pdk_path - lib_name = "AMF_PDK_BB" - cell_name = "AMF_Si_GC1D_Oband_v3p0" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False) - self.w_wg = 0.41 - self.add_pin(pin_name="a0", xya=(0,0,180)) - self.add_pin(pin_name="g1", xya=(0,0,180), width=0.41) - -class PD_Cband_Cell(gds_lib_load) : - ''' - AMF Ge Power Monitor Cell at Cband. - ''' - def __init__(self,pdk_path: str="AMF_IPKISS_PDK") -> None: - lib_path = pdk_path - lib_name = "AMF_PDK_BB" - cell_name = "AMF_Ge_PowMonitor_Cband_Cell_v3p0" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False) - self.w_wg = 0.5 - self.add_pin(pin_name="a0", xya=(0,0,180)) - self.add_pin(pin_name="a1", xya=(0,0,180), width=0.5) - self.add_pin(pin_name="ep1", xya=(129.8,0,0), width=5) - self.add_pin(pin_name="en1", xya=(129.8,(9+5.3)/2,0), width=3.7) - self.add_pin(pin_name="en2", xya=(129.8,-(9+5.3)/2,0), width=3.7) \ No newline at end of file diff --git a/mxpic/components/pdks/CUMEC_pdk.py b/mxpic/components/pdks/CUMEC_pdk.py deleted file mode 100644 index 2cd7f25..0000000 --- a/mxpic/components/pdks/CUMEC_pdk.py +++ /dev/null @@ -1,254 +0,0 @@ - -from ..gds_devices import gds_lib_load -import nazca as nd -from ..routing import Route - -from ..electronics import PADs - -CUMEC_LAYER_MAP = { - - (31,1): 'STRIP_COR', - (31,2): 'STRIP_CLD', - (31,3): 'STRIP_TRE', - (31,4): 'STRIP_HOL', - - (32,1): 'SRIB_COR', - (32,2): 'SRIB_CLD', - (32,3): 'SRIB_TRE', - (32,4): 'SRIB_HOL', - - (33,1): 'RIB_COR', - (33,2): 'RIB_CLD', - (33,3): 'RIB_TRE', - (33,4): 'RIB_HOL', - - (11,1): 'METAL', - (12,1): 'METAL_2', - (51,1): 'VIA_H2M', - (60,0): 'PASS1', - (63,0): 'PASS2', - (20,0): 'PAD', - - (61,0): 'GC_OPEN', - -} - - -class PAD_60_80(gds_lib_load) : - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK") -> None: - lib_path = pdk_path + "\\bondpads" - lib_name = "BP_60_80" - cellname = "Fixed_BP_60_80" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cellname, rename=cellname+"_WithPin", instantiate=False) - self.add_pin(pin_name='p1',xya=(0,0,-90)) - -class GPD_1550(gds_lib_load): - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK") -> None: - lib_path = pdk_path + "\\photodetector" - lib_name = "GPD_1550_unit" - cell_name = "Fixed_GPD_1550_unit" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["Fixed_GPD_1550_unit"],layermap=CUMEC_LAYER_MAP) - self.w_wg = 0.45 - self.length = 110.4 - self.add_pin(pin_name='ep1', xya=(55.2, 3.325, 90), width=1) ## anode - self.add_pin(pin_name='en1', xya=(55.2,-3.325,-90), width=1) ## cathod - self.add_pin(pin_name='a1', xya=(0,0,180), width=0.45) - self.add_pin(pin_name='b1', xya=(110.4,0,0), width=self.w_wg) - - -class EC_1550(gds_lib_load): - ''' - CUMEC TE Grating Coupler at 1550nm. - ''' - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK") -> None: - lib_path = pdk_path + "\\edge_couplers" - lib_name = "EC_1550" - cell_name = "Fixed_EC_1550" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["Fixed_EC_1550"],layermap=CUMEC_LAYER_MAP) - self.w_wg = 0.45 - self.length = 689.9 - self.add_pin(pin_name='g1', xya=(0,0,0), width=self.w_wg) - self.add_pin(pin_name='b0', xya=(-673.9,0,180)) - self.add_pin(pin_name='a0',xya=(-673.9,0,0)) - -class GC_TE_1550(gds_lib_load): - ''' - CUMEC TE Grating Coupler at 1550nm. - ''' - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK") -> None: - lib_path = pdk_path + "\\grating_couplers" - lib_name = "GC_TE_1550" - cell_name = "Fixed_GC_TE_1550" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False,cellsreused=["Fixed_GC_TE_1550"],layermap=CUMEC_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='g1', xya=(0,0,0), width=self.w_wg) - - def generate_test_gds(self,gc2gc_dX=300): - with nd.Cell(name=self.cell.cell_name+"_test",instantiate=False) as C: - gc_input = self.cell.put('g1',-gc2gc_dX/2,0,180) - gc_output = self.cell.put('g1',gc2gc_dX/2,0,0) - stripe=Route(radius=5, width=self.w_wg, xs="strip") - stripe.strt_p2p(pin1=gc_input.pin['g1'],pin2=gc_output.pin['g1'],arrow=False).put() - return C - -class GC_TM_1550(gds_lib_load): - ''' - CUMEC TE Grating Coupler at 1550nm. - ''' - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK") -> None: - lib_path = pdk_path + "\\grating_couplers" - lib_name = "GC_TM_1550" - cell_name = "Fixed_GC_TM_1550" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False,cellsreused=["Fixed_GC_TM_1550"],layermap=CUMEC_LAYER_MAP) - self.w_wg = 0.5 - self.add_pin(pin_name='g1', xya=(0,0,0), width=self.w_wg) - - def generate_test_gds(self,gc2gc_dX=300): - with nd.Cell(name=self.cell.cell_name+"_test",instantiate=False) as C: - gc_input = self.cell.put('g1',-gc2gc_dX/2,0,180) - gc_output = self.cell.put('g1',gc2gc_dX/2,0,0) - stripe=Route(radius=5, width=self.w_wg, xs="strip") - stripe.strt_p2p(pin1=gc_input.pin['g1'],pin2=gc_output.pin['g1'],arrow=False).put() - return C - -class GC_TE_1310(gds_lib_load): - ''' - CUMEC TE Grating Coupler at 1310nm. - ''' - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK") -> None: - lib_path = pdk_path + "\\grating_couplers" - lib_name = "GC_TE_1310" - cell_name = "Fixed_GC_TE_1310" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False,cellsreused=["Fixed_GC_TE_1310"],layermap=CUMEC_LAYER_MAP) - self.w_wg = 0.38 - self.add_pin(pin_name='g1', xya=(0,0,0), width=self.w_wg) - - -class MMI_1x2_TE_1550(gds_lib_load): - ''' - CUMEC TE 1by 2 MMI at 1550nm. - ''' - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK",sharp_patch: bool=True) -> None: - lib_path = pdk_path + "\\mmis" - lib_name = "M1X2_TE_1550" - cellname = "Fixed_M1X2_TE_1550" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cellname, rename=cellname+"_WithPin", instantiate=False,cellsreused=["Fixed_M1X2_TE_1550"],layermap=CUMEC_LAYER_MAP) - self.length = 12 - self.width = 1.55 - self.w_wg = 0.45 - - self.add_pin(pin_name='a1', xya=(0,0,180), width=self.w_wg) - self.add_pin(pin_name='b1', xya=(self.length,self.width/2,0), width=self.w_wg) - self.add_pin(pin_name='b2', xya=(self.length,-self.width/2,0), width=self.w_wg) - - def generate_test_gds(self,gc,gc2gc_length=300): - with nd.Cell(name=self.cell.cell_name+"_test", instantiate=False) as C: - gc_input = gc.cell.put('g1',0,0,180) - gc_output_1 = gc.cell.put('g1',gc2gc_length, 20,0) - gc_output_2 = gc.cell.put('g1',gc2gc_length,-20,0) - # Put DC - dc = self.cell.put('a1',gc_input.pin['g1'].move((gc2gc_length-self.length)/2,0,0)) - # Connect all the ports - stripe=Route(radius=5, width=self.w_wg, xs="strip") - stripe.sbend_route_p2p(pin1=gc_input.pin['g1'],pin2=dc.pin['a1'],arrow=False).put() - stripe.sbend_route_p2p(pin1=gc_output_1.pin['g1'],pin2=dc.pin['b1'],arrow=False).put() - stripe.sbend_route_p2p(pin1=gc_output_2.pin['g1'],pin2=dc.pin['b2'],arrow=False).put() - return C - -class MMI_1x2_TE_1310(gds_lib_load): - ''' - CUMEC TE 1by 2 MMI at 1310nm. - ''' - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK",sharp_patch: bool=True) -> None: - lib_path = pdk_path + "\\mmis" - lib_name = "M1X2_TE_1310" - cellname = "Fixed_M1X2_TE_1310" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cellname, rename=cellname+"_WithPin", instantiate=False,cellsreused=["Fixed_M1X2_TE_1310"],layermap=CUMEC_LAYER_MAP) - self.length = 15 - self.width = 1.45 - self.w_wg = 0.38 - self.add_pin(pin_name='a1', xya=(0,0,180), width=self.w_wg) - self.add_pin(pin_name='b1', xya=(self.length,self.width/2,0), width=self.w_wg) - self.add_pin(pin_name='b2', xya=(self.length,-self.width/2,0), width=self.w_wg) - -class MMI_2x2_TE_1550(gds_lib_load): - ''' - CUMEC TE 1by 2 MMI at 1310nm. - ''' - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK") -> None: - lib_path = pdk_path + "\\mmis" - lib_name = "M2X2_TE_1550" - cellname = "Fixed_M2X2_TE_1550" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cellname, rename=cellname+"_WithPin", instantiate=False,cellsreused=["Fixed_M2X2_TE_1550"],layermap=CUMEC_LAYER_MAP) - self.length = 125.4 - self.width = 3 - self.w_wg = 0.45 - self.add_pin(pin_name='a1', xya=(0,self.width/2,180), width=self.w_wg) - self.add_pin(pin_name='a2', xya=(0,-self.width/2,180), width=self.w_wg) - self.add_pin(pin_name='b1', xya=(self.length,self.width/2,0), width=self.w_wg) - self.add_pin(pin_name='b2', xya=(self.length,-self.width/2,0), width=self.w_wg) - -class CRX_TE_1550(gds_lib_load): - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK") -> None: - lib_path = pdk_path + "\\crossings" - lib_name = "X_TE_1550" - cellname = "Fixed_X_TE_1550" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cellname, rename=cellname+"_WithPin", instantiate=False,cellsreused=["Fixed_X_TE_1550"],layermap=CUMEC_LAYER_MAP) - self.length = 5 - self.width = 5 - self.w_wg = 0.45 - self.xs = 'strip' - self.L_arm = 5 - self.add_pin(pin_name='a1',xya=(-5,0,180),width=self.w_wg) - self.add_pin(pin_name='b1',xya=( 5,0,0),width=self.w_wg) - self.add_pin(pin_name='a2',xya=( 0,5,90),width=self.w_wg) - self.add_pin(pin_name='b2',xya=( 0,-5,-90),width=self.w_wg) - - def generate_test_gds(self,gc,num=5,dX_gc2gc=400,w_end=0.2,L_end=10): - with nd.Cell(instantiate=False) as C: - - if (isinstance(gc,nd.Cell)): - gc_cell = gc - elif (hasattr(gc,'cell')): - gc_cell = gc.cell - else : - raise Exception("ERROR: In , is not recongized") - - dL = self.L_arm*2 - - dX = dL*1.75 - - pic_strip = Route(radius=10,width=self.w_wg,xs=self.xs) - - gc_In = gc_cell.put('g1',-dX_gc2gc/2,0,180) - pin_pre = gc_In.pin['g1'] - for _idx_ in range(0,num): - inst = self.cell.put('a0',_idx_*dX - (num/2 - 1/2)*dX) - pic_strip.strt_p2p(pin1=pin_pre,pin2=inst.pin['a1'],arrow=False).put() - pin_pre = inst.pin['b1'] - - nd.taper(length=L_end/2,width1=self.w_wg,width2=w_end,xs=self.xs).put(inst.pin['b2']) - nd.strt(length=L_end/2,width=w_end,xs=self.xs).put() - nd.taper(length=L_end/2,width1=self.w_wg,width2=w_end,xs=self.xs).put(inst.pin['a2']) - nd.strt(length=L_end/2,width=w_end,xs=self.xs).put() - - gc_Out = gc_cell.put('g1', dX_gc2gc/2,0,0) - pic_strip.strt_p2p(pin1=pin_pre,pin2=gc_Out.pin['g1'],arrow=False).put() - return C - -class PBS_1550(gds_lib_load): - def __init__(self,pdk_path: str="CUMEC_SiP130Cu_PDK") -> None: - lib_path = pdk_path + "\\polarization_beam_splitter" - lib_name = "PBS_1550" - cellname = "Fixed_PBS_1550" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cellname, rename=cellname+"_WithPin", instantiate=False,cellsreused=cellname,layermap=CUMEC_LAYER_MAP) - self.length = 5 - self.width = 5 - self.w_wg = 0.45 - self.xs = 'strip' - self.add_pin(pin_name='a1',xya=(-0,0,180),width=self.w_wg) - self.add_pin(pin_name='b1',xya=( 87.2,0,0),width=self.w_wg) - self.add_pin(pin_name='b2',xya=( 87.2,-20,0),width=self.w_wg) - diff --git a/mxpic/components/pdks/IMECAS_pdk.py b/mxpic/components/pdks/IMECAS_pdk.py deleted file mode 100644 index 26c6600..0000000 --- a/mxpic/components/pdks/IMECAS_pdk.py +++ /dev/null @@ -1,288 +0,0 @@ - -from ..gds_devices import gds_lib_load -import nazca as nd -from ..routing import Route - -from ..electronics import PADs - -IMECAS_LAYER_MAP = { - - (10,2): 'STRIP_COR', - (10,3): 'STRIP_CLD', - (10,4): 'STRIP_TRE', - - (11,2): 'SRIB_COR', - (11,3): 'SRIB_CLD', - (11,4): 'SRIB_TRE', - - (12,2): 'RIB_COR', - (12,3): 'RIB_CLD', - (12,4): 'RIB_TRE', - - (31,0): 'METAL', - (34,0): 'METAL_2', - (36,0): 'PAD', - (80,0): 'DETCH', - - -} - -class Template(gds_lib_load) : - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "IMECAS-templete" - cell_name = "IMECASTEST" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False,cellsreused=["IMECASTEST"],layermap=IMECAS_LAYER_MAP) - -class EC_TE_1550(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "EdegeCoupler_0_18_0_45" - cell_name = "EdegeCoupler_0_18_0_45" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["EdegeCoupler_0_18_0_45"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='g1', xya=(220.00000,2.089,0), width=0.45) - self.add_pin(pin_name='a0', xya=(0,0,0)) - - -class GC_TE_1550(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "FGC_C_TE_WG450" - cell_name = "FGC_C_TE_WG450" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["FGC_C_TE_WG450"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='g1', xya=(43.91100,15,0), width=0.45) - self.add_pin(pin_name='a0', xya=(0,0,0)) - -class GC_TM_1550(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "FGC_C_TM_WG450" - cell_name = "FGC_C_TM_WG450" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["FGC_C_TM_WG450"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='g1', xya=(44.40100,15,0), width=0.45) - self.add_pin(pin_name='a0', xya=(0,0,0)) - -class GC_TE_1310(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "FGC_O_TE_WG380" - cell_name = "FGC_O_TE_WG380" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["FGC_O_TE_WG380"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='g1', xya=(46.00000,15,0), width=0.38) - self.add_pin(pin_name='a0', xya=(0,0,0)) - -class GC_TM_1310(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "FGC_O_TM_WG380" - cell_name = "FGC_O_TM_WG380" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["FGC_O_TM_WG380"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='g1', xya=(45.35500,15,0), width=0.38) - self.add_pin(pin_name='a0', xya=(0,0,0)) - -class DC_TE_1550(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "DC_C_TE_3dB" - cell_name = "DC_C_TE_3dB" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["DC_C_TE_3dB"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='a1', xya=(0,62.225,180), width=0.45) - self.add_pin(pin_name='a2', xya=(0, 2.225,180), width=0.45) - self.add_pin(pin_name='b1', xya=(67.33700,62.225,0), width=0.45) - self.add_pin(pin_name='b2', xya=(67.33700, 2.225,0), width=0.45) - self.add_pin(pin_name='a0', xya=(0,32.225,180)) - self.add_pin(pin_name='b0', xya=(67.33700,32.225,0)) - -class MMI_2x2_TE_1550(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "MMI2x2_C_SE_WG450" - cell_name = "MMI2x2_C_SE_WG450" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["MMI2x2_C_SE_WG450"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='a1', xya=(0,11.325,180), width=0.45) - self.add_pin(pin_name='a2', xya=(0, 8.675,180), width=0.45) - self.add_pin(pin_name='b1', xya=(157.20000,11.325,0), width=0.45) - self.add_pin(pin_name='b2', xya=(157.20000, 8.675,0), width=0.45) - self.add_pin(pin_name='a0', xya=(157.20000/2,10, 0)) - self.add_pin(pin_name='b0', xya=(157.20000/2,10,180)) - -class MMI_1x2_TE_1550(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "MMI1X2_C_WG450" - cell_name = "MMI1X2_C_WG450" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["MMI1X2_C_WG450"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.length = 12.41900 - self.add_pin(pin_name='a1', xya=(0,3,180), width=0.45) - self.add_pin(pin_name='b1', xya=(12.41900,3.5,0), width=0.45) - self.add_pin(pin_name='b2', xya=(12.41900,2.5,0), width=0.45) - self.add_pin(pin_name='a0', xya=(12.41900/2,3, 0)) - self.add_pin(pin_name='b0', xya=(12.41900/2,3,180)) - -class MMI_2x2_TE_1310(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "MMI2x2_O_WG380" - cell_name = "MMI2x2_O_WG380" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["MMI2x2_O_WG380"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='a1', xya=(0,4,180), width=0.38) - self.add_pin(pin_name='a2', xya=(0, 3,180), width=0.38) - self.add_pin(pin_name='b1', xya=(25.30000,4,0), width=0.38) - self.add_pin(pin_name='b2', xya=(25.30000,3,0), width=0.38) - self.add_pin(pin_name='a0', xya=(25.30000/2,3.5, 0)) - self.add_pin(pin_name='b0', xya=(25.30000/2,3.5,180)) - -class MMI_1x2_TE_1310(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "MMI1x2_O_WG380" - cell_name = "MMI1x2_O_WG380" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["MMI1x2_O_WG380"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='a1', xya=(0,4,180), width=0.38) - self.add_pin(pin_name='b1', xya=(16.67800,4.5,0), width=0.38) - self.add_pin(pin_name='b2', xya=(16.67800,3.5,0), width=0.38) - self.add_pin(pin_name='a0', xya=(16.67800/2,3, 0)) - self.add_pin(pin_name='b0', xya=(16.67800/2,3,180)) - -class Ybranch_TE(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "Ybranch_C_TE" - cell_name = "Ybranch_C_TE" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, - cellsreused=["Ybranch_C_TE"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='a1', xya=(0,4,180), width=0.45) - self.add_pin(pin_name='b1', xya=(14.00000,4.875,0), width=0.45) - self.add_pin(pin_name='b2', xya=(14.00000,2.225,0), width=0.45) - self.add_pin(pin_name='a0', xya=(14.00000/2,3.05, 0)) - self.add_pin(pin_name='b0', xya=(14.00000/2,3.05,180)) - -class CRX_TE_1550(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "Crossing_C_TE" - cellname = "Crossing_C_TE" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cellname, rename=cellname+"_WithPin", instantiate=False,cellsreused=["Crossing_C_TE"],layermap=IMECAS_LAYER_MAP) - self.length = 5 - self.width = 5 - self.w_wg = 0.45 - self.xs = 'strip' - self.L_arm = 9.96400/2 - self.add_pin(pin_name='a1',xya=( 0 ,4.982 ,180),width=self.w_wg) - self.add_pin(pin_name='b1',xya=( 9.96400,4.982 ,0),width=self.w_wg) - self.add_pin(pin_name='a2',xya=( 4.982 ,9.96400,90),width=self.w_wg) - self.add_pin(pin_name='b2',xya=( 4.982 ,0 ,-90),width=self.w_wg) - - def generate_test_gds(self,gc,num=5,dX_gc2gc=400,w_end=0.2,L_end=10): - with nd.Cell(instantiate=False) as C: - - if (isinstance(gc,nd.Cell)): - gc_cell = gc - elif (hasattr(gc,'cell')): - gc_cell = gc.cell - else : - raise Exception("ERROR: In , is not recongized") - - dL = self.L_arm*2 - - dX = dL*1.75 - - pic_strip = Route(radius=10,width=self.w_wg,xs=self.xs) - - gc_In = gc_cell.put('g1',-dX_gc2gc/2,0,180) - pin_pre = gc_In.pin['g1'] - for _idx_ in range(0,num): - inst = self.cell.put('a0',_idx_*dX - (num/2 - 1/2)*dX) - pic_strip.strt_p2p(pin1=pin_pre,pin2=inst.pin['a1'],arrow=False).put() - pin_pre = inst.pin['b1'] - - nd.taper(length=L_end/2,width1=self.w_wg,width2=w_end,xs=self.xs).put(inst.pin['b2']) - nd.strt(length=L_end/2,width=w_end,xs=self.xs).put() - nd.taper(length=L_end/2,width1=self.w_wg,width2=w_end,xs=self.xs).put(inst.pin['a2']) - nd.strt(length=L_end/2,width=w_end,xs=self.xs).put() - - gc_Out = gc_cell.put('g1', dX_gc2gc/2,0,0) - pic_strip.strt_p2p(pin1=pin_pre,pin2=gc_Out.pin['g1'],arrow=False).put() - return C - - -class CRX_TE_1310(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "Crossing_O_TE" - cellname = "Crossing_O_TE" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cellname, rename=cellname+"_WithPin", instantiate=False,cellsreused=["Crossing_O_TE"],layermap=IMECAS_LAYER_MAP) - self.length = 5 - self.width = 5 - self.w_wg = 0.38 - self.xs = 'strip' - self.L_arm = 11.8280/2 - self.add_pin(pin_name='a1',xya=( 0 ,5.914 ,180),width=self.w_wg) - self.add_pin(pin_name='b1',xya=( 11.8280,5.914 ,0),width=self.w_wg) - self.add_pin(pin_name='a2',xya=( 5.914 ,11.8280,90),width=self.w_wg) - self.add_pin(pin_name='b2',xya=( 5.914 ,0 ,-90),width=self.w_wg) - - def generate_test_gds(self,gc,num=5,dX_gc2gc=400,w_end=0.2,L_end=10): - with nd.Cell(instantiate=False) as C: - - if (isinstance(gc,nd.Cell)): - gc_cell = gc - elif (hasattr(gc,'cell')): - gc_cell = gc.cell - else : - raise Exception("ERROR: In , is not recongized") - - dL = self.L_arm*2 - - dX = dL*1.75 - - pic_strip = Route(radius=10,width=self.w_wg,xs=self.xs) - - gc_In = gc_cell.put('g1',-dX_gc2gc/2,0,180) - pin_pre = gc_In.pin['g1'] - for _idx_ in range(0,num): - inst = self.cell.put('a0',_idx_*dX - (num/2 - 1/2)*dX) - pic_strip.strt_p2p(pin1=pin_pre,pin2=inst.pin['a1'],arrow=False).put() - pin_pre = inst.pin['b1'] - - nd.taper(length=L_end/2,width1=self.w_wg,width2=w_end,xs=self.xs).put(inst.pin['b2']) - nd.strt(length=L_end/2,width=w_end,xs=self.xs).put() - nd.taper(length=L_end/2,width1=self.w_wg,width2=w_end,xs=self.xs).put(inst.pin['a2']) - nd.strt(length=L_end/2,width=w_end,xs=self.xs).put() - - gc_Out = gc_cell.put('g1', dX_gc2gc/2,0,0) - pic_strip.strt_p2p(pin1=pin_pre,pin2=gc_Out.pin['g1'],arrow=False).put() - return C - -class EC_TE_1550(gds_lib_load): - def __init__(self,pdk_path: str="IMECAS_PDK2.1") -> None: - lib_path = pdk_path - lib_name = "EdegeCoupler_0_18_0_45" - cell_name = "EdegeCoupler_0_18_0_45" - super().__init__(lib_path=lib_path, lib_name=lib_name, cell_name=cell_name, rename=cell_name+"_WithPin", instantiate=False, cellsreused=["EdegeCoupler_0_18_0_45"],layermap=IMECAS_LAYER_MAP) - self.w_wg = 0.45 - self.add_pin(pin_name='g1', xya=(220.00000,2.089,0), width=0.45) - self.add_pin(pin_name='a0', xya=(0,0,0)) - - diff --git a/mxpic/components/pdks/__init__.py b/mxpic/components/pdks/__init__.py deleted file mode 100644 index 88323e7..0000000 --- a/mxpic/components/pdks/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from . import AMF_pdk -from . import CUMEC_pdk -from . import IMECAS_pdk -from . import hgl_pdk_A -from . import qy_pdk_A diff --git a/mxpic/components/pdks/hgl_pdk_A.py b/mxpic/components/pdks/hgl_pdk_A.py deleted file mode 100644 index e7a44c8..0000000 --- a/mxpic/components/pdks/hgl_pdk_A.py +++ /dev/null @@ -1,52 +0,0 @@ - -import numpy as np -from ..primitives.passive import DC_bend - - -class DC_bend_50_50_Cband(DC_bend): - - def __init__(self, w_wg: float, show_pins: bool=False) -> None: - ''' - This is a wideband 50/50 Direction Coupler based on bend directional coupler, from 1500nm to 1600nm. - ''' - w_in = 0.45 - w_out = 0.45 - gap = 0.2 - r_in = 60 - coupling_length = 19.08 - theta_arc = coupling_length / (r_in+gap/2+w_in/2) * 180 / np.pi - super().__init__(w_in=w_in, w_out=w_out, gap=gap, r_in=r_in, theta_arc=theta_arc, w_wg=w_wg, theta_ext=10, xs_wg="strip", show_pins=show_pins) - self.cell = self.generate_gds(cellname="_50_50_Cband") - - -class DC_bend_20_80_Cband(DC_bend): - ''' - This is a wideband 20/80 Direction Coupler based on bend directional coupler, from 1500nm to 1600nm. - Through: 80% - Cross: 20% - ''' - def __init__(self, w_wg: float, show_pins: bool=False) -> None: - w_in = 0.45 - w_out = 0.45 - gap = 0.2 - r_in = 41 - coupling_length = 19.6 - theta_arc = coupling_length / (r_in+gap/2+w_in/2) * 180 / np.pi - super().__init__(w_in=w_in, w_out=w_out, gap=gap, r_in=r_in, theta_arc=theta_arc, w_wg=w_wg, theta_ext=10, xs_wg="strip", show_pins=show_pins) - self.generate_gds(cellname="_20_80_Cband") - -class DC_bend_4_96_Cband(DC_bend): - ''' - This is a wideband 20/80 Direction Coupler based on bend directional coupler, from 1500nm to 1600nm. - Through: 96% - Cross: 4% - ''' - def __init__(self, w_wg: float, show_pins: bool=False) -> None: - w_in = 0.45 - w_out = 0.45 - gap = 0.2 - r_in = 30 - coupling_length = 18.9 - theta_arc = coupling_length / (r_in+gap/2+w_in/2) * 180 / np.pi - super().__init__(w_in=w_in, w_out=w_out, gap=gap, r_in=r_in, theta_arc=theta_arc, w_wg=w_wg, theta_ext=10, xs_wg="strip", show_pins=show_pins) - self.generate_gds(cellname="_4_96_Cband") \ No newline at end of file diff --git a/mxpic/components/pdks/qy_pdk_A.py b/mxpic/components/pdks/qy_pdk_A.py deleted file mode 100644 index 6f9aef7..0000000 --- a/mxpic/components/pdks/qy_pdk_A.py +++ /dev/null @@ -1,146 +0,0 @@ -from typing import Optional -import numpy as np -import nazca as nd - -from ..primitives.passive import * -from ..gds_devices import generate_gds_lib - -""" test passed, in ANT-20230228 submission """ -class DC_pX3_50_50_Cband(DC_pX_3sg): - def __init__(self, w_wg: float=0.5,gds_lib_generate: bool=False,name: Optional[str]=None) -> None: - # DC_50_50_pX3 = mx.passive.DC_pX_3sg(name="DC_50_50_pX3",Lc1=33, Lp1=0.55, Lc2=15, Lt=1, w_cp=0.5, dw=0.1, gap=0.2, R0=17.5, A=20, w_wg=0.5, pX_type='symmetric', sharp_patch=True) - - super().__init__(name=name,xs_wg='strip', Lc1=33, Lp1=0.55, Lc2=15, Lt=1, w_cp=0.5, dw=0.1, gap=0.2, R0=17.5, A=20, w_wg=w_wg, pX_type='symmetric', sharp_patch=True) - - if (gds_lib_generate): - self.generate_gds_lib() - - def generate_gds_lib(self): - generate_gds_lib("DC_pX3_50_50_Cband",self.cell,with_txt=True) - -class MMG_1D_D14um_1550_2modes(GC_STD_1D): - - def __init__(self, w_wg: float = 0.5, gds_lib_generate:bool=False) -> None: - pitch_1D_apodized = np.linspace(0.602,0.602,40) - eta_1D_apodized = np.linspace(0.389,0.613,40) - super().__init__(xs_wg='strip', w_wg=w_wg, etch_type='SETCH', xs_open='gc_open', L_taper=500, L_end=5, A_taper=2.5, - Pitch=pitch_1D_apodized, eta_etch=eta_1D_apodized, num=len(eta_1D_apodized), shape='rectangle') - - if (gds_lib_generate): - self.generate_gds_lib() - - def generate_gds_lib(self): - generate_gds_lib("MMG_1D_D14um_1550_2modes",self.cell,with_txt=True) - -""" Aborted due to failure testing, 2022.12.30 """ -class MDM_ADC_TE1_1550(MDM): - def __init__(self,w_wg: float=0.45,gds_lib_generate: bool=False) -> None: - """ - w_wg the single mode input for the device - """ - self.wb0 = 0.44 - self.wb1 = 0.61 - self.wb_in = 0.45 - self.wb_out = 0.85 - - self.w0 = 0.33 - self.w1 = 0.2 - self.w_wg = w_wg - self.xs='strip' - - self.Lt_bus = 22 - self.Lt_cp = 22 - - self.R0 = 40 - - self.Rmin=8 - - self.angle=22.5 - self.gap0=0.2 - self.gap1=0.2 - - super().__init__(xs=self.xs, - wb0=self.wb0, wb1=self.wb1, wb_in=self.wb_in, wb_out=self.wb_out, - w_wg=self.w_wg, w0=self.w0, w1=self.w1, - gap0=self.gap0, Lt_bus=self.Lt_bus, R0=self.R0, angle=self.angle, Lt_cp=self.Lt_cp, gap1=self.gap1, - name=None, Lb0=None, symmetric_BUS=False, single_end=True) - - if (gds_lib_generate): - self.generate_gds_lib() - - def generate_gds_lib(self): - generate_gds_lib("MDM_ADC_TE1_1550",self.cell,with_txt=True) - -class MDM_ADC_TE2_1550(MDM): - def __init__(self,w_wg: float=0.45,gds_lib_generate: bool=False) -> None: - """ - w_wg the single mode input for the device - """ - self.wb0 = 0.85 - self.wb1 = 1.04 - self.wb_in = 0.85 - self.wb_out = 1.2 - - self.w0 = 0.33 - self.w1 = 0.2 - self.w_wg = w_wg - self.xs='strip' - - self.Lt_bus = 32 - self.Lt_cp = 32 - - self.R0 = 40 - self.Rmin=8 - - self.angle=22.5 - self.gap0=0.2 - self.gap1=0.2 - - super().__init__(xs=self.xs, - wb0=self.wb0, wb1=self.wb1, wb_in=self.wb_in, wb_out=self.wb_out, - w_wg=self.w_wg, w0=self.w0, w1=self.w1, - gap0=self.gap0, Lt_bus=self.Lt_bus, R0=self.R0, angle=self.angle, Lt_cp=self.Lt_cp, gap1=self.gap1, - name=None, Lb0=None, symmetric_BUS=False, single_end=None) - if (gds_lib_generate): - self.generate_gds_lib() - - def generate_gds_lib(self): - generate_gds_lib("MDM_ADC_TE2_1550",self.cell,with_txt=True) - -class MDM_ADC_TE3_1550(MDM): - def __init__(self,w_wg: float=0.45,gds_lib_generate: bool=False) -> None: - """ - w_wg the single mode input for the device - """ - self.wb0 = 1.25 - self.wb1 = 1.41 - self.wb_in = 1.2 - self.wb_out = 1.8 - - self.w0 = 0.33 - self.w1 = 0.2 - self.w_wg = w_wg - self.xs = 'strip' - self.Lt_bus = 70 - self.Lt_cp = 70 - - self.R0 = 40 - self.Rmin=8 - self.angle=22.5 - self.gap0=0.2 - self.gap1=0.2 - super().__init__(xs=self.xs, - wb0=self.wb0, wb1=self.wb1, wb_in=self.wb_in, wb_out=self.wb_out, - w_wg=self.w_wg, w0=self.w0, w1=self.w1, - gap0=self.gap0, Lt_bus=self.Lt_bus, R0=self.R0, angle=self.angle, Lt_cp=self.Lt_cp, gap1=self.gap1, - name=None, Lb0=None, symmetric_BUS=False, single_end=None) - - if (gds_lib_generate): - self.generate_gds_lib() - - def generate_gds_lib(self): - generate_gds_lib("MDM_ADC_TE3_1550",self.cell,with_txt=True) - - - - \ No newline at end of file diff --git a/mxpic/components/primitives/beam_splitters.py b/mxpic/components/primitives/beam_splitters.py deleted file mode 100644 index 82f4521..0000000 --- a/mxpic/components/primitives/beam_splitters.py +++ /dev/null @@ -1,250 +0,0 @@ -import nazca as nd -import numpy as np -from scipy.interpolate import CubicSpline - -from ...routing import Route - -from ..geometry import * -from ...foundries import * - -import pandas as pd -from ..geometry import _my_polygon -from ...basic import __cell_arg__ - -class YBranch: - """ - Broadband spline-shaped Y-branch with two bent output ports. - - Parameters - ---------- - name : str or None, optional - Nazca cell name. ``None`` keeps the cell uninstantiated (default is None). - xs : str, optional - Cross-section key used for both the taper body and attachments (default is "strip"). - w : Sequence[float], optional - Width control points (µm) used by the cubic spline along the taper axis. - Length must be >= 2. Default is ``[1.2, 1.0, 1.8, 1.2, 1.0, 1.2, 1.2]``. - L : float, optional - Total spline length in microns (default is 6). - R_att : float, optional - Bend radius of each attachment waveguide in microns (default is 10). - A_att : float, optional - Bend angle (degrees) per attachment arc (default is 10). - w_port : float, optional - Output port width in microns (default is 0.45). - show_pins : bool, optional - Draw Nazca stub markers when True (default is False). - sharp_patch : bool, optional - Add chamfer helpers inside polygons when True (default is True). - res : float, optional - Longitudinal sampling pitch (µm) for polygon discretization (default is 0.1). - """ - def __init__(self, - name : str = None, - xs : str = 'strip', - w : 'list|np.ndarray' = [1.2,1.0,1.8,1.2,1.0,1.2,1.2], - L : float = 6, - R_att : float = 10, - A_att : float = 10, - w_port : float = 0.45, - show_pins : bool = False, - sharp_patch : bool = True, - - res : float = 0.1, - ) -> None: - - self.name = name - - if (name!=None): - self.instantiate = True - else : - self.instantiate = False - - self.w = w - self.L = L - self.res = res - self.R_att = R_att - self.A_att = A_att - self.w_port = w_port - self.xs = xs - - self.cell = self.generate_gds(show_pins=show_pins,sharp_patch=sharp_patch) - - def generate_gds(self,show_pins=False,sharp_patch=True): - with nd.Cell(name=self.name,instantiate=self.instantiate) as C: - - w = np.r_[self.w] - - n_sects = len(self.w)-1 - res = self.L/n_sects - n_points = int(self.L/self.res)+1 - L = np.linspace(0,self.L,n_sects+1) - L_act = np.linspace(0,self.L,n_points) - - f = CubicSpline(L,w) ## cubic spline interpolant - - w_act = f(L_act) - - - for layers,growx,growy,acc in nd.layeriter(xs=self.xs): - (a1,b1), (a2,b2),c1,c2 = growx - - w_cur = w_act*(a1-a2) + (b1-b2) - if (b1!=0 and b2!=0): - w_cur = max(w_cur)*np.ones(np.shape(w_cur)) - vtx_x = np.r_[L_act,np.flip(L_act,0)] - vtx_y = np.r_[w_cur/2,-np.flip(w_cur/2,0)] - vtx = np.c_[vtx_x,vtx_y] - _my_polygon(layer_wg=layers,vtx=vtx).put(0,0,0) - - temp = circle(xs=self.xs,radius=self.R_att,theta_start=0,theta_stop=self.A_att,width=self.w_port).cell.put('a1',self.L,self.w[-1]/2 - self.w_port/2,0) - temp = circle(xs=self.xs,radius=self.R_att,theta_start=-self.A_att,theta_stop=0,width=self.w_port).cell.put('a1',temp.pin['b1'],flip=1) - nd.Pin(name='b1',width=self.w_port).put(temp.pin['b1']) - - temp = circle(xs=self.xs,radius=self.R_att,theta_start=0,theta_stop=self.A_att,width=self.w_port).cell.put('a1',self.L,-self.w[-1]/2 + self.w_port/2,0,flip=1) - temp = circle(xs=self.xs,radius=self.R_att,theta_start=-self.A_att,theta_stop=0,width=self.w_port).cell.put('a1',temp.pin['b1'],flip=0) - nd.Pin(name='b2',width=self.w_port).put(temp.pin['b1']) - - nd.Pin(name='a1',width=self.w[0]).put(0,0,180) - - if (show_pins): - nd.put_stub() - - return C - - -class Ybranch_3wg: - """ - Initialization of a symmetric tapered coupler for 3dB coupling - - Parameters - ---------- - name : str or None, optional - Nazca cell name (default is None). - - 1. taper part - w0 : float, optional - Width (µm) of the center arm at the coupling region entrance (default is 0.4). - w1 : float, optional - Width (µm) of the outer arms at the coupling region exit (default is 0.2). - gap : float, optional - Vertical spacing (µm) between adjacent arms inside the coupler (default is 0.18). - Lcp : float, optional - Length (µm) of each taper section forming the coupler (default is 20). - xs : str, optional - Cross-section key for all segments (default is "strip"). - - 2. attachment part - w_wg : float, optional - External IO waveguide width in microns (default is 0.45). - R0 : float, optional - Bend radius (µm) used for both output waveguides (default is 10). - angle : float, optional - Bend deflection angle in degrees (default is 20). - L_attach : float, optional - Length (µm) of straight sections appended after the output tapers (default is 3). - L_in_tp : float, optional - Taper length (µm) that links the IO waveguide to width ``w0`` (default is 3). - - sharp_patch : bool, optional - Insert chamfer helpers when True (default is True). - """ - def __init__(self, - name = None, - w0:float=0.4, - w1:float=0.2, - gap:float=0.18, - Lcp:float=20, - xs:str='strip', - w_wg:float=0.45, - R0:float=10, - angle:float=20, - L_attach:float=3, - L_in_tp:float=3, - sharp_patch:bool=True): - - self.name = name - if (self.name==None): - self.instantiate = False - else : - self.instantiate = True - - self.w0 = w0 - self.w1 = w1 - self.gap = gap - self.Lcp = Lcp - self.xs = xs - self.w_wg = w_wg - self.R0 = R0 - self.angle = angle - self.L_attach = L_attach - self.L_in_tp = L_in_tp - - self.cell = self.generate_gds(sharp_patch=sharp_patch) - self.L = np.abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x) - - def generate_gds(self,sharp_patch,err_asy=0): - with nd.Cell(instantiate=self.instantiate,name=self.name) as C: - - w0 = self.w0 - w1 = self.w1 - Lcp = self.Lcp - gap = self.gap - xs = self.xs - w_wg = self.w_wg - L_attach = self.L_attach - L_in_tp = self.L_in_tp - angle = self.angle - R0 = self.R0 - - t_mid = nd.taper(width1=w0,width2=w1,length=Lcp,xs=xs).put(0,0,0) - t_u = nd.taper(width2=w0,width1=w1,length=Lcp,xs=xs).put(0,w1/2+w0/2+gap,0) - t_d = nd.taper(width2=w0,width1=w1,length=Lcp,xs=xs).put(0,-(w1/2+w0/2+gap),0) - t_in = nd.taper(width1=w_wg,width2=w0,length=L_in_tp,xs=xs).put(-L_in_tp,0,0) - t_in = nd.strt(width=w_wg,length=L_attach,xs=xs).put(t_in.pin['a0'],flip=0) - nd.Pin(name='a1',pin=t_in.pin['b0']).put() - - au = nd.bend(radius=R0,angle=angle,xs=xs,width=w0).put(t_u.pin['b0'],flip=0) - au = nd.bend(radius=R0,angle=angle,xs=xs,width=w0).put(au.pin['b0'],flip=1) - au = nd.taper(width1=w0,width2=w_wg,length=L_in_tp,xs=xs).put(au.pin['b0'],flip=0) - au = nd.strt(width=w_wg,length=L_attach,xs=xs).put(au.pin['b0'],flip=0) - nd.Pin(name='b1',pin=au.pin['b0']).put() - - ad = nd.bend(radius=R0,angle=angle,xs=xs,width=w0).put(t_d.pin['b0'],flip=1) - ad = nd.bend(radius=R0,angle=angle,xs=xs,width=w0).put(ad.pin['b0'],flip=0) - ad = nd.taper(width1=w0,width2=w_wg,length=L_in_tp,xs=xs).put(ad.pin['b0'],flip=0) - ad = nd.strt(width=w_wg,length=L_attach,xs=xs).put(ad.pin['b0'],flip=0) - nd.Pin(name='b2',pin=ad.pin['b0']).put() - - - if (sharp_patch==True): - dY = np.abs(ad.pin['b0'].y-au.pin['b0'].y)+w_wg - for layers,growx,growy,acc in nd.layeriter(xs=xs): - (a1,b1), (a2,b2),c1,c2 = growx - if (b1!=0 and b2!=0): - L_patch = dY*(a1-a2)+(b1-b2) - W_patch = dY*(a1-a2)+(b1-b2) - nd.strt(length=W_patch,width=L_patch,layer=layers).put(ad.pin['b0'].x,0,0) - return C - - def generate_test_gds(self,gc,dX_gc2gc=400,dY_gc2gc=80,sharp_patch = True,Rbend=15): - with nd.Cell(instantiate=False) as C: - - - gc_cell = __cell_arg__(arg=gc,arg_name="gc",func_name="mxpic::Ybranch_3wg::generate_test_gds") - - inst = self.cell.put('a1',-self.L/2,0,0) - - gc_In = gc_cell.put('g1',-dX_gc2gc/2,0,180) - gc_O1 = gc_cell.put('g1',dX_gc2gc/2, dY_gc2gc/2,0) - gc_O2 = gc_cell.put('g1',dX_gc2gc/2,-dY_gc2gc/2,0) - pic_strip = Route(radius=Rbend,width=self.w_wg,xs=self.xs) - - pic_strip.taper(pin=gc_O1.pin['g1'],width1=gc_O1.pin['g1'].width,width2=self.w_wg,length=5,arrow=False) - pic_strip.sbend_p2p(original_function=not sharp_patch, pin2=inst.pin['b1'],arrow=False).put() - - pic_strip.taper(pin=gc_O2.pin['g1'],width1=gc_O2.pin['g1'].width,width2=self.w_wg,length=5,arrow=False) - pic_strip.sbend_p2p(original_function=not sharp_patch, pin2=inst.pin['b2'],arrow=False).put() - pic_strip.taper_p2p(pin1=gc_In.pin['g1'],pin2=inst.pin['a1'],arrow=False).put() - - return C \ No newline at end of file diff --git a/mxpic/components/primitives/directional_couplers.py b/mxpic/components/primitives/directional_couplers.py deleted file mode 100644 index be7ca2f..0000000 --- a/mxpic/components/primitives/directional_couplers.py +++ /dev/null @@ -1,1261 +0,0 @@ - -import nazca as nd -import numpy as np -from numpy import pi - -from ...routing import Route -from ..geometry import _my_polygon,circle,Clothoid -from ...basic import __cell_arg__ - -class ring_bus_wg: - ## two types: - ## DC, BDC - """ - Initialize ring-bus waveguide coupler settings. - - Parameters - ---------- - xs : str, optional - Waveguide cross-section name (default is "strip"). - R_cp : int, optional - Coupling waveguide bend radius in microns for BDC mode (default is 20). - w_bus : float, optional - Coupling waveguide width in microns (default is 0.5). - w_wg : float, optional - Port waveguide width in microns (default is 0.5). - bend_DC : bool, optional - Use bend directional coupler (True) or straight DC (False, default is True). - dLc : int, optional - Straight coupling length in microns for DC mode (default is 10). - dAc : int, optional - Coupling angle in degrees for BDC mode (default is 10). - euler_transistion : bool, optional - Enable Euler transition segments before/after the coupling arc (default is False). - dL_trans : int, optional - Straight transition length in microns when Euler transition is enabled (default is 10). - dA_trans : int, optional - Transition bend angle in degrees for the Euler segment (default is 30). - R_max_trans : int, optional - Maximum radius in microns for the transition segment (default is 100). - w_trans : float, optional - Waveguide width in microns inside the transition (default is 0.5). - euler_anti_bend : bool, optional - Enable Euler anti-bend routing after the coupling section (default is False). - R_max_anti : int, optional - Maximum radius in microns for the anti-bend segment (default is 100). - R_min_anti : int, optional - Minimum radius in microns for the anti-bend segment (default is 10). - A_anti : float, optional - Anti-bend angle in degrees (default is None, meaning auto-calculated). - res : float, optional - Geometry discretization step in microns (default is 0.1). - wg_Ltp : int, optional - Port taper length in microns (default is 5). - dL_p2p : float, optional - Target horizontal spacing in microns between input/output ports (default is None). - sharp_patch : bool, optional - Insert chamfer polygons to avoid sharp corners (default is True). - show_pins : bool, optional - Draw Nazca stub markers for debugging (default is False). - end_patch : bool, optional - Force small straight fillers at the end of Euler segments (default is False). - clothoid_order : int, optional - Order of the spiral section used inside :class:`Clothoid` transitions (default is 1). - """ - - def __init__(self, - xs='strip', - R_cp = 20, - w_bus = 0.5, - bend_DC = True, - w_wg = 0.5, - dLc = 10, - dAc = 10, - - euler_transistion = False, - dL_trans = 10, - dA_trans = 30, - R_max_trans = 100, - w_trans = 0.5, - - euler_anti_bend = False, - R_max_anti = 100, - R_min_anti = 10, - A_anti = None, - res = 0.1, - wg_Ltp = 5, - dL_p2p = None, - sharp_patch = True, - show_pins = False, - end_patch = False, - clothoid_order = 1, - ) -> None: - - self.xs = xs - self.R_cp = R_cp - self.w_bus = w_bus - self.dLc = dLc - self.dAc = dAc - # self.n_points = n_points - self.w_wg = w_wg - self.bend_DC = bend_DC - self.euler_transistion = euler_transistion - self.dL_trans = dL_trans - self.dA_trans = dA_trans - self.R_max_trans = R_max_trans - self.w_trans = w_trans - # self.euler_anti_bend = euler_anti_bend ## parameter abondond - self.R_max_anti = R_max_anti - self.R_min_anti = R_min_anti - self.A_anti = A_anti - self.wg_Ltp = wg_Ltp - self.dL_p2p = dL_p2p - self.res = res - - self.end_patch = end_patch - - self.L = 0 - self.clothoid_order = clothoid_order - self.cell = self.generate_gds(sharp_patch=sharp_patch,show_pins=show_pins) - - def generate_gds(self,sharp_patch,show_pins=False): - with nd.Cell(instantiate=False) as C: - - w_crack = 0.002 - if (self.bend_DC and self.euler_transistion): - if (self.A_anti == None): - self.A_anti = self.dAc/2+self.dA_trans - - cp = Clothoid(R=[self.R_cp,self.R_cp,self.R_max_trans,self.R_min_anti,self.R_max_anti], - A=[0, self.dAc/2,self.dAc/2+self.dA_trans,(self.dAc/2+self.dA_trans) - self.A_anti/2,(self.dAc/2+self.dA_trans) - self.A_anti], - w=[self.w_bus,self.w_bus,self.w_trans,(self.w_trans+self.w_wg)/2,self.w_wg],xs=self.xs, - spiral_order=[1,self.clothoid_order,1,1], - sharp_patch=sharp_patch,end_patch=self.end_patch) - ar = cp.cell.put('a1',0,0,0).pin['b1'] - al = cp.cell.put('a1',0,0,180,flip=1).pin['b1'] - - nd.strt(length=w_crack,width=self.w_bus,xs=self.xs).put(-w_crack/2,0,0) - nd.strt(length=w_crack,width=self.w_wg,xs=self.xs).put(ar.x-w_crack/2,ar.y,0) - nd.strt(length=w_crack,width=self.w_wg,xs=self.xs).put(al.x-w_crack/2,al.y,0) - - self.L = self.L + cp.L0 - - elif (self.bend_DC): - """ Bend DC without Euler transision """ - - # if (self.bend_DC): - cp = circle(xs=self.xs,radius=self.R_cp, width = self.w_bus, theta_start = 270-self.dAc/2, theta_stop=270+self.dAc/2,res=self.res, - # n_points=self.n_points, - sharp_patch=sharp_patch).cell.put(0,self.R_cp,0) - al = cp.pin['a1'] - ar = cp.pin['b1'] - - self.L = self.L + self.R_cp*self.dAc/180*np.pi - - self.w_trans = self.w_bus - TL = nd.strt(length=self.dL_trans,width=self.w_bus,xs=self.xs).put('a0',al) - TR = nd.strt(length=self.dL_trans,width=self.w_bus,xs=self.xs).put('a0',ar) - Ainner = self.dAc/2 - - self.L = self.L + self.dL_trans*2 - - if (self.A_anti == None): - self.A_anti = Ainner - - Anti = circle(xs=self.xs,radius=self.R_max_anti, width = self.w_trans, theta_start = 90, theta_stop=90+self.A_anti,res=self.res, - # n_points=self.n_points, - sharp_patch=sharp_patch) - ar = Anti.cell.put('b1',TR.pin['b0']).pin['a1'] - al = Anti.cell.put('b1',TL.pin['b0'],flip=1).pin['a1'] - - self.L = self.L + self.R_max_anti*self.A_anti*2*180/np.pi - - - TPR = nd.taper(length=self.wg_Ltp,width1=ar.width,width2=self.w_wg,xs=self.xs).put('a0',ar) - TPL = nd.taper(length=self.wg_Ltp,width1=al.width,width2=self.w_wg,xs=self.xs).put('a0',al) - self.L = self.L + self.wg_Ltp*2 - - L = (TPR.pin['b0'].x - TPL.pin['b0'].x) ## L distance pin2pin - if (self.dL_p2p!=None): - if (L, is not recongized as a cell") - - inst = self.cell.put('a1',-self.L/2,self.cell.pin['a1'].y,0) - pic_strip = Route(radius=15,width=self.wu_in,xs=self.xs) - - GT_U_In = gc_cell.put('g1',-dX_gc2gc/2,dY_gc2gc/2,180) - nd.taper(width1=GT_U_In.pin['g1'].width,width2=self.wu_in,length=5,xs=self.xs).put(GT_U_In.pin['g1']) - pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['a1']).put() - - GT_D_In = gc_cell.put('g1',-dX_gc2gc/2,-dY_gc2gc/2,180) - nd.taper(width1=GT_D_In.pin['g1'].width,width2=self.wd_in,length=5,xs=self.xs).put(GT_D_In.pin['g1']) - pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['a2'],width=self.wd_in).put() - - GT_U_Out = gc_cell.put('g1', dX_gc2gc/2,dY_gc2gc/2,0) - nd.taper(width1=GT_U_Out.pin['g1'].width,width2=self.wu_out,length=5,xs=self.xs).put(GT_U_Out.pin['g1']) - pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['b1'],width=self.wu_out).put() - - GT_D_Out = gc_cell.put('g1', dX_gc2gc/2,-dY_gc2gc/2,0) - nd.taper(width1=GT_D_Out.pin['g1'].width,width2=self.wd_out,length=5,xs=self.xs).put(GT_D_Out.pin['g1']) - pic_strip.sbend_p2p(original_function=not sharp_patch,pin2=inst.pin['b2'],width=self.wd_out).put() - - return C - - -class DC(ADC_STD_2x2): - """ - Standard symmetric directional coupler wrapper built on ``ADC_STD_2x2``. - - Parameters - ---------- - name : str, optional - Unique cell identifier (default is None, meaning no instantiation). - xs : str, optional - Nazca cross-section key for both guides (default is "strip"). - w_cp : float, optional - Coupling-section core width in microns (default is 0.45). - w_wg : float, optional - IO port width in microns (default is 0.45). - L_cp : float, optional - Coupling-section length in microns (default is 30). - angle : float, optional - Port bend deflection angle in degrees (default is 20). - gap : float, optional - Gap between the two cores in microns (default is 0.2). - sbend_type : str, optional - Type of the IO bend ("euler" or "circular", default is "circular"). - Rmax : float, optional - Maximum Euler radius in microns when "sbend_type" is "euler" (default is None). - Rmin : int, optional - Minimum Euler radius in microns (default is 5). - R0 : int, optional - Circular bend radius in microns applied to both ports (default is 10). - tp_angle : int, optional - Straight taper half-angle in degrees when Euler bends are disabled (default is 2). - sharp_patch : bool, optional - Insert chamfer polygons to avoid acute corners (default is True). - show_pins : bool, optional - Draw Nazca stub markers for debugging (default is False). - """ - def __init__(self, - name = None, - xs:str='strip', - w_cp:float=0.45, - w_wg:float=0.45, - L_cp:float=30, - angle:float=20, - gap:float=0.2, - sbend_type:str='circular', - Rmax:float=None, - Rmin:float=5, - R0:float=10, - tp_angle:float=2, - sharp_patch:bool=True, - show_pins:bool=False): - - super().__init__(name, xs, wu0=w_cp, wu1=w_cp, - wu_in=w_wg, wu_out=w_wg, - wd0=w_cp, wd1=w_cp, - wd_in=w_wg, wd_out=w_wg, - Lu=L_cp, Ld=L_cp, angle=angle, - g0=gap, g1=gap, - sbend_type=sbend_type, Rmax=Rmax, Rmin=Rmin, - Ru0=R0, Ru1=R0, Rd0=R0, Rd1=R0, tp_angle=tp_angle, sharp_patch=sharp_patch,show_pins=show_pins) - - def generate_test_gds(self,gc,dX_gc2gc=300,dY_gc2gc=40,sharp_patch=True): - with nd.Cell(name=self.cell.cell_name+"_test", instantiate=False) as C: - - gc_cell = __cell_arg__(arg=gc,arg_name="gc",func_name="mxpic::DC::generate_test_gds") - - gc_ID = gc_cell.put('g1',0,-dY_gc2gc,180) - gc_IU = gc_cell.put('g1',0,0,180) - gc_OU = gc_cell.put('g1',dX_gc2gc,-dY_gc2gc,0) - gc_OD = gc_cell.put('g1',dX_gc2gc,0,0) - # Put DC - inst = self.cell.put('a1',-self.L/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0) - - # Connect all the ports - stripe=Route(radius=self.Ru0, width=self.wu_in, xs="strip") - - if (abs(inst.pin['b1'].y - inst.pin['b2'].y)<10) : - temp = stripe.sbend_route(pin=inst.pin['a1'],offset=5).put(flip=1) - stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=temp.pin['b0'],arrow=False,original_function=not sharp_patch).put() - - temp = stripe.sbend_route(pin=inst.pin['a2'],offset=5).put() - stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=temp.pin['b0'],arrow=False,original_function=not sharp_patch).put() - - temp = stripe.sbend_route(pin=inst.pin['b1'],offset=5).put() - stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=temp.pin['b0'],arrow=False,original_function=not sharp_patch).put() - - temp = stripe.sbend_route(pin=inst.pin['b2'],offset=5).put(flip=1) - stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=temp.pin['b0'],arrow=False,original_function=not sharp_patch).put() - else : - stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=inst.pin['a1'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=inst.pin['a2'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=inst.pin['b1'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=inst.pin['b2'],arrow=False,original_function=not sharp_patch).put() - return C - -class BS_tdc(ADC_STD_2x2): - """ - Balanced splitter based on asymmetric taper-directional-coupler sections. - - Parameters - ---------- - name : str, optional - Nazca cell name (default is None). - xs : str, optional - Nazca cross-section for both guides (default is "strip"). - wa0 : float, optional - Upper input width in microns (default is 0.35). - wa1 : float, optional - Upper output width in microns (default is 0.45). - wb0 : float, optional - Lower input width in microns (default is 0.55). - wb1 : float, optional - Lower output width in microns (default is 0.45). - w_wg : float, optional - External IO width in microns (default is 0.45). - gap : float, optional - Coupling gap in microns (default is 0.2). - Lt : float, optional - Coupling/taper length in microns (default is 20). - R0 : float, optional - Port bend radius in microns (default is 30). - angle : float, optional - Port bend angle in degrees (default is 15). - sbend_type : str, optional - IO bend type ("circle" or "euler", default is "circle"). - """ - def __init__(self, - name=None, - xs:str ='strip', - wa0:float = 0.35, - wa1:float = 0.45, - wb0:float = 0.55, - wb1:float = 0.45, - w_wg:float = 0.45, - gap:float =0.2, - Lt:float =20, - R0:float =30, - angle:float =15, - sbend_type:str ='circle', - ): - - super().__init__(name = name, - xs=xs, - wu0=wa0,wu1=wa1,wu_in=w_wg,wu_out=w_wg, - wd0=wb0,wd1=wb1,wd_in=w_wg,wd_out=w_wg, - g0=gap,g1=gap, - Ru0=R0,Ru1=R0,Rmin=5, - Rd0=R0,Rd1=R0,angle=angle, - Ld=Lt,Lu=Lt, - sbend_type=sbend_type) - - -class MDM(ADC_STD_2x2): - """ - Mode-division-multiplexing directional coupler derived from ``ADC_STD_2x2``. - - Parameters - ---------- - name : str, optional - Nazca cell name (default is None). - xs : str, optional - Device cross-section key (default is "strip"). - wb0 : float, optional - BUS waveguide width at the input plane in microns (default is 0.45). - wb1 : float, optional - BUS waveguide width at the output plane in microns (default is 0.61). - wb_in : float, optional - BUS input port width in microns (default is 0.45). - wb_out : float, optional - BUS output port width in microns (default is 0.88). - w_wg : float, optional - Coupler-waveguide IO width in microns (default is 0.45). - w0 : float, optional - Coupler waveguide width at the input plane in microns (default is 0.33). - w1 : float, optional - Coupler waveguide width at the output plane in microns (default is 0.2). - gap0 : float, optional - Initial BUS–coupler gap in microns (default is 0.2). - Lt_bus : float, optional - BUS taper length from wb0 to wb1 in microns (default is 20). - R0 : float, optional - Lower-waveguide bend radius in microns (default is 40). - angle : float, optional - Bend deflection angle in degrees (default is 22.5). - Lt_cp : float, optional - Coupler taper length from w0 to w1 in microns (default is None, meaning ``Lt_bus``). - gap1 : float, optional - Final BUS–coupler gap in microns (default is None, meaning ``gap0``). - Lb0 : float, optional - Reserved for future BUS offsets (default is None). - symmetric_BUS : bool, optional - Whether BUS geometry is mirrored (default is True). - single_end : bool, optional - Keep single-ended termination on the coupler arm (default is True). - Rmin : float, optional - Minimum Euler radius in microns for bends (default is 8). - """ - def __init__(self, - name = None, - xs:str='strip', - wb0:float =0.45, - wb1:float =0.61, - wb_in:float =0.45, - wb_out:float =0.88, - w_wg:float =0.45, - w0:float =0.33, - w1:float =0.2, - gap0:float =0.2, - Lt_bus:float =20, - R0:float =40, - angle:float =22.5, - Lt_cp:float =None, - gap1:float =None, - Lb0:float =None, - symmetric_BUS:bool =True, - single_end:bool =True, - Rmin:float =8 - ): - - self.wb0=wb0 ## BUS waveguide width on the input - - if (wb1!=None): ## BUS waveguide width on the output - self.wb1=wb1 - else: - self.wb1=wb0 - wb1 = wb0 - self.w0=w0 - if (w1!=None): - self.w1=w1 - else: - self.w1=w0 - w1= w0 - self.w_wg=w_wg - self.gap0=gap0 - if (gap1!=None): - self.gap1=gap1 - else: - self.gap1=gap0 - gap1 = gap0 - - if (Lt_cp==None): - Lt_cp = Lt_bus - - self.Lt_bus = Lt_bus - self.Lt_cp = Lt_cp - - self.xs = xs - self.Lt_cp = Lt_cp - self.R0 = R0 - self.angle = angle - self.symmetric_BUS = symmetric_BUS ## defining the type of bus waveguide - self.Rmin = Rmin - super().__init__(name = name,xs=xs, - wu0=wb0,wu1=wb1,wu_in=wb_in,wu_out=wb_out, - wd0=w0,wd1=w1,wd_in=w_wg,wd_out=w1, - Lu=Lt_bus,Ld=Lt_cp, - g0=gap0,g1=gap1, - Ru0=0,Ru1=0, - Rmin=self.Rmin, - Rd0=R0,Rd1=R0, - angle=angle) - - self.L = np.abs(self.cell.pin['a1'].x-self.cell.pin['b1'].x) - - def generate_test_gds(self,gc,dX_gc2gc=300,dY_gc2gc=40,sharp_patch=True): - with nd.Cell(name=self.cell.cell_name+"_test", instantiate=False) as C: - - gc_cell = __cell_arg__(arg=gc,arg_name="gc",func_name="mxpic::MDM::generate_test_gds") - - # Put DC - L_taper = (np.abs(self.cell.pin['a1'].width-gc_cell.pin['g1'].width))/np.tan(2/180*pi) - - mdm_In = self.cell.put('b1',-dX_gc2gc/2 + self.L + 25+L_taper,0,180) - mdm_Out = self.cell.put('b1', dX_gc2gc/2 - self.L - 25-L_taper,0,0,flip=1) - - - GC_IU = gc_cell.put('g1',-dX_gc2gc/2,dY_gc2gc/2,180) - GC_ID = gc_cell.put('g1',-dX_gc2gc/2,-dY_gc2gc/2,180) - GC_OU = gc_cell.put('g1', dX_gc2gc/2,dY_gc2gc/2,0) - GC_OD = gc_cell.put('g1', dX_gc2gc/2,-dY_gc2gc/2,0) - - # # Connect all the ports - stripe=Route(radius=10, width=self.w_wg, xs="strip") - nd.taper(width1=mdm_In.pin['a1'].width,width2=gc_cell.pin['g1'].width,length=L_taper,xs='strip').put(mdm_In.pin['a1']) - stripe.sbend_p2p(pin2=GC_IU.pin['g1'],arrow=False,original_function=not sharp_patch).put() - - stripe.sbend_p2p(pin1=GC_ID.pin['g1'],pin2=mdm_In.pin['a2'],arrow=False,original_function=not sharp_patch).put() - - nd.taper(width1=mdm_Out.pin['a1'].width,width2=gc_cell.pin['g1'].width,length=L_taper,xs='strip').put(mdm_Out.pin['a1']) - stripe.sbend_p2p(pin1=GC_OU.pin['g1'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=GC_OD.pin['g1'],pin2=mdm_Out.pin['a2'],arrow=False,original_function=not sharp_patch).put() - - stripe.taper_p2p(pin1=mdm_In.pin['b1'],pin2=mdm_Out.pin['b1'],arrow=False).put() - - return C - - - - -class DC_bend : - """ - This is a class for bend directional coupler for broadband and fabrication tolerant power splitting. - - Parameters - ---------- - name : Any, optional - Unique identifier for the device cell. Default is None. - w_in : float, optional - Width parameter in microns. Default is 0.45. - w_out : float, optional - Width parameter in microns. Default is 0.45. - gap : float, optional - Spacing or gap parameter in microns. Default is 0.2. - r_in : int, optional - Radius parameter in microns. Default is 40. - theta_arc : int, optional - Angle parameter in degrees. Default is 30. - w_wg : float, optional - Width parameter in microns. Default is 0.45. - theta_ext : int, optional - Angle parameter in degrees. Default is 15. - xs_wg : str, optional - Layer or cross-section name used by the device. Default is 'strip'. - sharp_patch : bool, optional - Whether to add geometry patches for sharp corners or cladding continuity. Default is True. - show_pins : bool, optional - Whether to draw pin markers in the generated layout. Default is False. - """ - - """ - Bend-based directional coupler for broadband, fabrication-tolerant splitting. - - Parameters - ---------- - name : str, optional - Nazca cell name (default is None). - w_in : float, optional - Inner (tight) waveguide width in the coupling region, in microns (default is 0.45). - w_out : float, optional - Outer waveguide width in the coupling region, in microns (default is 0.45). - gap : float, optional - Separation between waveguides in microns (default is 0.2). - r_in : float, optional - Bend radius of the inner waveguide in microns (default is 40). - theta_arc : float, optional - Coupling-arc angle in degrees (default is 30). - w_wg : float, optional - IO waveguide width in microns (default is 0.45). - theta_ext : float, optional - Extra bend angle used to align IO planes in degrees (default is 15). - xs_wg : str, optional - Nazca cross-section for both waveguides (default is "strip"). - sharp_patch : bool, optional - Insert chamfer polygons to smooth acute corners (default is True). - show_pins : bool, optional - Draw Nazca stub markers for debugging (default is False). - """ - - - def __init__( - self, - name = None, - w_in=0.45, - w_out=0.45, - gap=0.2, - r_in=40, - theta_arc=30, - w_wg=0.45, - theta_ext=15, - xs_wg='strip', - - sharp_patch=True, - show_pins=False - ): - - self.name = name - if (self.name==None): - self.instantiate = False - else : - self.instantiate = True - - self.w_in = w_in - self.w_out = w_out - self.gap = gap - self.r_in = r_in - self.r_out = self.r_in+(self.w_in+self.w_out)/2+self.gap - self.theta_arc = theta_arc - self.theta_ext = theta_ext - self.w_wg = w_wg - self.xs_wg = xs_wg - self.sharp_patch = sharp_patch - self.show_pins = show_pins - self.cell = self.generate_gds(name) - - def generate_gds(self, cellname=""): - ''' - Generate GDS. - ''' - with nd.Cell(name="DC_Bend"+str(cellname), instantiate=self.instantiate) as C: - wg = Route(width=self.w_wg, radius=10, xs=self.xs_wg) - ## Put Outer Bend Region first - - bent_out_coup_r = wg.bend(width=self.w_out, radius=self.r_out, angle=self.theta_arc/2, arrow=False).put(0, 0, 0) - bend_out_connect_r = wg.bend(width=self.w_out, radius=self.r_out, angle=-self.theta_arc/2, arrow=False).put(bent_out_coup_r.pin['b0']) - - bent_out_coup_l = wg.bend(width=self.w_out, radius=self.r_out, angle=self.theta_arc/2, arrow=False).put(0, 0, 0, flop=True) - bend_out_connect_l = wg.bend(width=self.w_out, radius=self.r_out, angle=self.theta_arc/2, arrow=False).put(bent_out_coup_l.pin['b0']) - ## Put Inner Bend Region - bent_in_coup_r = wg.bend(width=self.w_in, radius=self.r_in, angle=self.theta_arc/2, arrow=False).put(0, (self.w_in+self.w_out)/2+self.gap, 0) - wg.bend(width=self.w_in, radius=self.r_in, angle=self.theta_ext, arrow=False).put(bent_in_coup_r.pin['b0']) - bend_in_connect_r = wg.bend(width=self.w_in, angle=-self.theta_arc/2-self.theta_ext, arrow=False).put() - - bend_in_coup_l = wg.bend(width=self.w_in, radius=self.r_in, angle=self.theta_arc/2, arrow=False).put(0, (self.w_in+self.w_out)/2+self.gap, 0, flop=True) - wg.bend(width=self.w_in, radius=self.r_in, angle=-self.theta_ext, arrow=False).put(bend_in_coup_l.pin['b0']) - bend_in_connect_l = wg.bend(width=self.w_in, angle=self.theta_arc/2+self.theta_ext, arrow=False).put() - - ## Make upper and lower waveguide's output at the same x-plane - if bend_out_connect_r.pin['b0'].x > bend_in_connect_r.pin['b0'].x: - l_extra = bend_out_connect_r.pin['b0'].x-bend_in_connect_r.pin['b0'].x - bend_in_connect_r = wg.strt(length=l_extra, width=self.w_in, arrow=False).put(bend_in_connect_r.pin['b0']) - bend_in_connect_l = wg.strt(length=l_extra, width=self.w_in, arrow=False).put(bend_in_connect_l.pin['b0']) - elif bend_out_connect_r.pin['b0'].x < bend_in_connect_r.pin['b0'].x: - l_extra = bend_in_connect_r.pin['b0'].x-bend_out_connect_r.pin['b0'].x - bend_out_connect_r = wg.strt(length=l_extra, width=self.w_out, arrow=False).put(bend_out_connect_r.pin['b0']) - bend_out_connect_l = wg.strt(length=l_extra, width=self.w_out, arrow=False).put(bend_out_connect_l.pin['b0']) - - ## Add taper to make the width in the coupling region connect with normal wg - l_taper = 2 - port_out1 = wg.taper(width1=self.w_in, width2=self.w_wg, length=l_taper, arrow=False).put(bend_in_connect_r.pin['b0']) - port_in1 = wg.taper(width1=self.w_in, width2=self.w_wg, length=l_taper, arrow=False).put(bend_in_connect_l.pin['b0']) - port_out2 = wg.taper(width1=self.w_out, width2=self.w_wg, length=l_taper, arrow=False).put(bend_out_connect_r.pin['b0']) - port_in2 = wg.taper(width1=self.w_out, width2=self.w_wg, length=l_taper, arrow=False).put(bend_out_connect_l.pin['b0']) - - ## Put pins - nd.Pin(name="a0", width=self.w_wg).put((port_in1.pin['b0'].x+port_in2.pin['b0'].x)/2, (port_in1.pin['b0'].y+port_in2.pin['b0'].y)/2, 180) - nd.Pin(name="a1", width=self.w_wg).put(port_in1.pin['b0']) - nd.Pin(name="a2", width=self.w_wg).put(port_in2.pin['b0']) - nd.Pin(name="b1", width=self.w_wg).put(port_out1.pin['b0']) - nd.Pin(name="b2", width=self.w_wg).put(port_out2.pin['b0']) - self.width = np.abs(port_out1.pin['b0'].y - port_out2.pin['b0'].y) - self.length = np.abs(port_out1.pin['b0'].x - port_in1.pin['b0'].x) - if self.show_pins: - nd.put_stub() - - pin_a1 = port_in1.pin['b0'] - pin_a2 = port_in2.pin['b0'] - pin_b1 = port_out1.pin['b0'] - pin_b2 = port_out2.pin['b0'] - dY1 = np.abs(pin_a1.y-pin_a2.y) - dX1 = np.abs(pin_a1.x-pin_a2.x) - dY2 = np.abs(pin_b1.y-pin_b2.y) - dX2 = np.abs(pin_b1.x-pin_b2.x) - - if (self.sharp_patch==True): - for layers,growx,growy,acc in nd.layeriter(xs=self.xs_wg): - (a1,b1), (a2,b2),c1,c2 = growx - if (b1!=0 and b2!=0): - L_patch = (dX1+5)*(a1-a2)+(b1-b2) - W_patch = (dY1+self.w_wg)*(a1-a2)+(b1-b2) - nd.strt(length=L_patch,width=W_patch,layer=layers).put(np.max([pin_a1.x,pin_a2.x]),(pin_a1.y+pin_a2.y)/2,180) - - - L_patch = (dX2+5)*(a1-a2)+(b1-b2) - W_patch = (dY2+self.w_wg)*(a1-a2)+(b1-b2) - nd.strt(length=L_patch,width=W_patch,layer=layers).put(np.min([pin_b1.x,pin_b2.x]),(pin_b1.y+pin_b2.y)/2,0) - return C - - def generate_test_gds(self,gc,dX_gc2gc=300,dY_gc2gc=40,sharp_patch=True): - with nd.Cell(name=self.cell.cell_name+"_test", instantiate=False) as C: - - gc_cell = __cell_arg__(arg=gc,arg_name="gc",func_name="mxpic::DC_bend::generate_test_gds") - - # gc_ID = gc_cell.put('g1',-dX_gc2gc/2,-dY_gc2gc/2,180) - # gc_IU = gc_cell.put('g1',-dX_gc2gc/2,dY_gc2gc/2,180) - # gc_OU = gc_cell.put('g1',dX_gc2gc/2,-dY_gc2gc/2,0) - # gc_OD = gc_cell.put('g1',dX_gc2gc/2,dY_gc2gc/2,0) - # # Put DC - # dc = self.cell.put('a1',-self.length/2,0,0) - - gc_ID = gc_cell.put('g1',0,-dY_gc2gc,180) - gc_IU = gc_cell.put('g1',0,0,180) - gc_OU = gc_cell.put('g1',dX_gc2gc,-dY_gc2gc,0) - gc_OD = gc_cell.put('g1',dX_gc2gc,0,0) - # Put DC - dL_DC = self.cell.pin['b1'].x - self.cell.pin['a1'].x - inst = self.cell.put('a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0) - - # Connect all the ports - stripe=Route(radius=10, width=self.w_wg, xs="strip") - stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=inst.pin['a1'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=inst.pin['a2'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=inst.pin['b1'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=inst.pin['b2'],arrow=False,original_function=not sharp_patch).put() - return C - - -class DC_pX_3sg: - """ - Three-segment phase-tunable directional coupler (pX) generator. - - Parameters - ---------- - name : str, optional - Nazca cell name (default is None). - xs_wg : str, optional - Cross-section key for all segments (default is "strip"). - Lc1 : float, optional - Length of the first coupling segment in microns (default is 10). - Lp1 : float, optional - Phase-shifter length in microns (default is 5). - Lc2 : float, optional - Length of the second coupling segment in microns (default is 10). - Lt : float, optional - Taper length between coupling and phase sections in microns (default is 1). - w_cp : float, optional - Nominal coupling width in microns (default is 0.5). - dw : float, optional - Width offset applied to the phase section in microns (default is 0.1). - gap : float, optional - Vertical spacing between the two cores in microns (default is 0.2). - R0 : float, optional - Bend radius in microns for port transitions (default is 10). - A : float, optional - Bend angle in degrees for port transitions (default is 15). - w_wg : float, optional - External IO width in microns (default is 0.45). - pX_type : str, optional - Phase-section topology ("symmetric" or "asymmetric", default is "symmetric"). - port_symmetric : bool, optional - Use mirrored port routing for both arms (default is True). - sharp_patch : bool, optional - Insert chamfer polygons to mitigate sharp tips (default is True). - """ - - def __init__(self, - name = None, - xs_wg:str='strip', - Lc1:float=10, - Lp1:float=5, - Lc2:float=10, - Lt:float=1, - w_cp:float=0.5, - dw:float=0.1, - gap:float=0.2, - R0:float=10, - A:float=15, - w_wg:float=0.45, - pX_type:str="symmetric", - port_symmetric:bool=True, - sharp_patch:bool=True): - - self.name = name - if (self.name==None): - self.instantiate = False - else : - self.instantiate = True - - self.xs_wg=xs_wg - self.Lc1=Lc1 - self.Lp1=Lp1 - self.Lc2=Lc2 - self.Lt=Lt - self.w_cp=w_cp - self.dw=dw - self.gap=gap - self.R0=R0 - self.A=A - self.w_wg=w_wg - self.sharp_patch=sharp_patch - self.pX_type=pX_type - self.port_symmetric=port_symmetric - cells = self.generate_gds(err=0) - self.cell = cells[0] - self.cellU = cells[2] - self.cellD = cells[1] - - self.L = np.abs(self.cell.pin['a1'].x - self.cell.pin['b1'].x) - self.length = self.L - - def generate_gds(self,err=0): - if (self.name is not None): - nameUP = self.name + "_up" - nameDOWN = self.name + "_down" - else: - nameUP = None - nameDOWN = None - - w_cp = self.w_cp + err - gap = self.gap - err - - with nd.Cell(instantiate=False) as CUP: - - ## first segment coupler - cp_u = nd.strt(length=self.Lc1,width=w_cp,xs=self.xs_wg).put(0, w_cp/2+gap/2,0) - nd.Pin(name='a0').put(cp_u.pin['a0']) - - cp_u_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(cp_u.pin['a0'],flip=1) - cp_u_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(flip=0) - cp_u_r = nd.taper(width1=w_cp,width2=self.w_wg,xs=self.xs_wg,length=2).put() - - nd.Pin(name='a1',pin=cp_u_r.pin['b0'],width=cp_u_r.pin['b0'].width).put() - - ## middle segment phase shifter - if self.pX_type == "symmetric": - cp_u = nd.taper(length=self.Lt,width1=self.w_cp,width2=self.w_cp+self.dw,shift=0,xs=self.xs_wg).put(cp_u.pin['b0']) - cp_u = nd.strt(length=self.Lp1,width=w_cp+self.dw,xs=self.xs_wg).put() - cp_u = nd.taper(length=self.Lt,width1=self.w_cp+self.dw,width2=self.w_cp,shift=0,xs=self.xs_wg).put() - - else: - cp_u = nd.taper(length=self.Lt,width1=self.w_cp,width2=self.w_cp+self.dw,shift=self.dw/2,xs=self.xs_wg).put(cp_u.pin['b0']) - cp_u = nd.strt(length=self.Lp1,width=w_cp+self.dw,xs=self.xs_wg).put() - cp_u = nd.taper(length=self.Lt,width1=self.w_cp+self.dw,width2=self.w_cp,shift=-self.dw/2,xs=self.xs_wg).put() - ## second segment coupler - cp_u = nd.strt(length=self.Lc2,width=w_cp,xs=self.xs_wg).put(cp_u.pin['b0']) - - cp_u_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(cp_u.pin['b0']) - cp_u_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(flip=1) - cp_u_r = nd.taper(width1=w_cp,width2=self.w_wg,xs=self.xs_wg,length=2).put() - - nd.Pin(name='b1',pin=cp_u_r.pin['b0'],width=cp_u_r.pin['b0'].width).put() - - nd.Pin(name='b0').put(cp_u.pin['b0']) - - - with nd.Cell(instantiate=False) as CDOWN: - ## first segment coupler - cp_d = nd.strt(length=self.Lc1,width=w_cp,xs=self.xs_wg).put(0,-(w_cp/2+gap/2),0) - nd.Pin(name='a0').put(cp_d.pin['a0']) - - cp_d_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(cp_d.pin['a0'],flip=0) - - if (self.port_symmetric): - cp_d_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(flip=1) - cp_d_r = nd.taper(width1=w_cp,width2=self.w_wg,xs=self.xs_wg,length=2).put() - else: - cp_d_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put() - # cp_d_r = nd.taper(width1=w_cp,width2=self.w_wg,xs=self.xs_wg,length=2).put() - - nd.Pin(name='a2',pin=cp_d_r.pin['b0'],width=cp_d_r.pin['b0'].width).put() - - ## middle segment phase shifter - if self.pX_type == "symmetric": - - cp_d = nd.taper(length=self.Lt,width1=self.w_cp,width2=self.w_cp-self.dw,shift=0,xs=self.xs_wg).put(cp_d.pin['b0']) - cp_d = nd.strt(length=self.Lp1,width=w_cp-self.dw,xs=self.xs_wg).put() - cp_d = nd.taper(length=self.Lt,width1=self.w_cp-self.dw,width2=self.w_cp,shift=0,xs=self.xs_wg).put() - - else: - cp_d = nd.taper(length=self.Lt,width1=self.w_cp,width2=self.w_cp-self.dw,shift=-self.dw/2,xs=self.xs_wg).put(cp_d.pin['b0']) - cp_d = nd.strt(length=self.Lp1,width=w_cp-self.dw,xs=self.xs_wg).put() - cp_d = nd.taper(length=self.Lt,width1=self.w_cp-self.dw,width2=self.w_cp,shift=self.dw/2,xs=self.xs_wg).put() - - ## second segment coupler - cp_d = nd.strt(length=self.Lc2,width=w_cp,xs=self.xs_wg).put(cp_d.pin['b0']) - - cp_d_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(cp_d.pin['b0'],flip=1) - if (self.port_symmetric): - cp_d_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(flip=0) - cp_d_r = nd.taper(width1=w_cp,width2=self.w_wg,xs=self.xs_wg,length=2).put() - else: - cp_d_r = nd.bend(radius=self.R0,angle=self.A,xs=self.xs_wg,width=w_cp).put(flip=1) - - nd.Pin(name='b2',pin=cp_d_r.pin['b0'],width=cp_d_r.pin['b0'].width).put() - nd.Pin(name='b0').put(cp_d.pin['b0']) - - - with nd.Cell(instantiate=self.instantiate,name=self.name) as C: - wgUp = CUP.put(0,(w_cp/2+gap/2),0) - wgDown = CDOWN.put(0,-(w_cp/2+gap/2),0) - - wgUp.raise_pins(['a1','b1'],['a1','b1']) - wgDown.raise_pins(['a2','b2'],['a2','b2']) - nd.Pin(name='a0').put((self.Lc1+self.Lc2+self.Lp1+self.Lt*2)/2,0,180) - nd.Pin(name='b0').put((self.Lc1+self.Lc2+self.Lp1+self.Lt*2)/2,0,0) - - return (C,CDOWN,CUP) - - def generate_test_gds(self,gc,dX_gc2gc=300,dY_gc2gc=40,sharp_patch=True): - with nd.Cell(name=self.cell.cell_name+"_test", instantiate=False) as C: - - gc_cell = __cell_arg__(arg=gc,arg_name="gc",func_name="mxpic::DC_pX_3sg::generate_test_gds") - - # Put DC - - # GC_IU = gc_cell.put('g1',-dX_gc2gc/2,dY_gc2gc/2,180) - # GC_ID = gc_cell.put('g1',-dX_gc2gc/2,-dY_gc2gc/2,180) - # GC_OU = gc_cell.put('g1', dX_gc2gc/2,dY_gc2gc/2,0) - # GC_OD = gc_cell.put('g1', dX_gc2gc/2,-dY_gc2gc/2,0) - - gc_ID = gc_cell.put('g1',0,-dY_gc2gc,180) - gc_IU = gc_cell.put('g1',0,0,180) - gc_OU = gc_cell.put('g1',dX_gc2gc,-dY_gc2gc,0) - gc_OD = gc_cell.put('g1',dX_gc2gc,0,0) - # Put DC - dL_DC = self.cell.pin['b1'].x - self.cell.pin['a1'].x - # inst = self.cell.put('a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0) - DC_pX3 = self.cell.put('a1',-dL_DC/2+dX_gc2gc/2,self.cell.pin['a1'].y-dY_gc2gc/2,0) - - # Connect all the ports - stripe=Route(radius=10, width=self.w_wg, xs="strip") - stripe.sbend_p2p(pin1=gc_IU.pin['g1'],pin2=DC_pX3.pin['a1'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=gc_ID.pin['g1'],pin2=DC_pX3.pin['a2'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=gc_OD.pin['g1'],pin2=DC_pX3.pin['b1'],arrow=False,original_function=not sharp_patch).put() - stripe.sbend_p2p(pin1=gc_OU.pin['g1'],pin2=DC_pX3.pin['b2'],arrow=False,original_function=not sharp_patch).put() - return C - diff --git a/mxpic/components/primitives/grating_couplers.py b/mxpic/components/primitives/grating_couplers.py index c9445c3..931f87a 100644 --- a/mxpic/components/primitives/grating_couplers.py +++ b/mxpic/components/primitives/grating_couplers.py @@ -8,1110 +8,6 @@ from ..geometry import _my_polygon,circle,Clothoid,hole from ...basic import __cell_arg__ -''' Class for nanoantenna ''' -class Nano_ant(): - """ - Configure a nano-antenna for optical phased-array grating couplers. - - This is the class of nanoantenna for optical phased array. GDS cell can be generated using this class. Simulation structure generation and simulation results analysis is going to be added in the future. - - Parameters - ---------- - w_wg : float, optional - Input waveguide width in microns (default is 0.41). - xs_wg : str, optional - Nazca cross-section key for the feed waveguide (default is "strip"). - define_type : str, optional - Antenna definition scheme, either "non-periodic" or "periodic" (default is "non-periodic"). - vector : Sequence[float], optional - Alternating etched/filled segment lengths (µm) when ``define_type`` is "non-periodic" - (default is ``[0.5, 0.5, 0.5, 0.5, 0.5, 0.5]``). - taper_length : float, optional - Linear taper length preceding the teeth region in microns (default is 3). - width : float, optional - Maximum aperture width in microns (default is 6). - max_theta : float, optional - Fan-out opening angle in degrees (default is 110). - pitch : float or Sequence[float], optional - Tooth pitch (µm) when ``define_type`` is "periodic"; scalar applies to all periods (default is 0.6). - duty_cycle : float or Sequence[float], optional - Etched fraction per period for periodic antennas; scalar or dual-entry list for dual-etch (default is 0.3). - teeth_number : int, optional - Number of etched teeth when periodic mode is used (default is 6). - etch_depth : Sequence[str], optional - List of etch-depth identifiers ("FETCH", "METCH", "SETCH"); length determines single/dual etch (default is ["METCH"]). - show_pins : bool, optional - Draw Nazca stub markers on exported pins (default is True). - """ - - def __init__( - self, - w_wg: float = 0.41, - xs_wg: str = "strip", - - define_type: str = "non-periodic", - vector: 'float|list' = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5], - taper_length: float = 3, - width: float = 6, - max_theta: float = 110, - pitch: 'float|list' = 0.6, - duty_cycle: 'float|list' = 0.3, - teeth_number: float = 6, - - etch_depth: 'str|list' = ["METCH"], - show_pins: bool = True - ): - # Init and save the input parameters - self.w_wg = w_wg - self.xs_wg = xs_wg - # Determine the etch type - if len(etch_depth)==1: self.etch_type = "single" - elif len(etch_depth)==2: self.etch_type = "dual" - if define_type=="non-periodic": - self.vector = vector - self.teeth_number = len(vector)/2 - elif define_type=="periodic": - # Parameters necessary when the ant is defined by "periodic" way - if self.etch_type=="single": - self.vector = [pitch*((2*duty_cycle-1)*(index%2)+1-duty_cycle) for index in range(teeth_number*2)] - self.pitch = pitch - self.duty_cycle = duty_cycle - self.teeth_number = teeth_number - elif self.etch_type=="dual": - self.vector = [ - pitch[1]*((2*duty_cycle[1]-1)*(index%2)+1-duty_cycle[1]) for index in range(teeth_number*2) - ] - self.vector[0] = pitch[0]*(1-duty_cycle[0]) - self.vector[1] = pitch[0]*duty_cycle[0] - self.pitch = pitch - self.duty_cycle = duty_cycle - self.teeth_number = teeth_number - - self.taper_length = taper_length - self.ant_length = self.taper_length + sum(self.vector) - self.width = width - self.max_theta = max_theta - self.define_type = define_type - # Here, I should change the name-type according to the difinition in the foundry.py - self.etch_depth = [] - for etch in etch_depth: - if etch=="FETCH": self.etch_depth = self.etch_depth+["STRIP"] # self.etch_depth.append("STRIP") - elif etch=="METCH": self.etch_depth = self.etch_depth+["RIB"] # self.etch_depth.append("RIB") - elif etch=="SETCH": self.etch_depth = self.etch_depth+["SRIB"] # self.etch_depth.append("SRIB") - - self.show_pins = show_pins - - self.cell = self.generate_gds() - - def generate_gds(self, sample_step=0.1, cell_name="Nanoantenna"): - with nd.Cell(name=cell_name, instantiate=False) as nano_ant: - layer_tre = nd.get_layer("STRIP_TRE") - if layer_tre == "STRIP_TRE" : - self.generate_gds_positive(sample_step=sample_step) - else : ## TO DO - self.generate_gds_error() - # Add pins - nd.Pin(name="a0", width=self.w_wg).put(0, 0, 180) - nd.Pin(name="g1", width=self.w_wg).put(0, 0, 180) - if self.show_pins: - nd.put_stub(pinname="g1") - return nano_ant - - def generate_gds_positive(self, sample_step=0.1): - """ - Generate a gds cell based on the logic of positive photoresistance. - - | Positive: Define the etched region using GETCH_TRE layer. - """ - width_extra_trench = 0.1 - theta_rad_max = self.max_theta * math.pi / 180 - ## Check if the input is appropriate or not - if math.floor(self.teeth_number) != self.teeth_number: - print("WARNNING :: Please re-check the vector of your antenna and make sure the length of vector is even.") - message = 'Inappropriate Definition of antenna.' - nd.text(text=message, height=5, layer=(96, 0), align='cc').put(0, 0) - return 0 - ## Build the structure - # Add input waveguide - nd.strt(length=self.taper_length-0.5, width=self.w_wg, xs=self.xs_wg).put(0, 0) - # Add the fan polygon region - radius_max = self.taper_length + sum(self.vector) - if self.width/2 > radius_max: theta_rad = theta_rad_max/2 - elif math.asin(self.width/2/radius_max) > theta_rad_max/2: theta_rad = theta_rad_max/2 - elif math.asin(self.width/2/radius_max) <= theta_rad_max/2: theta_rad = math.asin(self.width/2/radius_max) - theta_list = np.linspace(-theta_rad, theta_rad, math.floor(theta_rad*2*radius_max/sample_step)) - fan_polygon = [(radius_max*math.cos(theta), radius_max*math.sin(theta)) for theta in theta_list] - # fan_polygon = fan_polygon + [(self.width/2/math.tan(theta_rad_max/2), self.width/2), (0, self.w_wg/2), - # (0, -self.w_wg/2), (self.width/2/math.tan(theta_rad_max/2), -self.width/2)] - fan_polygon = fan_polygon + [(self.width/2/math.tan(theta_rad_max/2), self.width/2), (0, 0), - (self.width/2/math.tan(theta_rad_max/2), -self.width/2)] - nd.Polygon(points=fan_polygon, layer="STRIP_COR").put(0, 0) - layer_cld = nd.get_layer("STRIP_CLD") - if layer_cld == "STRIP_CLD": # Add CLD region if necessary - nd.strt(length=self.ant_length+1, width=max(self.width+1, self.w_wg+4), - layer=layer_cld).put(0, 0) - # Add the teeth - radius_cur = self.taper_length - for teeth_index in range(0, int(self.teeth_number)): - ## Determine the angular region first - if teeth_index == 0: radius_ref = radius_cur - else: radius_ref = radius_cur + self.vector[teeth_index*2-1] - - if (self.width+width_extra_trench)/2 > radius_ref: - theta_rad = theta_rad_max/2 + width_extra_trench/radius_ref - elif math.asin((self.width+width_extra_trench)/2/radius_ref) > theta_rad_max/2: - theta_rad = theta_rad_max/2 + width_extra_trench/radius_ref - else: - theta_rad = math.asin((self.width+width_extra_trench)/2/radius_ref) - - theta_step = sample_step / radius_ref - theta_list = np.linspace(-theta_rad, theta_rad, math.floor(2*theta_rad/theta_step)) - ## Construct the inner radius curve - if teeth_index == 0: radius_cur = radius_cur - else: radius_cur = radius_cur + self.vector[teeth_index*2-1] - inner_radius_curve = [(radius_cur*math.cos(theta), radius_cur*math.sin(theta)) for theta in theta_list] - ## Construct the outer radius curve - radius_cur = radius_cur + self.vector[teeth_index*2] - outer_radius_curve = [(radius_cur*math.cos(theta), radius_cur*math.sin(theta)) for theta in theta_list] - outer_radius_curve.reverse() - ## Add two dummy points to avoid sharp angle - offset_length = 0.015 / 2 - minimum_etch = 0.2 - radius_inner = radius_cur - self.vector[teeth_index*2] - radius_outer = radius_inner + self.vector[teeth_index*2] - x_1 = radius_inner * math.cos(theta_rad) + offset_length * math.cos(theta_rad) - y_1 = radius_inner * math.sin(theta_rad) + offset_length * math.sin(theta_rad) - vertical_length = math.sqrt(np.power(minimum_etch, 2) - np.power(offset_length, 2)) - dummy1_x = x_1 - vertical_length * math.sin(theta_rad) - dummy1_y = y_1 + vertical_length * math.cos(theta_rad) - x_2 = radius_outer * math.cos(theta_rad) - offset_length * math.cos(theta_rad) - y_2 = radius_outer * math.sin(theta_rad) - offset_length * math.sin(theta_rad) - dummy2_x = x_2 - vertical_length * math.sin(theta_rad) - dummy2_y = y_2 + vertical_length * math.cos(theta_rad) - ## Construct the teeth polygon - teeth_polygon = inner_radius_curve+[(dummy1_x,dummy1_y),(dummy2_x,dummy2_y)]+outer_radius_curve+[(dummy2_x, -dummy2_y),(dummy1_x,-dummy1_y)] - if self.etch_type == "single": - nd.Polygon(points=teeth_polygon, layer=self.etch_depth[0]+"_TRE").put(0, 0) - if self.etch_type == "dual": - if teeth_index==0: nd.Polygon(points=teeth_polygon, layer=self.etch_depth[0]+"_TRE").put(0, 0) - else: nd.Polygon(points=teeth_polygon, layer=self.etch_depth[1]+"_TRE").put(0, 0) - - def generate_gds_error(self): - nd.text(text="This foundry is not compatiable with current device. Please check.", height=10, layer=1001).put(0, 0) - -''' Class for 2D antenna array for FMF grating ''' -class Taper() : - """ - Create a stand-alone planar taper cell for 2D antenna feeds. - - Parameters - ---------- - width1 : float, optional - Input width in microns (default is 4). - width2 : float, optional - Output width in microns (default is 0.45). - length : float, optional - Physical taper length in microns (default is 30). - type : str, optional - Transition profile, "linear" or "parabolic" (default is "linear"). - show_pins : bool, optional - Draw Nazca stub markers for debugging (default is False). - """ - def __init__(self, width1=4, width2=0.45, length=30, type="linear", show_pins=False) -> None: - self.width1 = width1 - self.width2 = width2 - self.length = length - self.type = type - - if self.type == "parabolic" : self.order = 2 - elif self.type == "linear" : self.order = 1 - self.show_pins = show_pins - - self.cell = self.generate_gds() - - def generate_gds(self) : - with nd.Cell(name="taper", instantiate=False) as ic : - if self.order == 1 : - strip = Route(radius=10,width=self.width1,xs='strip') - linear_taper = strip.taper( - length=self.length,width1=self.width1,width2=self.width2,patch=True).put(0,0,0) - output_strt = strip.strt(length=0.5,width=self.width2).put() - nd.Pin(name="a1",width=self.width1).put(linear_taper.pin['a0']) - nd.Pin(name="b1",width=self.width2).put(output_strt.pin['b0']) - else : - c2 = self.width1/2 - c1 = (c2 - self.width2/2) / np.power(self.length, self.order) - x_list = np.linspace(0, self.length, int(np.floor(self.length/0.2))) - - taper_up_poly = [(x, -c1*np.power(x, self.order)+c2) for x in x_list] - taper_down_poly = [(x, -(-c1*np.power(x, self.order)+c2)) for x in x_list] - taper_down_poly.reverse() - taper_poly = taper_up_poly + taper_down_poly - nd.Polygon(points=taper_poly, layer='STRIP_COR').put(0,0) - - c2 = (self.width1+4)/2 - c1 = (c2 - (self.width2+4)/2) / np.power(self.length, self.order) - x_list = np.linspace(0, self.length, int(np.floor(self.length/0.2))) - - taper_up_poly = [(x, -c1*np.power(x, self.order)+c2) for x in x_list] - taper_down_poly = [(x, -(-c1*np.power(x, self.order)+c2)) for x in x_list] - taper_down_poly.reverse() - taper_poly = taper_up_poly + taper_down_poly - nd.Polygon(points=taper_poly, layer='STRIP_CLD').put(0,0) - - width_max = np.max(np.array([self.width1, self.width2])) - taper_poly = [ - (0, width_max/2+2), (0, -width_max/2-2), - (self.length, -width_max/2-2), (self.length, width_max/2+2) - ] - nd.Polygon(points=taper_poly, layer='STRIP_CLD').put(0,0) - - nd.strt(length=0.5, width=self.width2, xs='strip').put(self.length,0,0) - - nd.Pin(name='a1',width=self.width1).put(0,0,180) - nd.Pin(name="b1",width=self.width2).put(self.length+0.5,0,0) - if self.show_pins : - nd.put_stub() - return ic - - -class Grating_2D_Hole() : - """ - Define a single 2D hole-array grating (diffraction + reflector + taper). - This is a class for 2D Grating in IMEC. - - Parameters - ---------- - w_wg : float, optional - Feed waveguide width in microns (default is 0.5). - w_gt : float, optional - Square grating aperture width in microns (default is 5). - l_taper : float, optional - Taper length from grating to feed in microns (default is 30). - type_taper : str, optional - Taper profile ("linear" or "parabolic", default is "parabolic"). - gt_vector : Sequence[float], optional - Pitch list (µm) for the main etched holes (default is ``[0.5, 0.5, 0.5, 0.5, 0.5]``). - gt_diameter : float, optional - Diameter of the main holes in microns (default is 0.4). - gt_layer : str, optional - Nazca layer name used for the main holes (default is "STRIP_COR"). - polysi_vector : Sequence[float], optional - Pitch list (µm) for polysilicon holes (default is ``[0.5, 0.5, 0.5, 0.5, 0.5]``). - polysi_diameter : float, optional - Diameter of polysilicon holes in microns (default is 0.4). - polysi_layer : str, optional - Layer name for polysilicon etch (default is "FCW_TRE"). - reflector_vector : Sequence[float], optional - Alternating reflector spacing/width values in microns (default is ``[0.3, 0.3, 0.3, 0.3, 0.3, 0.3]``). - l_field_center : float, optional - Offset from the grating edge to the mode-field center in microns (default is 1). - """ - def __init__( - self, - w_wg=0.5, - w_gt=5, l_taper=30, type_taper="parabolic", - gt_vector=[0.5,0.5,0.5,0.5,0.5,], gt_diameter=0.4, gt_layer="STRIP_COR", - polysi_vector=[0.5,0.5,0.5,0.5,0.5], polysi_diameter=0.4, polysi_layer="FCW_TRE", - reflector_vector=[0.3,0.3,0.3,0.3,0.3,0.3], - l_field_center = 1 - ) -> None: - self.w_wg = w_wg - self.w_gt = w_gt - self.l_taper = l_taper - self.type_taper = type_taper - - self.gt_vector = gt_vector - self.gt_num = len(self.gt_vector) - self.gt_diameter = gt_diameter - self.gt_layer =gt_layer - - self.polysi_vector = polysi_vector - self.polysi_num = len(self.polysi_vector) - self.polysi_diameter = polysi_diameter - self.polysi_layer = polysi_layer - - self.reflector_vector = reflector_vector - - self.l_field_center = l_field_center - - self.cell = self.generate_gds() - - def generate_gds(self) : - with nd.Cell(name="2D_Grating", instantiate=False) as ic : - '''Generate the diffraction region first.''' - strip_cor_poly = [ - (self.w_gt/2, self.w_gt/2), (self.w_gt/2, -self.w_gt/2), - (-self.w_gt/2, -self.w_gt/2), (-self.w_gt/2, self.w_gt/2) - ] - nd.Polygon(points=strip_cor_poly, layer='STRIP_COR').put(0,0,0) - strip_cld_poly = [ - (self.w_gt/2+2, self.w_gt/2+2), (self.w_gt/2+2, -self.w_gt/2-2), - (-self.w_gt/2-2, -self.w_gt/2-2), (-self.w_gt/2-2, self.w_gt/2+2) - ] - nd.Polygon(points=strip_cld_poly, layer='STRIP_CLD').put(0,0,0) - '''Generate the reflection region.''' - self.reflector_num = int(len(self.reflector_vector)/2) - for index in range(self.reflector_num) : - loc = self.w_gt/2 + sum(self.reflector_vector[0:2*index+1]) + self.reflector_vector[2*index+1]/2 - nd.strt(length=self.w_gt, width=self.reflector_vector[2*index+1], xs='strip').put( - -loc, -(self.w_gt)/2, 90 - ) - nd.strt(length=self.w_gt, width=self.reflector_vector[2*index+1], xs='strip').put( - -(self.w_gt)/2, -loc, 0 - ) - '''Generate the taper output.''' - taper = Taper(width1=self.w_gt, width2=self.w_wg, length=self.l_taper, type=self.type_taper) - taper_horizontal = taper.cell.put('a1', self.w_gt/2,0,0) - taper_vertical = taper.cell.put('a1',0,self.w_gt/2,90) - '''Generate the diffraction etched region.''' - theta_list = np.linspace(0, 2*np.pi, 32) - gt_ring_poly = [ - (self.gt_diameter/2*np.cos(theta), self.gt_diameter/2*np.sin(theta)) for theta in theta_list - ] - polysi_ring_poly = [ - (self.polysi_diameter/2*np.cos(theta), self.polysi_diameter/2*np.sin(theta)) for theta in theta_list - ] - self._generate_hole_array_( - polygon=gt_ring_poly, vector=self.gt_vector, layer=self.gt_layer - ).put(self.w_gt/2, self.w_gt/2) - self._generate_hole_array_( - polygon=polysi_ring_poly, vector=self.polysi_vector, layer=self.polysi_layer - ).put(self.w_gt/2, self.w_gt/2) - '''Put the pin location''' - nd.Pin(name='g1').put(taper_horizontal.pin['b1']) - nd.Pin(name='g2').put(taper_vertical.pin['b1']) - - # nd.put_stub() - return ic - - def _generate_hole_array_(self,polygon,vector,layer) : - with nd.Cell(name="diffration_"+layer, instantiate=False) as ic : - for lateral_index in range(len(vector)) : - for vertical_index in range(len(vector)) : - nd.Polygon(points=polygon,layer=layer).put( - -sum(vector[0:lateral_index+1]), -sum(vector[0:vertical_index+1]) - ) - return ic - -""" Renamed for simplification in 2023.04.02 """ -class GC_STD_2D: - """ - General-purpose 2D grating coupler generator with rectangular or arc shapes. - - Parameters - ---------- - name : str, optional - Nazca cell name (default is None, meaning uninstantiated cell). - etch_type : str, optional - Etch depth selector: "FETCH", "METCH", or "SETCH" (default is "FETCH"). - xs_wg : str, optional - Cross-section for the grating slab and output waveguide (default is "grating"). - Dx_hole : float or Sequence[float], optional - Hole size along x (µm). Scalar applies to all columns (default is 0.3). - Dy_hole : float or Sequence[float], optional - Hole size along y (µm). Scalar applies to all rows (default is 0.3). - hole_shape : str, optional - Individual hole shape, "circle" or "rectangle" (default is "circle"). - shape : str, optional - Overall grating footprint, "circle", "arc", or "rectangle" (default is "circle"). - xs_open : str or None, optional - Optional open-area cross-section for keep-out regions (default is None). - Px : float or Sequence[float], optional - Periods along x in microns; scalar broadcasts (default is 0.57). - Py : float or Sequence[float], optional - Periods along y in microns; scalar broadcasts (default is 0.57). - num_x : int, optional - Number of periods along x when ``Px`` is scalar (default is 25). - num_y : int, optional - Number of periods along y when ``Py`` is scalar (default is 25). - Lx_taper : float, optional - Horizontal taper length to the output port in microns (default is 50). - Ly_taper : float, optional - Vertical taper length in microns (default is 0). - Lx_end : float, optional - Extra straight length appended to the positive-x end (default is 1). - Ly_end : float, optional - Extra straight length appended to the +/-y ends (default is 1). - Lx_side : float, optional - Lateral margin on the +/−x sides in microns (default is 0.5). - Ly_side : float, optional - Lateral margin on the +/−y sides in microns (default is 0.5). - Lx_port : float, optional - Straight-section length after the x-port taper in microns (default is 5). - Ly_port : float, optional - Straight-section length after the y-port taper in microns (default is 5). - w_wg : float, optional - Output waveguide width in microns (default is 0.5). - show_pins : bool, optional - Draw Nazca stub markers (default is False). - P_AR : float, optional - Anti-reflection pitch in microns (default is 0.6). - L_AR : float, optional - Anti-reflection taper length in microns (default is 1). - - Raises - ------ - Exception - Period do not match D_hole. - """ - def __init__(self, - name=None, - etch_type :str = 'FETCH', - xs_wg:str='grating', - Dx_hole:float=0.3, - Dy_hole:float=0.3, - hole_shape :str= 'circle', - shape:str = 'circle', - xs_open:str = None, - Px:float=0.57, - Py:float=0.57, - num_x:float=25, - num_y:float=25, - Lx_taper:float = 50.0, - Ly_taper:float = 0.0, - Lx_end:float = 1.0, - Ly_end:float = 1.0, - Lx_side:float = 0.5, - Ly_side:float = 0.5, - Lx_port:float=5.0, - Ly_port:float=5.0, - w_wg:float=0.5, - show_pins:bool=False, - P_AR: float = 0.6, - L_AR: float = 1, - ): - - self.name = name - if (self.name==None): - self.instantiate = False - else : - self.instantiate = True - - if (isinstance(Px,int) or isinstance(Px,float)) : Px = Px * np.ones(num_x) - if (isinstance(Py,int) or isinstance(Py,float)) : Py = Py * np.ones(num_y) - if (isinstance(Dx_hole,int) or isinstance(Dx_hole,float)) : Dx_hole = Dx_hole * np.ones((num_x)) - if (isinstance(Dy_hole,int) or isinstance(Dy_hole,float)) : Dy_hole = Dy_hole * np.ones((num_y)) - - self.num_x = len(Px) - self.num_y = len(Py) - if (len(Px)!=len(Dx_hole) or len(Py)!=len(Dy_hole)): - raise Exception("In Grating define : [Period] length not matching [D_hole] length") - - self.Lx_taper = Lx_taper - self.Ly_taper = Ly_taper - self.Lx_end = Lx_end - self.Ly_end = Ly_end - self.Lx_side = Lx_side - self.Ly_side = Ly_side - self.Lx_port = Lx_port - self.Ly_port = Ly_port - - self.xs_open = xs_open - - self.w_wg = w_wg - self.xs_wg = xs_wg - self.etch_type = etch_type - self.shape = shape - - self.hole_shape = hole_shape - self.Dx_hole = Dx_hole - self.Dy_hole = Dy_hole - self.Px = Px - self.Py = Py - - self.P_AR = P_AR - self.L_AR = L_AR - - - self.show_pins = show_pins - - - if (nd.get_layer(layer="STRIP_TRE") == "STRIP_TRE"): - self.positive = False - if (hole_shape=='circle'): - if (etch_type=="FETCH"): - layer_etch = "STRIP_HOL" - elif (etch_type=="METCH"): - layer_etch = "RIB_HOL" - elif (etch_type=="SETCH"): - layer_etch = "SRIB_HOL" - - elif (hole_shape=='rectangle'): - if (etch_type=="FETCH"): - layer_etch = "STRIP_TRE" - elif (etch_type=="METCH"): - layer_etch = "RIB_TRE" - elif (etch_type=="SETCH"): - layer_etch = "SRIB_TRE" - else : - self.positive = True - - if (etch_type=="FETCH"): - layer_etch = None - elif (etch_type=="METCH"): - layer_etch = "RIB_COR" - elif (etch_type=="SETCH"): - layer_etch = "SRIB_COR" - - self.layer_etch = layer_etch - - if (layer_etch!=None): - if (nd.get_layer(layer_etch)!=layer_etch): - layer_etch=None - print("WARNING: In mxpic::passive::GC_STD_1D, ::",layer_etch," not defined in tapeout") - - if (self.positive): - self.cell = self.generate_positive() - else: - self.cell = self.generate_negative() - - def generate_negative(self): - with nd.Cell(instantiate=self.instantiate,name=self.name) as C: - - ## arc shape grating - if (self.shape=='circle' or self.shape=='arc'): - print("Sorry, this function has not been built up") - - ## retangular grating - elif (self.shape=='rectangle'): - Lx = sum(self.Px)+self.Lx_side*2 - # if (self.Ly_taper==0): - Ly = sum(self.Py)+self.Ly_side*2 - # else: - # Ly = sum(self.Py) - y_offset = sum(self.Py)/2 - x_offset = sum(self.Px)/2 - nd.strt(length=Lx,width=Ly,xs=self.xs_wg).put(-Lx/2,0,0) - - - if (self.xs_open!=None): - circle(radius=max([Lx,Ly])*2/2,width=max([Lx,Ly])*2,xs=self.xs_open, - # n_points=32 - ).cell.put(0,0,0) - - - for _x_ in range(0,self.num_x): - for _y_ in range(0,self.num_y): - pos_x = np.sum(self.Px[0:_x_+1])-self.Px[0]/2-x_offset - pos_y = np.sum(self.Py[0:_y_+1])-y_offset-self.Py[0]/2 - if (self.hole_shape=='circle'): - circle(radius=self.Dx_hole[_x_]/4,width=self.Dx_hole[_x_]/2,layer=self.layer_etch, - # n_points=32, - sharp_patch=False).cell.put(pos_x,pos_y,0) - elif (self.hole_shape=='rectangle'): - nd.strt(length=self.Dx_hole[_x_],width=self.Dy_hole[_y_],layer=self.layer_etch).put(pos_x-self.Dx_hole[_x_]/2,pos_y,0) - else : - raise Exception("ERROR: In , is not defined, please input [circle | rectangle]") - if (self.Ly_taper!=0): - nd.strt(length=self.Ly_end,width=Lx,xs=self.xs_wg).put(0,Ly/2,90) - - if (self.P_AR>0): - _num_AR_ = int(np.floor(self.L_AR/self.P_AR)+1) - for _idx_ in range(0,_num_AR_): - # nd.strt(xs=self.xs_wg,width=Lx,length=self.P_AR/2).put(0,self.P_AR/2+Ly/2+self.Ly_end+self.P_AR*_idx_,90) - nd.strt(xs=self.xs_wg,width=self.P_AR/2,length=Lx).put(-Lx/2,self.P_AR+Ly/2+self.Ly_end+self.P_AR*_idx_,0) - # if (self.P_AR >0 and self.L_AR>0): - # _num_AR_ = int(np.floor(Ly/self.P_AR)) - # for _idx_ in range(0,_num_AR_): - # nd.taper(xs=self.xs_wg,width1=self.P_AR-0.2,width2=0.2,length=self.L_AR).put(_idx_*self.P_AR - (_num_AR_-1)/2*self.P_AR+Lx/2,Ly/2+self.Ly_end,90) - - nd.strt(length=self.Ly_end,width=Lx,xs=self.xs_wg).put(0,-Ly/2,-90) - y_port = nd.taper(width1=Ly,width2=self.w_wg,xs=self.xs_wg,length=self.Ly_taper).put() - y_port = nd.strt(length=self.Ly_port,width=self.w_wg,xs=self.xs_wg).put() - nd.Pin(name='g2',pin=y_port.pin['b0']).put() - - nd.strt(length=self.Lx_end,width=Ly,xs=self.xs_wg).put(Lx/2,0,0) - - ## adding anti reflection - if (self.Lx_taper!=0): - if (self.P_AR>0): - _num_AR_ = int(np.floor(self.L_AR/self.P_AR)+1) - for _idx_ in range(0,_num_AR_): - # nd.strt(xs=self.xs_wg,width=Lx,length=self.P_AR/2).put(self.P_AR/2+Lx/2+self.Lx_end+self.P_AR*_idx_,0,0) - nd.strt(xs=self.xs_wg,length=Ly,width=self.P_AR/2).put(self.P_AR+Lx/2+self.Lx_end+self.P_AR*_idx_,-Ly/2,90) - - # _num_AR_ = int(np.floor(Ly/self.P_AR)) - # for _idx_ in range(0,_num_AR_): - # nd.taper(xs=self.xs_wg,width1=self.P_AR-0.2,width2=0.2,length=self.L_AR).put(Lx+self.Lx_end,_idx_*self.P_AR - (_num_AR_-1)/2*self.P_AR,0) - - nd.strt(length=self.Lx_end,width=Ly,xs=self.xs_wg).put(-Lx/2,0,180) - x_port = nd.taper(width1=Ly,width2=self.w_wg,xs=self.xs_wg,length=self.Lx_taper).put() - x_port = nd.strt(length=self.Lx_port,width=self.w_wg,xs=self.xs_wg).put() - nd.Pin(name='g1',pin=x_port.pin['b0']).put() - - # print("Sorry, this function has not been built up") - - else : - raise Exception("In Grating define : [shape] not defined") - - if (self.show_pins): - nd.put_stub(pinsize=3) - return C - - def generate_positive(self): - with nd.Cell(instantiate=self.instantiate,name=self.name) as C: - - ## arc shape grating - if (self.shape=='circle' or self.shape=='arc'): - print("Sorry, this function has not been built up") - pass - - ## retangular grating - elif (self.shape=='rectangle'): - Lx = sum(self.Px) - if (self.Ly_taper==0): - Ly = sum(self.Py)+self.Ly_side*2 - nd.strt(length=Lx,width=self.Ly_side,xs=self.xs_wg).put(0,sum(self.Py)/2+self.Lx_side/2,0) - nd.strt(length=Lx,width=self.Ly_side,xs=self.xs_wg).put(0,-sum(self.Py)/2-self.Lx_side/2,0) - else: - Ly = sum(self.Py) - y_offset = sum(self.Py)/2 - if (self.layer_etch!=None): - nd.strt(length=Lx,width=Ly,layer=self.layer_etch).put(0,0,0) - if (self.xs_open!=None): - nd.strt(length=Lx*2,width=Ly*2,xs=self.xs_open).put(-Lx/2,0,0) - - for _x_ in range(0,self.num_x): - for _y_ in range(0,self.num_y): - pos_x = np.sum(self.Px[0:_x_+1])-self.Px[0]/2 - pos_y = np.sum(self.Py[0:_y_+1])-y_offset-self.Py[0]/2 - hole(r_hole=self.Dx_hole[_x_]/2,Lx_sq=self.Px[_x_],Ly_sq=self.Py[_y_], - Dx_hole=self.Dx_hole[_x_],Dy_hole=self.Dy_hole[_y_], - # n_points=12, - xs=self.xs_wg,hole_shape=self.hole_shape).cell.put(pos_x,pos_y,0) - - if (self.Ly_taper!=0): - nd.strt(length=self.Ly_end,width=Lx,xs=self.xs_wg).put(Lx/2,Ly/2,90) - _num_AR_ = int(np.floor(Ly/self.P_AR)) - for _idx_ in range(0,_num_AR_): - nd.taper(xs=self.xs_wg,width1=self.P_AR-0.2,width2=0.2,length=self.L_AR).put(_idx_*self.P_AR - (_num_AR_-1)/2*self.P_AR+Lx/2,Ly/2+self.Ly_end,90) - - nd.strt(length=self.Ly_end,width=Lx,xs=self.xs_wg).put(Lx/2,-Ly/2,-90) - y_port = nd.taper(width1=Ly,width2=self.w_wg,xs=self.xs_wg,length=self.Lx_taper).put() - y_port = nd.strt(length=self.Ly_port,width=self.w_wg,xs=self.xs_wg).put() - nd.Pin(name='g2',pin=y_port.pin['b0']).put() - - nd.strt(length=self.Lx_end,width=Ly,xs=self.xs_wg).put(Lx,0,0) - ## adding anti reflection - _num_AR_ = int(np.floor(Ly/self.P_AR)) - for _idx_ in range(0,_num_AR_): - nd.taper(xs=self.xs_wg,width1=self.P_AR-0.2,width2=0.2,length=self.L_AR).put(Lx+self.Lx_end,_idx_*self.P_AR - (_num_AR_-1)/2*self.P_AR,0) - - nd.strt(length=self.Lx_end,width=Ly,xs=self.xs_wg).put(0,0,180) - x_port = nd.taper(width1=Ly,width2=self.w_wg,xs=self.xs_wg).put() - x_port = nd.strt(length=self.Lx_port,width=self.w_wg,xs=self.xs_wg).put() - nd.Pin(name='g1',pin=x_port.pin['b0']).put() - else : - raise Exception("In Grating define : [shape] not defined") - if (self.show_pins): - nd.put_stub(pinsize=3) - return C - - def generate_test_gds(self,dX_gc2gc=300): - with nd.Cell(instantiate=False) as C: - self.cell.put('g1',-dX_gc2gc/2,0,180) - self.cell.put('g1', dX_gc2gc/2,0,0) - - nd.strt(xs=self.xs_wg,width=self.w_wg,length=dX_gc2gc).put(-dX_gc2gc/2,0,0) - - return C - -class GC_STD_1D: - """ - Versatile 1D grating coupler supporting sector and rectangular layouts. - - Parameters - ---------- - name : str, optional - Nazca cell name (default is None). - xs_wg : str, optional - Cross-section key for the slab/taper region (default is "strip"). - w_wg : float, optional - Input waveguide width in microns (default is 0.5). - etch_type : str, optional - Etch depth selector: "FETCH", "METCH", or "SETCH" (default is "FETCH"). - xs_open : str or None, optional - Optional cross-section for keep-out/open regions (default is None). - L_taper : float, optional - Length of the entrance taper in microns (default is 10). - L_end : float, optional - Terminal slab length after the grating in microns (default is 2). - A_taper : float, optional - Fan-out angle in degrees (default is 30). - Period : float or Sequence[float], optional - Grating periods in microns; scalar broadcasts (default is 0.5). - eta_etch : float or Sequence[float], optional - Etch duty (between 0 and 1) per period (default is 0.5). - num : int, optional - Number of periods when ``Period`` and ``eta_etch`` are scalars (default is 20). - sector_gc : bool, optional - Use sector (True) or rectangular (False) geometry (default is True). - show_pins : bool, optional - Draw Nazca stub markers (default is False). - L_tail : float, optional - Extra straight length added before the taper in microns (default is 2). - P_AR : float, optional - Anti-reflection pitch in microns (default is 1). - L_AR : float, optional - Anti-reflection taper length in microns (default is 2). - """ - def __init__ (self, - name=None, - xs_wg : str = 'strip', - w_wg : float = 0.5, - etch_type :str = 'FETCH', - xs_open :str=None, - L_taper :float = 10.0, - L_end :float = 2.0, - A_taper :float = 30.0, - Period :float = 0.5, - eta_etch :float = 0.5, - num :int = 20, ### note, when Period and eta is defined as list, this is not usefull - sector_gc :bool =True, - show_pins=False, - L_tail = 2, - # n_points = 64, - P_AR: float = 1.0, ### adding anti reflection pitches - L_AR: float = 2.0, - ): - - self.name = name - if (self.name==None): - self.instantiate = False - else : - self.instantiate = True - - if (xs_open!=None): - try: nd.get_xsection(xs_open) - except: - xs_open=None - print("WARNING:In , ::",xs_open," not defined in tapeout") - self.xs_open=xs_open - - - self.xs_wg=xs_wg - self.w_wg=w_wg - self.L_taper=L_taper - self.L_end=L_end - self.A_taper=A_taper - self.show_pins = show_pins - self.L_tail = L_tail - - if (isinstance(eta_etch,list) or isinstance(eta_etch,np.ndarray)): - num = len(eta_etch) - - if (isinstance(Period,list) or isinstance(Period,np.ndarray)): - num = len(Period) - - - - if (isinstance(Period,int) or isinstance(Period,float)): - Period = Period*np.ones(num) - - if (isinstance(eta_etch,int) or isinstance(eta_etch,float)): - eta_etch = eta_etch*np.ones(num) - - """ Generate ERROR """ - if (len(Period)!=len(eta_etch)): - raise Exception("ERROR: In : [Period] length not matching [eta_etch] length") - - if (nd.get_layer(layer="STRIP_TRE") == "STRIP_TRE"): - self.positive = False - if (etch_type=="FETCH"): - layer_etch = "STRIP_TRE" - elif (etch_type=="METCH"): - layer_etch = "RIB_TRE" - elif (etch_type=="SETCH"): - layer_etch = "SRIB_TRE" - else : - self.positive = True - - if (etch_type=="FETCH"): - layer_etch = None - elif (etch_type=="METCH"): - layer_etch = "RIB_COR" - elif (etch_type=="SETCH"): - layer_etch = ["SRIB_COR","RIB_COR"] - - self.Period=Period - self.eta_etch=eta_etch - self.num=len(Period) - self.sector_gc=sector_gc - - # self.n_points = n_points ## revise 2022.08.18 - - self.L_AR = L_AR - self.P_AR = P_AR - - if (layer_etch!=None): - if (isinstance(layer_etch,str)): - if (nd.get_layer(layer_etch)!=layer_etch): - layer_etch=None - print("WARNING: In mxpic::passive::GC_STD_1D, ::",layer_etch," not defined in tapeout") - else : - for _layer_ in layer_etch: - if (nd.get_layer(_layer_)!=_layer_): - layer_etch=None - print("WARNING: In mxpic::passive::GC_STD_1D, ::",layer_etch," not defined in tapeout") - self.layer_etch = layer_etch - - if (self.positive): - self.cell = self.generate_positive() - else: - self.cell = self.generate_negative() - - def generate_negative(self): - with nd.Cell(instantiate=self.instantiate,name=self.name) as C: - - ## arc shape grating - if (self.sector_gc == True): - L_total = np.sum(self.Period) + self.L_taper + self.L_end - L_tail = self.L_tail - for layers,growx,growy,acc in nd.layeriter(xs=self.xs_wg): - (a1,b1), (a2,b2),c1,c2 = growx - x_offset = -b1/np.sin(self.A_taper/2*np.pi/180) - - if (self.P_AR>0 and self.L_AR>0): ## anti reflection - r_tap = L_total*1.3 - b1 - x_offset - else : - r_tap = L_total + b1 - x_offset - - circle(radius=r_tap/2,width=r_tap, - theta_start=-self.A_taper/2,theta_stop=self.A_taper/2, - # n_points=self.n_points, - layer=layers).cell.put(x_offset,0,0) - _L_tail_ = np.abs(x_offset) - if _L_tail_ > L_tail: - L_tail = _L_tail_ - - - r_grat_inner = self.L_taper - for _idx_ in range(0,self.num): - d_pitch = self.Period[_idx_]*self.eta_etch[_idx_] - circle(radius=r_grat_inner + d_pitch/2, - width=d_pitch, - theta_start=-self.A_taper/2-5,theta_stop=self.A_taper/2+5, - # n_points=self.n_points, - layer=self.layer_etch).cell.put(0,0,0) - r_grat_inner = r_grat_inner + self.Period[_idx_] - - L_open = 1.5*(L_total-self.L_taper) - W_open = 1.1*(L_total*np.tan(self.A_taper/2*np.pi/180))*2 - x_open = (L_total+self.L_taper)/2 - L_open/2 - - if (self.xs_open!=None): - nd.strt(length=L_open,width=W_open,xs=self.xs_open).put(x_open,0,0) - - nd.strt(length=L_tail,width=self.w_wg,xs=self.xs_wg).put(-L_tail,0,0) - nd.Pin(name='g1',width=self.w_wg).put(-L_tail,0,180) - nd.strt(length=np.abs(self.w_wg/2/np.tan(self.A_taper/2/180*np.pi)),width=self.w_wg,xs=self.xs_wg).put(0,0,0) - - - ## retangular grating - else: - - L_total = np.sum(self.Period) + self.L_taper + self.L_end - - L_grat = sum(self.Period)+self.L_end - W_grat = self.w_wg + self.L_taper*np.tan(self.A_taper/2*np.pi/180)*2 - nd.taper(length=self.L_taper,width1=self.w_wg,width2=W_grat,xs=self.xs_wg).put(0,0,0) - nd.strt(length=L_grat,width=W_grat,xs=self.xs_wg).put(self.L_taper,0,0) - - ### adding Anti-reflection - - # if (self.P_AR>0 and self.L_AR>0): - # _num_AR_ = int(np.floor(W_grat/self.P_AR)) - # for _idx_ in range(0,_num_AR_): - # nd.taper(xs=self.xs_wg,width1=self.P_AR-0.2,width2=0.2,length=self.L_AR).put(self.L_taper+L_grat, (_idx_ - (_num_AR_-1)/2)*self.P_AR,0) - - - x_grat = self.L_taper - for _idx_ in range(0,self.num): - nd.strt(length=self.Period[_idx_]*self.eta_etch[_idx_],width=W_grat+2,layer=self.layer_etch).put(x_grat,0,0) - x_grat = x_grat + self.Period[_idx_] - - nd.strt(length=10,width=self.w_wg,xs=self.xs_wg).put(-5,0,0) - nd.Pin(name='g1',width=self.w_wg).put(-5,0,180) - - L_open = 1.5*(L_total-self.L_taper) - W_open = 1.1*(L_total*np.tan(self.A_taper/2*np.pi/180))*2 - x_open = (L_total+self.L_taper)/2 - L_open/2 - if (self.xs_open!=None): - nd.strt(length=L_open,width=W_open,xs=self.xs_open).put(x_open,0,0) - pass - - - if (self.show_pins): - nd.put_stub() - return C - - def generate_positive(self): - with nd.Cell(instantiate=False) as C: - ## arc shape grating - if (self.sector_gc==True): - L_tail = self.L_tail - - for layers,growx,growy,acc in nd.layeriter(xs=self.xs_wg): - (a1,b1), (a2,b2),c1,c2 = growx - x_offset = -b1/np.sin(self.A_taper/2*np.pi/180) - - r_tap = self.L_taper + b1 - x_offset - - circle(radius=r_tap/2,width=r_tap, - theta_start=-self.A_taper/2,theta_stop=self.A_taper/2, - # n_points=self.n_points, - layer=layers).cell.put(x_offset,0,0) - - r_grat_inner = self.L_taper - x_offset - - _L_tail_ = np.abs(x_offset) - if _L_tail_ > L_tail: - L_tail = _L_tail_ - - for _idx_ in range(0,self.num): - - d_pitch = self.Period[_idx_]*(1-self.eta_etch[_idx_])+b1*2 - - - circle(radius=r_grat_inner + self.Period[_idx_]*self.eta_etch[_idx_] + d_pitch/2, - width=d_pitch, - theta_start=-self.A_taper/2,theta_stop=self.A_taper/2, - # n_points=self.n_points, - layer=layers).cell.put(x_offset,0,0) - - r_grat_inner = r_grat_inner + self.Period[_idx_] - - d_pitch = self.L_end+b1*2 - r_grat_inner = r_grat_inner + self.Period[-1]*self.eta_etch[-1] - - circle(radius=r_grat_inner + d_pitch/2, - width=d_pitch, - theta_start=-self.A_taper/2,theta_stop=self.A_taper/2, - # n_points=64, - layer=layers).cell.put(x_offset,0,0) - nd.strt(length=L_tail*2,width=self.w_wg,xs=self.xs_wg).put(-L_tail,0,0) - nd.Pin(name='g1',width=self.w_wg).put(-L_tail,0,180) - - L_total = np.sum(self.Period) + self.L_taper + self.L_end - L_open = 1.5*(L_total-self.L_taper) - W_open = 1.2*(L_total*np.tan(self.A_taper/2*np.pi/180))*2 - x_open = (L_total+self.L_taper)/2 - L_open/2 - if (self.layer_etch!=None): - if (isinstance(self.layer_etch,str)): - nd.strt(length=L_open,width=W_open,layer=self.layer_etch).put(x_open,0,0) - elif(isinstance(self.layer_etch,list)): - for _layer_ in self.layer_etch: - nd.strt(length=L_open,width=W_open,layer=_layer_).put(x_open,0,0) - - if (self.xs_open!=None): - nd.strt(length=L_open,width=W_open,xs=self.xs_open).put(x_open,0,0) - - - - ## retangular grating - elif (self.shape=='rectangle'): - - L_grat = sum(self.Period) - W_grat = self.w_wg + self.L_taper*np.tan(self.A_taper/2*np.pi/180)*2 - nd.taper(length=self.L_taper,width1=self.w_wg,width2=W_grat,xs=self.xs_wg).put(0,0,0) - - x_grat = self.L_taper - for _idx_ in range(0,self.num): - nd.strt(length=self.Period[_idx_]*(1-self.eta_etch[_idx_]),width=W_grat,xs=self.xs_wg).put(x_grat+self.Period[_idx_]*self.eta_etch[_idx_],0,0) - x_grat = x_grat + self.Period[_idx_] - - nd.strt(length=10,width=self.w_wg,xs=self.xs_wg).put(-5,0,0) - nd.Pin(name='g1',width=self.w_wg).put(-5,0,180) - - ### adding Anti-reflection - if (self.P_AR>0 and self.L_AR>0): - _num_AR_ = int(np.floor(W_grat/self.P_AR)) - for _idx_ in range(0,_num_AR_): - nd.taper(xs=self.xs_wg,width1=self.P_AR-0.2,width2=0.2,length=self.L_AR).put(self.L_taper+L_grat, (_idx_ - (_num_AR_-1)/2)*self.P_AR,0) - - - L_total = np.sum(self.Period) + self.L_taper + self.L_end - L_open = 1.5*(L_total-self.L_taper) - W_open = 1.1*(L_total*np.tan(self.A_taper/2*np.pi/180))*2 - x_open = (L_total+self.L_taper)/2 - L_open/2 - if (self.layer_etch!=None): - nd.strt(length=L_open,width=W_open,layer=self.layer_etch).put(x_open,0,0) - - if (self.xs_open!=None): - nd.strt(length=L_open,width=W_open,xs=self.xs_open).put(x_open,0,0) - - - pass - else : - raise Exception("In Grating define : [shape] not defined") - if (self.show_pins): - nd.put_stub() - return C - - def generate_test_dev(self,dX_gc2gc): - with nd.Cell(instantiate=False) as C: - self.cell.put('g1',-dX_gc2gc/2,0,180) - self.cell.put('g1', dX_gc2gc/2,0,0) - nd.strt(xs=self.xs_wg,width=self.w_wg,length=dX_gc2gc).put(-dX_gc2gc/2,0,0) - return C - -class FA: - """ - Instantiate a fiber-array fanout from repeated grating/fiber couplers. - - Parameters - ---------- - fiber_coupler : nd.Cell or object - Reference coupler cell or instance exposing ``cell`` and pin ``g1``/``a0``. - pitch : float, optional - Center-to-center spacing between adjacent couplers in microns. - number : int - Total number of channels in the array. - show_pins : bool, optional - Draw Nazca stub markers on exported pins (default is False). - """ - def __init__(self,fiber_coupler,pitch,number,show_pins=False): - - # if (isinstance(fiber_coupler,nd.Cell)): - # fiber_cell = fiber_coupler - - # elif (hasattr(fiber_coupler,'cell')): - # fiber_cell = fiber_coupler.cell - # else: - # raise Exception("ERROR: In , not recongized, please input nazca.cell or classes that has nazca.cell") - - fiber_cell = __cell_arg__(arg=fiber_coupler,arg_name="fiber_coupler",func_name="mxpic::FA") - - - pin_in_name = [] - for name,Pin in fiber_cell.ic_pins(): - - pin_in_name = pin_in_name+[name] - # pin_in_name.append(name) - - if ('g1' in pin_in_name): - pin_name = 'g1' - else: - pin_name = 'a0' - print("WARNING: In , dose not contain 'g1' pin, using 'a0' in default") - - self.pitch = pitch - self.number = number - - with nd.Cell(instantiate=False) as C: - - for idx in range(1,number+1): - port = fiber_cell.put(pin_name,0,pitch*(idx-number/2-1/2),0) - nd.Pin('g'+str(idx),pin=port.pin[pin_name]).put() - - x_out = port.pin['b0'].x - nd.Pin(name='b0').put(x_out,0,180) - - if (show_pins): - nd.put_stub(pinsize=3) - self.cell = C - class GC_SiN_Si_Dual_Layer: """ GC SiN Si Dual Layer primitive component. diff --git a/mxpic/components/primitives/multimode_interferometers.py b/mxpic/components/primitives/multimode_interferometers.py deleted file mode 100644 index add0bf8..0000000 --- a/mxpic/components/primitives/multimode_interferometers.py +++ /dev/null @@ -1,260 +0,0 @@ -from turtle import shape -import nazca as nd -import numpy as np -import math - -from ...routing import Route - -from ..geometry import * - -from ..geometry import _my_polygon,Conchoid - -""" Mono layer MMI """ -class MMI_ML: - """ - Multi-layer (mono-layer) multimode interference (MMI) device generator. - - Parameters - ---------- - name : str or None, optional - Nazca cell name. ``None`` keeps the cell uninstantiated (default is None). - L_arm : Sequence[float], optional - Segment lengths (µm) of each arm taper section (default is ``[10]``). - w_arm : Sequence[float], optional - Corresponding arm widths (µm). Length must be ``len(L_arm) + 1`` (default is ``[0.45, 1.35]``). - xs : str, optional - Nazca cross-section key used for both arm and MMI regions (default is "strip"). - arm_sine_width : bool, optional - If True, arm width follows a cosine taper instead of linear interpolation (default is False). - L_mmi : Sequence[float], optional - Segment lengths (µm) within the central MMI body (default is ``[10]``). - w_mmi : Sequence[float], optional - MMI widths (µm). Length must be ``len(L_mmi) + 1`` (default is ``[5, 5]``). - mmi_sine_width : bool, optional - If True, MMI width transition uses cosine instead of linear interpolation (default is False). - sharp_patch : bool, optional - Insert chamfer polygons at acute corners when ``True`` (default is True). - show_pins : bool, optional - Draw Nazca stub markers for debugging when ``True`` (default is False). - res : float, optional - Longitudinal sampling resolution (µm) for polygon generation (default is 0.01). - N_out : int, optional - Number of output ports (default is 3). - N_in : int, optional - Number of input ports (default is 1). - Dp_out : float, optional - Vertical pitch (µm) between adjacent output ports (default is 1.5). - Dp_in : float, optional - Vertical pitch (µm) between adjacent input ports (default is 1.5). - """ - def __init__(self, - name=None, - L_arm=[10], - w_arm=[0.45,1.35], - xs = 'strip', - arm_sine_width=False, - L_mmi = [10], - w_mmi = [5,5], - - mmi_sine_width=False, - - sharp_patch=True, - show_pins = False, - - res = 0.01, - N_out = 3, - N_in = 1, - Dp_out = 1.5, - Dp_in = 1.5, - ) -> None: - - self.name = name - if (self.name==None): - self.instantiate = False - else : - self.instantiate = True - - self.L_arm = L_arm - self.xs = xs - self.w_arm = w_arm - self.arm_sine_width = arm_sine_width - self.L_mmi = L_mmi - self.w_mmi = w_mmi - self.res = res - self.N_out = N_out - self.N_in = N_in - self.Dp_out = Dp_out - self.Dp_in = Dp_in - self.mmi_sine_width = mmi_sine_width - - self.cell = self.generate_gds(sharp_patch=sharp_patch,show_pins=show_pins) - - self.L = np.sum(self.L_arm)*2+np.sum(self.L_mmi) - - def generate_gds(self,sharp_patch,show_pins): - - with nd.Cell(instantiate=self.instantiate,name=self.name) as C: - L = 0 - Lsg = [] - Wsg = [] - for idx in range(0,len(self.L_arm)): - n_points = round(self.L_arm[idx]/self.res)+1 - L_sect = np.linspace(L,L+self.L_arm[idx],n_points) - Lsg = np.r_[Lsg,L_sect] - if (self.arm_sine_width): - dw = self.w_arm[idx+1]-self.w_arm[idx] - w_sect = -np.cos(L_sect/self.L_arm[idx]*pi)*dw + (self.w_arm[idx+1]-self.w_arm[idx])/2 - else: - w_sect = np.linspace(self.w_arm[idx],self.w_arm[idx+1],n_points) - Wsg = np.r_[Wsg,w_sect] - - L = L + self.L_arm[idx] - - with nd.Cell(instantiate=False) as Arm: - for layers,growx,growy,acc in nd.layeriter(xs=self.xs): - (a1,b1), (a2,b2),c1,c2 = growx - - vtx_y = np.r_[Wsg*a1+b1, np.flip(Wsg,0)*a2+b2] - vtx_x = np.r_[Lsg, np.flip(Lsg,0)] - vtx = np.c_[vtx_x,vtx_y] - _my_polygon(layer_wg=layers,vtx=vtx).put(0,0,0) - - - nd.Pin(name='a1',width=Wsg[0]).put(0,0,180) - nd.Pin(name='b1',width=Wsg[-1]).put(L,0,0) - - """ For central MMI """ - L_mmi = 0 - Lsg_mmi = [] - Wsg_mmi = [] - for idx in range(0,len(self.L_mmi)): - n_points = round(self.L_mmi[idx]/self.res)+1 - L_sect = np.linspace(L_mmi,L_mmi+self.L_mmi[idx],n_points) - Lsg_mmi = np.r_[Lsg_mmi,L_sect] - if (self.arm_sine_width): - dw = self.w_mmi[idx+1]-self.w_mmi[idx] - w_sect = -np.cos(L_sect/self.L_mmi[idx]*pi)*dw + (self.w_mmi[idx+1]-self.w_mmi[idx])/2 - else: - w_sect = np.linspace(self.w_mmi[idx],self.w_mmi[idx+1],n_points) - Wsg_mmi = np.r_[Wsg_mmi,w_sect] - - L_mmi = L_mmi + self.L_mmi[idx] - - with nd.Cell(instantiate=False) as MMI: - for layers,growx,growy,acc in nd.layeriter(xs=self.xs): - (a1,b1), (a2,b2),c1,c2 = growx - - vtx_y = np.r_[Wsg_mmi*a1+b1, np.flip(Wsg_mmi,0)*a2+b2] - vtx_x = np.r_[Lsg_mmi, np.flip(Lsg_mmi,0)] - vtx = np.c_[vtx_x,vtx_y] - if (b1==0 and b2==0): - _my_polygon(layer_wg=layers,vtx=vtx).put(0,0,0) - else : - w = max(Wsg_mmi)+b1*2 - L = max(Lsg_mmi)+b1*2 - nd.strt(length=L,layer=layers,width=w).put(-b1,0,0) - - nd.Pin(name='a1',width=Wsg_mmi[0]).put(0,0,180) - nd.Pin(name='b1',width=Wsg_mmi[-1]).put(L_mmi,0,0) - - for idx_in in range(0,self.N_in): - Arm_inst = Arm.put('b1',0,self.Dp_in*(-idx_in+(self.N_in-1)/2),180) - nd.Pin(name='a'+str(round(idx_in+1)),pin=Arm_inst.pin['a1']).put() - - for idx_in in range(0,self.N_out): - Arm_inst = Arm.put('b1',L_mmi,self.Dp_out*(-idx_in+(self.N_out-1)/2),0) - nd.Pin(name='b'+str(round(idx_in+1)),pin=Arm_inst.pin['a1']).put() - MMI.put('a1',0,0,0) - - if (show_pins): - nd.put_stub() - - return C - - def generate_test_gds(self,gc,dX_gc2gc,dY_gc2gc,R_bend=10,Xout_offset=50): - if (isinstance(gc,nd.Cell)): - gc_cell =gc - elif (hasattr(gc,'cell')): - gc_cell = gc.cell - else : - raise Exception("ERROR: In , is not recongized as a cell") - - with nd.Cell(instantiate=False) as C: - - INST = self.cell.put(-self.L/2,0,0) - pic_strip = Route(width=self.w_arm[0],radius=R_bend,xs=self.xs) - for idx_in in range(0,self.N_in): - GC = gc_cell.put('g1',-dX_gc2gc/2,dY_gc2gc*(-idx_in + (self.N_in-1)/2),180) - pic_strip.sbend_p2p(pin1=GC.pin['g1'],pin2=INST.pin['a'+str(idx_in+1)],Lstart=dX_gc2gc/10).put() - - for idx_in in range(0,self.N_out): - toggle = np.mod(idx_in,2)-0.5 - GC = gc_cell.put('g1', dX_gc2gc/2+Xout_offset*toggle,dY_gc2gc*(-idx_in + (self.N_out-1)/2),0) - pic_strip.sbend_p2p(pin1=GC.pin['g1'],pin2=INST.pin['b'+str(idx_in+1)],Lstart=dX_gc2gc/10).put() - - return C - - -class MMI_STD(MMI_ML): - """ - Convenience wrapper for standard MMIs with equal-length arms and uniform MMI body. - - Parameters - ---------- - name : str or None, optional - Nazca cell name (default is None). - N_out : int, optional - Number of output ports (default is 3). - N_in : int, optional - Number of input ports (default is 1). - L_arm : float, optional - Single arm length in microns (default is 10). - w_wg : float, optional - Input/output waveguide width in microns (default is 0.45). - w_port : float, optional - Width at the transition between the taper and MMI (default is 1.2). - xs : str, optional - Cross-section key for all regions (default is "strip"). - L_mmi : float, optional - Central MMI length in microns (default is 10). - w_mmi : float, optional - Central MMI width in microns (default is 5). - sharp_patch : bool, optional - Add chamfer helpers when True (default is True). - show_pins : bool, optional - Draw Nazca stub markers when True (default is False). - Dp_out : float, optional - Output port pitch in microns (default is 1.5). - Dp_in : float, optional - Input port pitch in microns (default is 1.5). - """ - def __init__(self, - name=None, - N_out=3, - N_in=1, - L_arm=10, - w_wg=0.45, - w_port = 1.2, - xs='strip', - L_mmi=10, - w_mmi=5, - sharp_patch=True, - show_pins=False, - Dp_out=1.5, - Dp_in=1.5) -> None: - - super().__init__(name=name, - L_arm=[L_arm], - w_arm=[w_wg,w_port], - xs=xs, - arm_sine_width=False, - L_mmi=[L_mmi], - w_mmi=[w_mmi,w_mmi], - mmi_sine_width=False, - sharp_patch=sharp_patch, - show_pins=show_pins, - res=min([L_mmi,L_arm]), ## taper resolution - N_out=N_out, - N_in=N_in, - Dp_out=Dp_out, - Dp_in=Dp_in) \ No newline at end of file diff --git a/mxpic/components/primitives/passive/__init__.py b/mxpic/components/primitives/passive/__init__.py index 5684cc2..2db86c3 100644 --- a/mxpic/components/primitives/passive/__init__.py +++ b/mxpic/components/primitives/passive/__init__.py @@ -2,8 +2,8 @@ from .unit import PSR_1x2 , Brag_WDM from .unit import waveguide,PS_2st, PS_2st_Straight from .rings import STD_ring_AMZI_adddrop, MRR_MM_Adddrop, MRR_MM_Allpass, MRR_STD_Adddrop,MRR_STD_Allpass,MRR_DW_Adddrop,MRR_DW_Allpass -from .rings import SOCR_Adiabatic, SOCR_Adiabatic_Cband -from .rings import SOCR, SOCR_Cband +# from .rings import SOCR_Adiabatic, SOCR_Adiabatic_Cband +# from .rings import SOCR, SOCR_Cband from .crows import CROW_Eul_Ring,CROW_Eul_RCK,CROW_AED,CROW_STD_Adddrop,CROW_STD_Allpass diff --git a/mxpic/components/primitives/passive/crows.py b/mxpic/components/primitives/passive/crows.py index f636ae6..b0946a2 100644 --- a/mxpic/components/primitives/passive/crows.py +++ b/mxpic/components/primitives/passive/crows.py @@ -246,8 +246,8 @@ class STD_CROW_V: # instr = self.ring_cell[_idx_+1].put(0,dy,0) instr = __cell_arg__(arg=self.ring_cell[_idx_+1],arg_name="ring_cell[_idx_+1]",func_name="STD_CROW_V::generate_pic_gds").put(0,dy,0) - if (_idx_==0): - instr.raise_pins(['r1','r2','r3','r4'],['rb1','rb2','rb3','rb4']) + # if (_idx_==0): + # instr.raise_pins(['r1','r2','r3','r4'],['rb1','rb2','rb3','rb4']) if (len(self.gap_cp)==2): diff --git a/mxpic/components/primitives/pic/__init__.py b/mxpic/components/primitives/pic/__init__.py index 0058fe6..f2d875f 100644 --- a/mxpic/components/primitives/pic/__init__.py +++ b/mxpic/components/primitives/pic/__init__.py @@ -1,8 +1,8 @@ -from .gratings import GC_STD_1D,GC_STD_2D -from .gratings import Grating_2D_Hole, Grating_2D_Hole_3Rec, Grating_2D_Hole_4Rec -from .gratings import Nano_ant -from .gratings import FA +# from .gratings import GC_STD_1D,GC_STD_2D +# from .gratings import Grating_2D_Hole, Grating_2D_Hole_3Rec, Grating_2D_Hole_4Rec +# from .gratings import Nano_ant +# from .gratings import FA from .rings import STD_PIC_Rings,AED_ring diff --git a/mxpic/components/primitives/pic/gratings.py b/mxpic/components/primitives/pic/gratings.py index 6baf638..9f785c5 100644 --- a/mxpic/components/primitives/pic/gratings.py +++ b/mxpic/components/primitives/pic/gratings.py @@ -1211,7 +1211,7 @@ class GC_STD_1D: ## retangular grating - elif (self.shape=='rectangle'): + elif (self.sector_gc==False): L_grat = sum(self.Period) W_grat = self.w_wg + self.L_taper*np.tan(self.A_taper/2*np.pi/180)*2 diff --git a/mxpic/components/primitives/spiral.py b/mxpic/components/primitives/spiral.py deleted file mode 100644 index cc5335b..0000000 --- a/mxpic/components/primitives/spiral.py +++ /dev/null @@ -1,1193 +0,0 @@ -from turtle import shape -import nazca as nd -import numpy as np -import math - -from ...routing import Route - -from ..geometry import * -from ...foundries import * - -from ..geometry import _my_polygon,Conchoid,_my_poly_spiral - -from scipy import optimize - -class spiral: - """ - Parametric waveguide spiral supporting circular or rectangular footprints. - - Parameters - ---------- - name : str, optional - Nazca cell name (default is None). - shape : str, optional - Footprint style used for the spiral path, circular or rectangular (default is "circle"). - Dmin : float, optional - Minimum inner diameter in microns; sets the first loop radius (default is 50). - R_bend : float, optional - Bend radius in microns for rectangular implementations (default is 10). - Rmin_euler : float, optional - Minimum radius inside Euler bends when ``Euler_bend`` is True (default is 10). - Lmin : float, optional - Straight length in microns used by the innermost rectangular loop (default is 50). - width : float, optional - Nominal waveguide width inside the spiral body (default is 2). - w_port : float, optional - Output-port width in microns. ``None`` inherits ``width`` (default is 0.45). - w_bend_center : float, optional - Waveguide width used in the central attachment bends (default is 1). - Rmin_bend_center : float, optional - Minimum radius for the attachment bends (default is 10). - gap : float, optional - Spacing between adjacent turns in microns (default is 1). - cycles : float, optional - Number of half-turns (π radians) laid out in the spiral (default is 20). - xs : str, optional - Cross-section key for the entire structure (default is "strip"). - layer : str, optional - Override layer for polygons; ``None`` derives from ``xs`` (default is None). - w_bend_port : float or None, optional - Width inside the outermost bends; ``None`` inherits ``width`` (default is None). - Ltp_port : float, optional - Length of straight tapers that adapt ``width`` to ``w_port`` (default is 10). - res : float, optional - Arc-length sampling step (µm) used for polygon tessellation (default is 0.5). - cell_transition : nazca.Cell, optional - Insert XS transitions cell to strip when connecting ports (default is None). - port_angle : float, optional - Output-port deflection angle in degrees, measured from +x (default is 180). - Euler_bend : bool, optional - Use Euler/Clothoid bends at the center instead of circular bends (default is False). - show_pins : bool, optional - Draw Nazca stub markers when True (default is False). - sharp_patch : bool, optional - Add chamfer helper polygons when True (default is True). - """ - def __init__(self, - name: str = None, - shape: str = 'circle', - Dmin: float = 50, - R_bend: float = 10, - Rmin_euler: float = 10, - Lmin: float = 50, - width: float = 2, - w_port: float = 0.45, ## not used at this moment - w_bend_center: float = 1, - Rmin_bend_center: float = 10, - gap: float = 1, - cycles: float = 20, - xs: str = 'strip', - layer: str = None, - w_bend_port=None, - Ltp_port = 10, - - res : float = 0.5, ## added in 2023.1.4, the length resolution - cell_transition : nd.Cell = None, - - port_angle: float = 180, - Euler_bend: bool = False, - show_pins: bool = False, - sharp_patch:bool = True, - sample_build:bool = False, -): - - self.Dmin = Dmin - self.Lmin = Lmin - self.R_bend = R_bend - self.shape = shape - self.cycles = cycles - self.width = width - self.w_port = w_port - self.gap = gap - self.xs = xs - self.layer = layer - - self.name=name - if (self.name==None): - self.instantiate = False - else : - self.instantiate = True - - - self.port_angle=port_angle - self.w_bend_center= w_bend_center - self.Rmin_bend_center= Rmin_bend_center - self.Euler_bend= Euler_bend - self.Rmin_euler= Rmin_euler - self.sharp_patch= sharp_patch - - self.w_bend_port = w_bend_port - self.Ltp_port = Ltp_port - - self.cell_transition = cell_transition - - self.res = res - - self.cell = self.generate_gds(show_pins=show_pins) - - def __strt_with_taper__(self,width1,width2,xs,length,Ltp=15,Lstart=2): - with nd.Cell(instantiate=False) as C: - - L_mm = length-Ltp*2-Lstart*2 - - if (L_mm>0): - - instr_a1 = nd.strt(length=Lstart,width=width1,xs=xs).put(0,0,0) - nd.taper(length=Ltp,width1=width1,width2=width2,xs=xs).put() - nd.strt(length=L_mm,width=width2,xs=xs).put() - nd.taper(length=Ltp,width1=width2,width2=width1,xs=xs).put() - instr_b1 = nd.strt(length=Lstart,width=width1,xs=xs).put() - - else : - instr_a1 = nd.strt(length=length/2,width=width1,xs=xs).put(0,0,0) - instr_b1 = nd.strt(length=length/2,width=width1,xs=xs).put() - - nd.Pin(name='a0',pin=instr_a1.pin['a0']).put() - nd.Pin(name='b0',pin=instr_b1.pin['b0']).put() - - return C - - def generate_gds(self,show_pins): - - if (self.w_port==None): - self.w_port = self.width - if (self.w_bend_port==None): - self.w_bend_port = self.width - - - """ Circular Spiral """ - if (self.shape=='circle'): - with nd.Cell(instantiate=self.instantiate,name=self.name) as C: - if (self.layer==None): - pitch = (self.width+self.gap)*2 ## a bi-twsited circle - - Dmin = self.Dmin - R0 = Dmin/2 - kR = pitch/(np.pi*2) - - K_att = (np.power(R0,2)+2*np.power(kR,2))/np.power((np.power(R0,2)+np.power(kR,2)),1.5) - R_att = 1/K_att - - - for layers,growx,growy,acc in nd.layeriter(xs=self.xs): - (a1,b1), (a2,b2),c1,c2 = growx - - """ Generating Central Euler bend """ - if (self.Euler_bend == True): - """ Modified in 2023.07.31, Clothoid simplified into the simple attachment of Clothoid and Conchoid - No Angle compensation were build due to no significant improvement - """ - # spr_bend = Clothoid(xs=self.xs,R=[R_att/1.5,R_att/2.4,R_att], - spr_bend = Clothoid(xs=self.xs,R=[R_att,R_att/2.5001,R_att], - w=[self.w_bend_center,self.w_bend_port],A=[0,90,180],dL_wg=self.res,width_type='dual_sine') - - else : - """ Genreating Circular bend for center """ - spr_bend = Clothoid(xs=self.xs,R=[R0/2,R0/2,R0/2], - w=[self.w_bend_port,self.w_bend_port],A=[0,90,180],dL_wg=self.res,width_type='dual_sine') - - w_cur = self.width*(a1-a2)+(b1-b2) - if (w_cur, Dmin too small") - D_port = self.Dmin - bend_sz[1]*2 - - with nd.Cell(instantiate=False) as wg_mid_cell: - wg = self.__strt_with_taper__(length=self.Lmin-bend_sz[0]*2,width2=self.width,width1=bend_cell.pin['a0'].width,xs=self.xs,Ltp=self.Ltp_port).put(-self.Lmin/2+bend_sz[0]*2,0,0) - bend_cell.put(wg.pin['a0'],flip=1) - self.__strt_with_taper__(length=D_port,width2=self.width,width1=bend_cell.pin['a0'].width,xs=self.xs,Ltp=self.Ltp_port).put() - bd = bend_cell.put(flip=0) - nd.Pin(name='a0',pin=bd.pin['b0']).put() - nd.Pin(name='b0',pin=wg.pin['b0']).put() - - wg_mid = wg_mid_cell.put(-self.Lmin/2,self.Dmin/2,0) - - pin_U_pre = wg_mid.pin['b0'] - pin_D_pre = wg_mid.pin['a0'] - - bend_U = bend_cell.put(pin_U_pre) - wg_U = self.__strt_with_taper__(length=pitch/2+D_port, - width2=self.width,width1=bend_U.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_U.pin['b0']) - bend_U2 = bend_cell.put(wg_U.pin['b0']) - wg_U = self.__strt_with_taper__(length=self.Lmin+pitch/2, - width2=self.width,width1=bend_U2.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_U2.pin['b0']) - pin_U_pre = wg_U.pin['b0'] - - bend_D = bend_cell.put(pin_D_pre) - wg_D = self.__strt_with_taper__(length=pitch/2+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_D.pin['b0']) - bend_D2 = bend_cell.put(wg_D.pin['b0']) - wg_D = self.__strt_with_taper__(length=self.Lmin+pitch/2, - width2=self.width,width1=bend_D2.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_D2.pin['b0']) - pin_D_pre = wg_D.pin['b0'] - - L = self.Lmin*3+pitch+L_bend - _cycle_ = 1 - for _cycle_ in range(1,self.cycles-1): - bend_U = bend_cell.put(pin_U_pre) - wg_U = self.__strt_with_taper__(length=_cycle_*pitch+pitch/2+D_port, - width2=self.width,width1=bend_U.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_U.pin['b0']) - bend_U2 = bend_cell.put(wg_U.pin['b0']) - wg_U = self.__strt_with_taper__(length=self.Lmin+_cycle_*pitch+pitch/2, - width2=self.width,width1=bend_U2.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_U2.pin['b0']) - pin_U_pre = wg_U.pin['b0'] - - bend_D = bend_cell.put(pin_D_pre) - wg_D = self.__strt_with_taper__(length=_cycle_*pitch+pitch/2+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_D.pin['b0']) - bend_D2 = bend_cell.put(wg_D.pin['b0']) - wg_D = self.__strt_with_taper__(length=self.Lmin+_cycle_*pitch+pitch/2, - width2=self.width,width1=bend_D2.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_D2.pin['b0']) - pin_D_pre = wg_D.pin['b0'] - - L = L+(_cycle_*pitch-pitch/2+D_port+self.Lmin+_cycle_*pitch+pitch/2)*2+L_bend*4 - - - """ 2023.03.19 REVISED, the spiral will end at the same Y level with begining """ - bend_D = bend_cell.put(pin_D_pre) - - - ## adding bend connection to outside - if(self.port_angle==90 or self.port_angle==270 or self.port_angle==-90): - wg_D = self.__strt_with_taper__(length=(_cycle_+1)*pitch+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_D.pin['b0']) - pin_D_pre = wg_D.pin['b0'] - - elif(self.port_angle==180) : - wg_D = self.__strt_with_taper__(length=(_cycle_+1)*pitch+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_D.pin['b0']) - - bend_D2 = bend_cell.put(wg_D.pin['b0'],flip=1) - pin_D_pre = bend_D2.pin['b0'] - elif(self.port_angle==0 or self.port_angle==360) : - - wg_D = self.__strt_with_taper__(length=(_cycle_+1.5)*pitch+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp_port).put(bend_D.pin['b0']) - - bend_D2 = bend_cell.put(wg_D.pin['b0'],flip=0) - pin_D_pre = bend_D2.pin['b0'] - - if (self.cell_transition is not None): - taper = self.cell_transition.put(pin_D_pre) - pin_D_pre = taper.pin['b0'] - taper = self.cell_transition.cell.put(pin_U_pre) - pin_U_pre = taper.pin['b0'] - - - """ 2023.03.19 REVISED, the begining will not be influenced by the rotation angle """ - if (self.w_port !=self.width) : - if (self.rib2strip): - nd.taper(length=self.Ltp_port,width1=self.width,width2=self.w_port,xs='strip').put(pin_D_pre) - nd.Pin(name='b1',width=self.w_bend_port).put() - - nd.taper(length=self.Ltp_port,width1=self.width,width2=self.w_port,xs='strip').put(pin_U_pre) - nd.Pin(name='a1',width=self.w_bend_port).put() - else : - nd.taper(length=self.Ltp_port,width1=self.width,width2=self.w_port,xs=self.xs).put(pin_D_pre) - nd.Pin(name='b1',width=self.w_bend_port).put() - - nd.taper(length=self.Ltp_port,width1=self.width,width2=self.w_port,xs=self.xs).put(pin_U_pre) - nd.Pin(name='a1',width=self.w_bend_port).put() - else: - nd.Pin(name='b1',width=self.w_bend_port).put(pin_D_pre) - nd.Pin(name='a1',width=self.w_bend_port).put(pin_U_pre) - - self.L = L - - ## revise 2022.08.18 - if (show_pins): - nd.put_stub() - - return C - -class spiral_rectangle: - """ - Rectangular spiral with optional cross-section transitions and alignment control. - - Parameters - ---------- - name : str or None, optional - Nazca cell name (default is None). - Dmin : float, optional - Minimum vertical separation between the first pair of bends (default is 50). - Rmax_bend : float, optional - Maximum radius used inside Clothoid bends (default is 10). - Rmin_bend : float, optional - Minimum radius reached inside Clothoid bends (default is 10). - wmin_bend : float, optional - Minimum waveguide width inside bends (default is 10). - Lmin : float, optional - Straight length of the innermost segment (default is 50). - width : float, optional - Nominal waveguide width along the spiral (default is 2). - w_port : float, optional - IO waveguide width after the final taper (default is 0.45). - gap : float, optional - Spacing between successive turns (default is 1). - cycles : float, optional - Number of rectangular loops (default is 20). - xs : str, optional - Cross-section key (default is "strip"). - layer : str, optional - Override polygon layer (default is None). - w_bend_port : float or None, optional - Bend waveguide width; inherits ``width`` when None (default is None). - Lport : float, optional - Length of straight sections appended at each port (default is 10). - Ltp : float, optional - Taper length that converts bend width to ``width`` (default is 10). - res : float, optional - Arc-length sampling resolution (default is 0.5). - cell_xs_transition : nd.Cell or object, optional - Pre-built cell that performs cross-section transitions after the ports (default is None). - port_angle : float, optional - Output bend angle in degrees (default is 180). - show_pins : bool, optional - Draw Nazca stub markers when True (default is False). - sharp_patch : bool, optional - Insert chamfer helpers when True (default is True). - in_out_align : bool, optional - If True, align input/output along the same axis when ``port_angle=180`` (default is True). - Lpatch : float, optional - Small straight length inserted before/after bends to ease Boolean ops (default is 0.05). - """ - def __init__(self, - name: str = None, - Dmin: float = 50, - Rmax_bend: float = 10, - Rmin_bend: float = 10, - wmin_bend: float = 10, - Lmin: float = 50, - width: float = 2, - w_port: float = 0.45, ## not used at this moment - gap: float = 1, - cycles: float = 20, - xs: str = 'strip', - layer: str = None, - w_bend_port=None, - Lport = 10, - Ltp = 10, - - # Tres: int = 256,## resolution for one cycle, these two parameters aborted in 2023.1.4 - # Bres: int = 64, ## resolution for bends, these two parameters aborted in 2023.1.4 - - res : float = 0.5, ## added in 2023.1.4, the length resolution - cell_xs_transition=None, - - port_angle: float = 180, - show_pins: bool = False, - sharp_patch:bool = True, - in_out_align = True, - Lpatch = 0.05, - sample_build:bool = False, - -): - - self.Dmin = Dmin - self.Lmin = Lmin - self.Rmax_bend = Rmax_bend - self.Rmin_bend = Rmin_bend - self.wmin_bend = wmin_bend - self.cycles = cycles - self.width = width - self.w_port = w_port - self.gap = gap - self.xs = xs - self.layer = layer - - self.Ltp = Ltp - self.Lpatch = Lpatch - self.name=name - if (self.name==None): - self.instantiate = False - else : - self.instantiate = True - - - self.port_angle=port_angle - self.sharp_patch= sharp_patch - - self.w_bend_port = w_bend_port - self.Lport = Lport - - if (hasattr(cell_xs_transition,'cell')): - self.cell_xs_transition = cell_xs_transition.cell - elif (isinstance(cell_xs_transition,nd.Cell)): - self.cell_xs_transition = cell_xs_transition - else : - self.cell_xs_transition = None - - self.res = res - - self.in_out_align = in_out_align - - self.cell = self.generate_gds(show_pins=show_pins) - - def __strt_with_taper__(self,width1,width2,xs,length,Ltp=15,Lstart=2): - with nd.Cell(instantiate=False) as C: - - L_mm = length-Ltp*2-Lstart*2 - - if (L_mm>0): - - instr_a1 = nd.strt(length=Lstart,width=width1,xs=xs).put(0,0,0) - nd.taper(length=Ltp,width1=width1,width2=width2,xs=xs).put() - nd.strt(length=L_mm,width=width2,xs=xs).put() - nd.taper(length=Ltp,width1=width2,width2=width1,xs=xs).put() - instr_b1 = nd.strt(length=Lstart,width=width1,xs=xs).put() - - else : - instr_a1 = nd.strt(length=length/2,width=width1,xs=xs).put(0,0,0) - instr_b1 = nd.strt(length=length/2,width=width1,xs=xs).put() - - nd.Pin(name='a0',pin=instr_a1.pin['a0']).put() - nd.Pin(name='b0',pin=instr_b1.pin['b0']).put() - - return C - - def generate_gds(self,show_pins): - - if (self.w_port==None): - self.w_port = self.width - if (self.w_bend_port==None): - self.w_bend_port = self.width - - """ Rectangluar Spiral """ - with nd.Cell(instantiate=self.instantiate,name=self.name) as C: - pitch = (self.width+self.gap)*2 ## a bi-twsited circle - - bend_rt = Clothoid(xs=self.xs,R=[self.Rmax_bend,self.Rmin_bend,self.Rmax_bend], - w=[self.w_bend_port,self.wmin_bend,self.w_bend_port], - A=[0,45,90], - dL_wg=self.res, - end_patch=False, - sharp_patch=self.sharp_patch) - - bend_rt_anti = Clothoid(xs=self.xs,R=[self.Rmax_bend,self.Rmin_bend,self.Rmax_bend], - w=[self.w_bend_port,self.wmin_bend,self.w_bend_port], - A=[0,-45,-90], - dL_wg=self.res, - end_patch=False, - sharp_patch=self.sharp_patch) - - """ Adding small patch to the bending connection """ - with nd.Cell(instantiate=False) as bend_cell: - inst = bend_rt.cell.put(0,0,0) - nd.strt(xs=self.xs,width=self.w_bend_port,length=self.Lpatch).put(inst.pin['a0'].move(-self.Lpatch/2,0,0),flip=1) - nd.strt(xs=self.xs,width=self.w_bend_port,length=self.Lpatch).put(inst.pin['b0'].move(-self.Lpatch/2,0,0)) - inst.raise_pins() - - with nd.Cell(instantiate=False) as bend_cell_anti: - inst = bend_rt_anti.cell.put(0,0,0) - nd.strt(xs=self.xs,width=self.w_bend_port,length=self.Lpatch).put(inst.pin['a0'].move(-self.Lpatch/2,0,0),flip=1) - nd.strt(xs=self.xs,width=self.w_bend_port,length=self.Lpatch).put(inst.pin['b0'].move(-self.Lpatch/2,0,0)) - inst.raise_pins() - - # bend_cell = bend_rt.cell - # bend_cell_anti = bend_rt_anti.cell - bend_sz = bend_rt.sz - L_bend = bend_rt.L0 - - self.bend_cell = bend_cell - if (self.Dmin < bend_sz[1]*2): - self.Dmin = bend_sz[1]*2 - print("WARNING: In , Dmin too small") - D_port = self.Dmin - bend_sz[1]*2 - - if (self.name is None): - wg_mid_name = None - else: - wg_mid_name = "wg_mid_cell"+self.name - with nd.Cell(instantiate=self.instantiate,name=wg_mid_name) as wg_mid_cell: - - wg = self.__strt_with_taper__(length=self.Lmin-bend_sz[0]*2-bend_sz[0],width2=self.width,width1=bend_cell.pin['a0']. - width,xs=self.xs,Ltp=self.Ltp).put(-self.Lmin/2+bend_sz[0]*2+bend_sz[0],0,0,flip=1) - bend_cell_anti.put(wg.pin['a0'],flip=0) - self.__strt_with_taper__(length=D_port,width2=self.width,width1=bend_cell.pin['a0'].width,xs=self.xs,Ltp=self.Ltp).put() - # bd = bend_cell.put(flip=0) - bd = bend_cell.put() - bd = self.__strt_with_taper__(length=bend_sz[0], - width2=bend_cell.pin['a0'].width, - width1=bend_cell.pin['a0'].width,xs=self.xs,Ltp=self.Ltp).put() - nd.Pin(name='a0',pin=bd.pin['b0']).put() - nd.Pin(name='b0',pin=wg.pin['b0']).put() - - wg_mid = wg_mid_cell.put(-self.Lmin/2,self.Dmin/2,0) - L = self.Lmin-bend_sz[0]*2 + D_port + L_bend*2 - - pin_U_pre = wg_mid.pin['b0'] - pin_D_pre = wg_mid.pin['a0'] - - bend_U = bend_cell_anti.put(pin_U_pre,flip=1) - wg_U = self.__strt_with_taper__(length=pitch/2+D_port, - width2=self.width,width1=bend_U.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_U.pin['b0'],flip=1) - L = L + pitch/2+D_port + L_bend - - bend_U2 = bend_cell_anti.put(wg_U.pin['b0'],flip=1) - wg_U = self.__strt_with_taper__(length=self.Lmin+pitch/2, - width2=self.width,width1=bend_U2.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_U2.pin['b0'],flip=1) - pin_U_pre = wg_U.pin['b0'] - L = L + self.Lmin+pitch/2 + L_bend - - bend_D = bend_cell.put(pin_D_pre) - wg_D = self.__strt_with_taper__(length=pitch/2+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_D.pin['b0']) - L = L + pitch/2+D_port + L_bend - - bend_D2 = bend_cell.put(wg_D.pin['b0']) - wg_D = self.__strt_with_taper__(length=self.Lmin+pitch/2, - width2=self.width,width1=bend_D2.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_D2.pin['b0']) - pin_D_pre = wg_D.pin['b0'] - L = L + self.Lmin+pitch/2 + L_bend - - # L = self.Lmin*3+pitch+L_bend - _cycle_ = 1 - - - for _cycle_ in range(1,self.cycles-1): - bend_U = bend_cell_anti.put(pin_U_pre,flip=1) - wg_U = self.__strt_with_taper__(length=_cycle_*pitch+pitch/2+D_port, - width2=self.width,width1=bend_U.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_U.pin['b0'],flip=1) - - L = L+_cycle_*pitch+pitch/2+D_port+L_bend - - bend_U2 = bend_cell_anti.put(wg_U.pin['b0'],flip=1) - wg_U = self.__strt_with_taper__(length=self.Lmin+_cycle_*pitch+pitch/2, - width2=self.width,width1=bend_U2.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_U2.pin['b0'],flip=1) - pin_U_pre = wg_U.pin['b0'] - L = L+self.Lmin+_cycle_*pitch+pitch/2+D_port+L_bend - - bend_D = bend_cell.put(pin_D_pre) - wg_D = self.__strt_with_taper__(length=_cycle_*pitch+pitch/2+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_D.pin['b0']) - L = L+_cycle_*pitch+pitch/2+D_port+L_bend - - bend_D2 = bend_cell.put(wg_D.pin['b0']) - wg_D = self.__strt_with_taper__(length=self.Lmin+_cycle_*pitch+pitch/2, - width2=self.width,width1=bend_D2.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_D2.pin['b0']) - pin_D_pre = wg_D.pin['b0'] - L = L+self.Lmin+_cycle_*pitch+pitch/2+L_bend - - - """ 2023.03.19 REVISED, the spiral will end at the same Y level with begining """ - - ## adding bend connection to outside - if(self.port_angle==90 or self.port_angle==270 or self.port_angle==-90): - - bend_D = bend_cell.put(pin_D_pre) - wg_D = self.__strt_with_taper__(length=(_cycle_+1)*pitch+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_D.pin['b0']) - pin_D_pre = wg_D.pin['b0'] - L = L+(_cycle_+1)*pitch+D_port+L_bend - - elif(self.port_angle==180 and self.in_out_align) : - - bend_D = bend_cell.put(pin_D_pre) - wg_D = self.__strt_with_taper__(length=(_cycle_+1)*pitch+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_D.pin['b0']) - - bend_D2 = bend_cell_anti.put(wg_D.pin['b0']) - pin_D_pre = bend_D2.pin['b0'] - L = L+(_cycle_+1)*pitch+D_port+L_bend*2 - - elif(self.port_angle==180 and self.in_out_align==False): - pass - - elif(self.port_angle==0 or self.port_angle==360) : - - bend_D = bend_cell.put(pin_D_pre) - wg_D = self.__strt_with_taper__(length=(_cycle_+1.5)*pitch+D_port, - width2=self.width,width1=bend_D.pin['b0'].width,xs=self.xs,Ltp=self.Ltp).put(bend_D.pin['b0']) - - bend_D2 = bend_cell.put(wg_D.pin['b0'],flip=0) - pin_D_pre = bend_D2.pin['b0'] - L = L+(_cycle_+1.5)*pitch+D_port+L_bend*2 - - - - - - """ 2023.03.19 REVISED, the begining will not be influenced by the rotation angle """ - """ 2023.09.18 REVISED, the xsection output can be defined with the transition area """ - if (self.w_port !=self.width) : - pin_D_pre = nd.taper(length=self.Lport,width1=self.w_port,width2=self.w_port,xs=self.xs).put(pin_D_pre) - - pin_U_pre = nd.taper(length=self.Lport,width1=self.w_port,width2=self.w_port,xs=self.xs).put(pin_U_pre) - - - """ 2023.09.18 REVISED, the transition area are only added at w_port area """ - ### Because putting transisiton in multimode area are dengerous - - if (self.cell_xs_transition != None): - - taper = self.cell_xs_transition.put(pin_D_pre) - pin_D_pre = taper.pin['b0'] - taper = self.cell_xs_transition.put(pin_U_pre) - pin_U_pre = taper.pin['b0'] - - nd.Pin(name='b1',width=self.w_port).put(pin_D_pre) - nd.Pin(name='a1',width=self.w_port).put(pin_U_pre) - - self.L = L - - ## revise 2022.08.18 - if (show_pins): - nd.put_stub() - - return C - -class Spiral_Rect_STD(spiral_rectangle): - """ - Convenience preset for rectangular spirals that share a single bend radius. - - Parameters - ---------- - name : str or None, optional - Nazca cell name (default is None). - Dmin : float, optional - Minimum inner spacing between the first pair of bends (default is 50). - R_bend : float, optional - Bend radius applied to every corner (default is 10). - Lmin : float, optional - Straight length of the innermost segment (default is 50). - width : float, optional - Waveguide width throughout the spiral (default is 2). - w_port : float, optional - IO waveguide width after the final taper (default is 0.45). - gap : float, optional - Spacing between successive turns (default is 1). - cycles : float, optional - Number of rectangular loops (default is 20). - xs : str, optional - Cross-section key (default is "strip"). - layer : str or None, optional - Override polygon layer (default is None). - Lport : float, optional - Length of straight port extensions (default is 10). - in_out_align : bool, optional - Align input/output along the same axis when ``port_angle=180`` (default is True). - res : float, optional - Arc-length sampling resolution (default is 0.5). - cell_xs_transition : nd.Cell or object, optional - Transition cell appended at the ports (default is None). - port_angle : float, optional - Output bend angle in degrees (default is 180). - show_pins : bool, optional - Draw Nazca stub markers when True (default is False). - sharp_patch : bool, optional - Insert chamfer helpers when True (default is True). - """ - def __init__(self, - name: str = None, - Dmin: float = 50, - R_bend: float = 10, - Lmin: float = 50, - width: float = 2, - w_port: float = 0.45, - gap: float = 1, - cycles: float = 20, - xs: str = 'strip', - layer: str = None, - Lport=10, - in_out_align = True, - res: float = 0.5, - cell_xs_transition=None, - port_angle: float = 180, - show_pins: bool = False, - sharp_patch: bool = True): - super().__init__(name=name, - Dmin=Dmin, - Rmax_bend=R_bend, - Rmin_bend=R_bend, - wmin_bend=width, - Lmin=Lmin, - width=width, - w_port=w_port, - gap=gap, - cycles=cycles, - xs=xs, - layer=layer, - w_bend_port=None, - Lport=Lport, - res=res, - cell_xs_transition=cell_xs_transition, - port_angle=port_angle, - show_pins=show_pins, - sharp_patch=sharp_patch, - in_out_align=in_out_align) - -class spiral_circle: - """ - Circular spiral with optional internal Euler S-bends and port transitions. - - Parameters - ---------- - name : str or None, optional - Nazca cell name (default is None). - Dmin : float, optional - Minimum inner diameter in microns (default is 50). - width : float, optional - Nominal waveguide width (default is 2). - w_port : float, optional - Output-port width after the final taper (default is 0.45). - w_bend_center : float, optional - Waveguide width within the central attachment bend (default is 1). - gap : float, optional - Spacing between adjacent turns (default is 1). - cycles : float, optional - Number of half-turns (π radians) (default is 20). - xs : str, optional - Cross-section key (default is "strip"). - layer : str or None, optional - Override layer for polygons (default is None). - Lport : float, optional - Length of straight sections appended to each port (default is 10). - res : float, optional - Arc-length sampling step (default is 0.5). - rib2strip : bool, optional - Insert rib-to-strip transitions at the ports (default is True). - port_angle : float, optional - Output bend angle in degrees (default is 180). - Euler_Sbend : bool, optional - Use optimized Euler S-bends at the center (default is False). - show_pins : bool, optional - Draw Nazca stub markers when True (default is False). - sharp_patch : bool, optional - Add chamfer polygons when True (default is True). - strict_condition : bool, optional - Enforce constant spacing by matching the conchoid tilt exactly (default is False). - R_ratio_mamnual : tuple or None, optional - Manually override the radius ratios used in Euler S-bends; expected form ``(Rc_ratio, Rm_ratio, tilt)``. - """ - def __init__(self, - name: str = None, - Dmin: float = 50, - width: float = 2, - w_port: float = 0.45, ## not used at this moment - w_bend_center: float = 1, - gap: float = 1, - cycles: float = 20, - xs: str = 'strip', - layer: str = None, - Lport = 10, - - res : float = 0.5, ## added in 2023.1.4, the length resolution - rib2strip=True, - - port_angle: float = 180, - Euler_Sbend: bool = False, - show_pins: bool = False, - sharp_patch:bool = True, - strict_condition = False, - R_ratio_mamnual = None, -): - - self.Dmin = Dmin - self.cycles = cycles - self.width = width - self.w_port = w_port - self.gap = gap - self.xs = xs - self.layer = layer - - self.name=name - if (self.name==None): - self.instantiate = False - else : - self.instantiate = True - - - self.port_angle=port_angle - self.w_bend_center= w_bend_center - self.Euler_Sbend= Euler_Sbend - self.sharp_patch= sharp_patch - - self.Lport = Lport - - self.rib2strip = rib2strip - - self.res = res - self.strict_condition = strict_condition - - self.R_ratio_mamnual = R_ratio_mamnual - - self.cell = self.generate_gds(show_pins=show_pins) - - """ Optimizing the bend radius for the minimum and central """ - def opt_euler(self,R,R0): - (R1,R2) = R - R1 = R1 - R2 = R2 - [A,LA] = _my_poly_spiral(r=[R0/R1,R0/R2],theta=[0,90],res=0.01,R_max=1000,order=1) - [B,LA] = _my_poly_spiral(r=[R0/R2,R0],theta=[90,180],res=0.01,R_max=1000,order=1) - - x_final = A[-1,0]+B[-1,0] - y_final = A[-1,1]+B[-1,1] - - D_final = np.sqrt(x_final**2 + y_final**2) - A_final = abs(np.arctan(x_final/y_final))*180/pi - - # Dmis = abs(D_final-D0) - # Amis = abs(abs(A_final)-abs(A0)) - - return [D_final,A_final] - - - def generate_gds(self,show_pins): - - if (self.w_port==None): - self.w_port = self.width - - with nd.Cell(instantiate=self.instantiate,name=self.name) as C: - if (self.layer==None): - pitch = (self.width+self.gap)*2 ## a bi-twsited circle - - Dmin = self.Dmin - R0 = Dmin/2 - kR = pitch/(np.pi*2) - - K_att = (np.power(R0,2)+2*np.power(kR,2))/np.power((np.power(R0,2)+np.power(kR,2)),1.5) - R_att = 1/K_att - - Atilt_con = abs(np.arctan(kR/R0))*180/pi ## the initial tilt norm of the conchoid - - """ Calculating the spiral with internal Sbend """ - if (self.Euler_Sbend): - - if (self.R_ratio_mamnual==None): - n_swp = 201 - R1_range = np.linspace(0.9,1.4,n_swp) - R2_range = np.linspace(2.4,2.6,n_swp) - mis = np.zeros((n_swp,n_swp)) - - for ix in range(0,len(R1_range)): - for iy in range(0,len(R2_range)): - temp = self.opt_euler((R1_range[ix],R2_range[iy]),R0=R_att) - mis[ix,iy] = abs(temp[0]-R0)+abs(temp[1]-abs(Atilt_con))*10 - - idx = mis.argmin() - - ix = idx//n_swp - iy = np.mod(idx,n_swp) - - Rc_ratio = R1_range[ix] - Rm_ratio = R2_range[iy] - final_mismatch = self.opt_euler((Rc_ratio,Rm_ratio),R_att) - - print("====================================================") - print("Optimized D/A = %.3f -- %.3f" % (final_mismatch[0],final_mismatch[1])) - print("Target D/A = %.3f -- %.3f" % (R0,Atilt_con)) - print("Optimized para = %.3f -- %.3f" % (Rc_ratio,Rm_ratio)) - - else : - Rc_ratio = self.R_ratio_mamnual[0] - Rm_ratio = self.R_ratio_mamnual[1] - print("====================================================") - print("manual para = %.3f -- %.3f" % (Rc_ratio,Rm_ratio)) - - - for layers,growx,growy,acc in nd.layeriter(xs=self.xs): - (a1,b1), (a2,b2),c1,c2 = growx - """ Generating Central Euler bend """ - if (self.Euler_Sbend == True): - spr_bend = Clothoid(xs=self.xs,R=[R_att/Rc_ratio,R_att/Rm_ratio,R_att], - w=[self.w_bend_center,self.width],A=[0,90,180],dL_wg=self.res, - width_type='dual_sine',dL_cal=0.01) - - else : - """ Genreating Circular bend for center """ - spr_bend = Clothoid(xs=self.xs,R=[R0/2,R0/2,R0/2], - w=[self.width,self.width],A=[0,90,180],dL_wg=self.res, - width_type='dual_sine',dL_cal=0.01) - - w_cur = self.width*(a1-a2)+(b1-b2) - - if (w_cur None: """Register broad layer and xsection defaults used by primitive examples.""" - mx.technologies.foundry["CUMEC"]["CUMEC_CSiP130Cu"]() - mx.technologies.foundry["Silterra"]["EMO1_2ML_CU_Al_RDL"]() - # Compatibility layer aliases used by older primitive modules. - alias_layers = { - "STRIP_COR": (31, 1), - "STRIP_CLD": (31, 2), - "STRIP_TRE": (31, 3), - "SRIB_COR": (32, 1), - "SRIB_CLD": (32, 2), - "SRIB_TRE": (32, 3), - "RIB_COR": (33, 1), - "RIB_CLD": (33, 2), - "RIB_TRE": (33, 3), - "FETCH": (31, 3), - "METCH": (33, 3), - "SETCH": (32, 3), - "FCW_TRE": (31, 3), - "FECOR": (31, 1), - "MECOR": (33, 1), - "FECLD": (31, 2), - "MECLD": (33, 2), - "GC_OPEN": (61, 0), - "PLD": (24, 0), - "NLD": (23, 0), - "PW": (22, 0), - "NW": (21, 0), - "SA": (128, 60), - } - - for alias, layer in alias_layers.items(): - nd.add_layer(name=alias, layer=layer, overwrite=True) - - xsection_layers = { - "heater": ["HEATER"], - "metal": ["METAL"], - "metal_1": ["UTM"], - "metal_2": ["UTM2"], - "via_h2m": ["CT_SI"], - "via_s2m": ["CT_SI"], - "p": ["P"], - "n": ["N"], - "pp": ["PP"], - "np": ["NP"], - "pw": ["PW"], - "nw": ["NW"], - "pld": ["PLD"], - "nld": ["NLD"], - "sa": ["SA"], - "sin": ["SiN_Rib_WG"], - "air_trench": ["OXIDE_FACET"], - "grating": ["STRIP_COR"], - } - - for xsection, layers in xsection_layers.items(): - nd.add_xsection(name=xsection) - for layer in layers: - try: - nd.add_layer2xsection( - xsection=xsection, - layer=layer, - overwrite=True, - ) - except Exception: - pass + mx.technologies.foundry["AMF"]["AMF_Si220_Active"]() def discover_primitive_classes() -> list[type[Any]]: - package = importlib.import_module(PRIMITIVES_PACKAGE) classes: list[type[Any]] = [] + seen_class_paths: set[str] = set() - for module_info in pkgutil.walk_packages(package.__path__, package.__name__ + "."): - if module_info.ispkg: - continue - - module = importlib.import_module(module_info.name) - for _, cls in inspect.getmembers(module, inspect.isclass): - if cls.__module__ != module.__name__: + for package_name in PRIMITIVE_EXPORT_PACKAGES: + package = importlib.import_module(package_name) + for _, cls in package.__dict__.items(): + if not inspect.isclass(cls): continue if cls.__name__ in SKIP_CLASSES: continue if "__init__" not in cls.__dict__: continue + if not ( + cls.__module__ == package_name + or cls.__module__.startswith(package_name + ".") + ): + continue + + class_path = f"{cls.__module__}.{cls.__name__}" + if class_path in seen_class_paths: + continue + seen_class_paths.add(class_path) classes.append(cls) return classes @@ -136,17 +84,26 @@ def build_fiber_coupler_seed() -> nd.Cell: return cell -def build_context() -> dict[str, Any]: - from mxpic.components.electronics import Vias - from mxpic.components.primitives.pic.bragg import Bragg - from mxpic.components.primitives.pic.couplers import MDM, ring_bus_wg - from mxpic.components.primitives.pic.gratings import Grating_2D_Hole - from mxpic.components.primitives.pic.rings import AED_ring - from mxpic.components.primitives.pic.taper import PSR +class BuildContext(dict[str, Any]): + def __missing__(self, key: str) -> Any: + try: + builder = CONTEXT_BUILDERS[key] + except KeyError: + raise KeyError(key) from None - ring = AED_ring(name="_seed_aed_ring") - bus = ring_bus_wg() - via_i2m = Vias( + value = builder(self) + self[key] = value + return value + + +def build_context() -> BuildContext: + return BuildContext() + + +def build_via_i2m(_: BuildContext) -> Any: + from mxpic.components.electronics import Vias + + return Vias( xs="via_s2m", area=[1.0, 1.0], sz=[0.25, 0.25], @@ -154,7 +111,12 @@ def build_context() -> dict[str, Any]: xs_l1="p", xs_l2="metal", ) - via_h2m = Vias( + + +def build_via_h2m(_: BuildContext) -> Any: + from mxpic.components.electronics import Vias + + return Vias( xs="via_h2m", area=[1.0, 1.0], sz=[0.25, 0.25], @@ -163,21 +125,60 @@ def build_context() -> dict[str, Any]: xs_l2="metal", ) - return { - "fiber_coupler": build_fiber_coupler_seed(), - "grating_unit": Grating_2D_Hole(), - "psr": PSR(name="_seed_psr"), - "mdm": MDM(name="_seed_mdm"), - "bragg": Bragg(), - "crow_ring": ring.cell, - "crow_bus": bus.cell, - "crow_w_bus": bus.w, - "crow_w_ring": [0.45, 0.65], - "crow_sz_ring": [20, 20], - "crow_sz_bus": bus.sz, - "via_h2m": via_h2m, - "via_i2m": via_i2m, - } + +def build_grating_unit(_: BuildContext) -> Any: + from mxpic.components.primitives.pic.gratings import Grating_2D_Hole + + return Grating_2D_Hole() + + +def build_psr(_: BuildContext) -> Any: + from mxpic.components.primitives.pic.taper import PSR + + return PSR(name="_seed_psr") + + +def build_mdm(_: BuildContext) -> Any: + from mxpic.components.primitives.pic.couplers import MDM + + return MDM(name="_seed_mdm") + + +def build_bragg(_: BuildContext) -> Any: + from mxpic.components.primitives.pic.bragg import Bragg + + return Bragg() + + +def build_crow_ring_device(_: BuildContext) -> Any: + from mxpic.components.primitives.pic.rings import AED_ring + + return AED_ring(name="_seed_aed_ring") + + +def build_crow_bus_device(_: BuildContext) -> Any: + from mxpic.components.primitives.pic.couplers import ring_bus_wg + + return ring_bus_wg() + + +CONTEXT_BUILDERS = { + "fiber_coupler": lambda context: build_fiber_coupler_seed(), + "grating_unit": build_grating_unit, + "psr": build_psr, + "mdm": build_mdm, + "bragg": build_bragg, + "_crow_ring_device": build_crow_ring_device, + "crow_ring": lambda context: context["_crow_ring_device"].cell, + "crow_w_ring": lambda context: [0.45, 0.65], + "crow_sz_ring": lambda context: [20, 20], + "_crow_bus_device": build_crow_bus_device, + "crow_bus": lambda context: context["_crow_bus_device"].cell, + "crow_w_bus": lambda context: context["_crow_bus_device"].w, + "crow_sz_bus": lambda context: context["_crow_bus_device"].sz, + "via_h2m": build_via_h2m, + "via_i2m": build_via_i2m, +} REQUIRED_VALUES: dict[str, Any] = { @@ -216,39 +217,10 @@ REQUIRED_VALUES: dict[str, Any] = { def class_overrides( class_path: str, - context: dict[str, Any], + _context: dict[str, Any], ) -> dict[str, Any]: - grating_arrays = { - "w_teeth_SiN": [0.5] * 30, - "gap_teeth_SiN": [0.5] * 30, - "w_teeth_Si": [0.45] * 30, - "gap_teeth_Si": [0.45] * 30, - "layer_Si_teeth": "WG_HM", - "layer_Si_slab": "WG_HIGHRIB", - "layer_SiN_etch": "SiN_Rib_WG", - "layer_SiN_slab": "WG_N", - } - overrides = { - "mxpic.components.primitives.grating_couplers.GC_SiN_Si_Dual_Layer": grating_arrays, "mxpic.components.primitives.pic.couplers.ADC_STD_2x2": {"Rd1": 20}, - "mxpic.components.primitives.pic.gratings.GC_STD_1D": {"sector_gc": False}, - "mxpic.components.primitives.passive.rings.SOCR": { - "via_h2m": context["via_h2m"], - "show_pins": False, - }, - "mxpic.components.primitives.passive.rings.SOCR_Adiabatic": { - "via_h2m": context["via_h2m"], - "show_pins": False, - }, - "mxpic.components.primitives.passive.rings.SOCR_Adiabatic_Cband": { - "via_h2m": context["via_h2m"], - "show_pins": False, - }, - "mxpic.components.primitives.passive.rings.SOCR_Cband": { - "via_h2m": context["via_h2m"], - "show_pins": False, - }, } return dict(overrides.get(class_path, {})) diff --git a/build_images.py b/runs/build_images.py similarity index 70% rename from build_images.py rename to runs/build_images.py index 2097aa2..195e0ad 100644 --- a/build_images.py +++ b/runs/build_images.py @@ -1,4 +1,6 @@ -import importlib +from __future__ import annotations + +import importlib.util import os from pathlib import Path import sys @@ -10,10 +12,15 @@ matplotlib.use("Agg") import matplotlib.pyplot as plt import nazca as nd -from generate_handbook import DEFAULT_SRC_ROOT +ROOT = Path(__file__).resolve().parents[1] +RUNS_DIR = Path(__file__).resolve().parent +OUTPUT_IMAGE_ROOT = ROOT / "docs" / "source" / "images" +PACKAGE_ROOT = "mxpic.components.primitives" -_PRIMITIVE_BUILDER_PATH = Path(__file__).resolve().parent / "tests" / "build_all_primitives.py" +sys.path.insert(0, str(ROOT)) + +_PRIMITIVE_BUILDER_PATH = RUNS_DIR / "build_all_primitives.py" _PRIMITIVE_BUILDER_SPEC = importlib.util.spec_from_file_location( "mxpic_build_all_primitives", _PRIMITIVE_BUILDER_PATH, @@ -24,10 +31,10 @@ if _PRIMITIVE_BUILDER_SPEC is None or _PRIMITIVE_BUILDER_SPEC.loader is None: _primitive_builder = importlib.util.module_from_spec(_PRIMITIVE_BUILDER_SPEC) _PRIMITIVE_BUILDER_SPEC.loader.exec_module(_primitive_builder) -PRIMITIVES_PACKAGE = _primitive_builder.PRIMITIVES_PACKAGE bootstrap_technology = _primitive_builder.bootstrap_technology build_context = _primitive_builder.build_context build_kwargs = _primitive_builder.build_kwargs +build_top_cell = _primitive_builder.build_top_cell discover_primitive_classes = _primitive_builder.discover_primitive_classes get_cell = _primitive_builder.get_cell safe_name = _primitive_builder.safe_name @@ -56,16 +63,10 @@ COLORS = { "reset": "\033[0m", } STATUS_STYLES = { - "info": ("▶", "cyan", "Info"), - "generated": ("✓", "green", "Generated"), - "skipped": ("○", "yellow", "Skipped"), - "failed": ("✗", "red", "Failed"), -} -STATUS_FALLBACK_SYMBOLS = { - "info": ">", - "generated": "+", - "skipped": "-", - "failed": "x", + "info": (">", "cyan", "Info"), + "generated": ("+", "green", "Generated"), + "skipped": ("-", "yellow", "Skipped"), + "failed": ("x", "red", "Failed"), } @@ -75,23 +76,8 @@ def colorize(text: str, color: str) -> str: return f"{COLORS[color]}{text}{COLORS['reset']}" -def can_print(text: str) -> bool: - encoding = sys.stdout.encoding or "utf-8" - if not encoding.lower().replace("-", "").startswith("utf"): - return text.isascii() - - try: - text.encode(encoding) - except UnicodeEncodeError: - return False - return True - - def status_item(status: str, count: Optional[int] = None) -> str: symbol, color, label = STATUS_STYLES[status] - if not can_print(symbol): - symbol = STATUS_FALLBACK_SYMBOLS[status] - suffix = f": {count}" if count is not None else "" return colorize(f"{symbol} {label}{suffix}", color) @@ -111,7 +97,7 @@ def apply_mxpic_colors() -> None: def remove_generated_pngs(img_root: Path) -> None: - """Remove generated images while preserving Markdown and other docs files.""" + """Remove previously generated image artifacts.""" if not img_root.exists(): return @@ -119,49 +105,44 @@ def remove_generated_pngs(img_root: Path) -> None: png_file.unlink() -def module_name_for(py_file: Path, src_root: Path, package_root: str) -> str: - relative_path = py_file.relative_to(src_root).with_suffix("") - return f"{package_root}.{'.'.join(relative_path.parts)}" +def image_subdir_for_module(module_name: str, package_root: str) -> Path: + module_suffix = module_name.removeprefix(f"{package_root}.") + parts = module_suffix.split(".")[:-1] + if not parts: + return Path() + return Path(*parts) def generate_image_for_class( target_dir: Path, class_name: str, component_class: type, - device_name: Optional[str] = None, - context: Optional[dict[str, Any]] = None, + device_name: str, + top_name: str, + context: dict[str, Any], ) -> str: """Instantiate one component class and save its cell image.""" - kwargs = build_kwargs(component_class, device_name, context) if context else {} + kwargs = build_kwargs(component_class, device_name, context) instance = component_class(**kwargs) - cell = get_cell(instance) if context else getattr(instance, "cell", None) - if cell is None: - return "skipped" + top_cell = build_top_cell(get_cell(instance), top_name) target_dir.mkdir(parents=True, exist_ok=True) image_path = target_dir / f"{class_name}.png" - nd.export_plt(path="", title=class_name, topcells=[cell]) + nd.export_plt(path="", title=top_name, topcells=[top_cell]) plt.savefig(image_path, bbox_inches="tight", dpi=300) plt.close() return "generated" def generate_component_images( - img_root: Path = Path("docs/source/images"), - src_root: Path = DEFAULT_SRC_ROOT / "primitives", - package_root: str = PRIMITIVES_PACKAGE, + img_root: Path = OUTPUT_IMAGE_ROOT, + package_root: str = PACKAGE_ROOT, ) -> dict[str, int]: print(colorize("mxPIC primitive image generation", "bold")) img_root = Path(img_root) - src_root = Path(src_root) counts = {"generated": 0, "skipped": 0, "failed": 0} - if not src_root.exists(): - print_status("failed", f"Source directory not found: {src_root}") - counts["failed"] += 1 - return counts - img_root.mkdir(parents=True, exist_ok=True) remove_generated_pngs(img_root) nd.clear_layout() @@ -172,16 +153,17 @@ def generate_component_images( for index, component_class in enumerate(discover_primitive_classes(), start=1): class_name = component_class.__name__ module_name = component_class.__module__ - module_suffix = module_name.removeprefix(f"{package_root}.") - target_dir = img_root / Path(*module_suffix.split(".")[:-1]) + target_dir = img_root / image_subdir_for_module(module_name, package_root) try: device_name = safe_name("IMG", index, class_name) + top_name = safe_name("IMGTOP", index, class_name) result = generate_image_for_class( target_dir, class_name, component_class, device_name=device_name, + top_name=top_name, context=context, ) except Exception as error: diff --git a/generate_handbook.py b/runs/generate_handbook.py similarity index 79% rename from generate_handbook.py rename to runs/generate_handbook.py index d0dc1c0..6c71901 100644 --- a/generate_handbook.py +++ b/runs/generate_handbook.py @@ -1,10 +1,16 @@ +from __future__ import annotations + import ast +import os from dataclasses import dataclass from pathlib import Path +from typing import Optional -DEFAULT_SRC_ROOT = Path("mxpic/components") -DEFAULT_DOCS_ROOT = Path("docs/source/mxpic/components") +ROOT = Path(__file__).resolve().parents[1] +DEFAULT_SRC_ROOT = ROOT / "mxpic" / "components" +DEFAULT_DOCS_ROOT = ROOT / "docs" / "source" / "mxpic" / "components" +DEFAULT_IMAGE_ROOT = ROOT / "docs" / "source" / "images" DEFAULT_PACKAGE_ROOT = "mxpic.components" @@ -90,7 +96,35 @@ def remove_generated_markdown(docs_root: Path) -> None: md_file.unlink() -def write_module_page(module: ModuleDoc, docs_root: Path) -> None: +def primitive_image_subdir(module: ModuleDoc) -> Optional[Path]: + parts = module.relative_path.with_suffix("").parts + if len(parts) < 3 or parts[0] != "primitives": + return None + + return Path(*parts[1:-1]) + + +def image_path_for_class( + module: ModuleDoc, + class_name: str, + image_root: Path, +) -> Optional[Path]: + image_subdir = primitive_image_subdir(module) + if image_subdir is None: + return None + + image_path = Path(image_root) / image_subdir / f"{class_name}.png" + if image_path.exists(): + return image_path + return None + + +def relative_image_reference(image_path: Path, md_file_path: Path) -> str: + relative_path = os.path.relpath(image_path, start=md_file_path.parent) + return relative_path.replace("\\", "/") + + +def write_module_page(module: ModuleDoc, docs_root: Path, image_root: Path) -> None: """Write a Markdown page for one Python module.""" md_file_path = Path(docs_root) / module.output_path md_file_path.parent.mkdir(parents=True, exist_ok=True) @@ -106,13 +140,14 @@ def write_module_page(module: ModuleDoc, docs_root: Path) -> None: ] for class_name in module.classes: - image_path = md_file_path.parent / f"{class_name}.png" + image_path = image_path_for_class(module, class_name, image_root) lines.extend([f"## {class_name}", "", "```{eval-rst}"]) - if image_path.exists(): + if image_path is not None: + image_reference = relative_image_reference(image_path, md_file_path) lines.extend( [ - f".. image:: {class_name}.png", + f".. image:: {image_reference}", " :align: center", " :width: 600px", "", @@ -185,7 +220,12 @@ def write_index_pages(modules: list[ModuleDoc], docs_root: Path) -> None: current = current.parent directories.add(current) - for directory in sorted(directories, key=lambda path: (len(path.parts), path.as_posix()), reverse=True): + sorted_dirs = sorted( + directories, + key=lambda path: (len(path.parts), path.as_posix()), + reverse=True, + ) + for directory in sorted_dirs: child_dirs = sorted( child for child in directories @@ -201,6 +241,7 @@ def write_index_pages(modules: list[ModuleDoc], docs_root: Path) -> None: def generate_markdown_handbook( src_root: Path = DEFAULT_SRC_ROOT, docs_root: Path = DEFAULT_DOCS_ROOT, + image_root: Path = DEFAULT_IMAGE_ROOT, package_root: str = DEFAULT_PACKAGE_ROOT, ) -> list[ModuleDoc]: """Generate Sphinx Markdown pages for mxpic component modules.""" @@ -208,6 +249,7 @@ def generate_markdown_handbook( src_root = Path(src_root) docs_root = Path(docs_root) + image_root = Path(image_root) if not src_root.exists(): raise FileNotFoundError(f"Source directory not found: {src_root}") @@ -217,7 +259,7 @@ def generate_markdown_handbook( modules = discover_modules(src_root=src_root, package_root=package_root) for module in modules: - write_module_page(module, docs_root) + write_module_page(module, docs_root, image_root) print(f"Generated docs for: {module.module_name}") write_index_pages(modules, docs_root) diff --git a/tests/technology_manifest_export.test.py b/runs/technology_manifest_export.test.py similarity index 100% rename from tests/technology_manifest_export.test.py rename to runs/technology_manifest_export.test.py diff --git a/tests/test_generate_handbook.py b/runs/test_generate_handbook.py similarity index 92% rename from tests/test_generate_handbook.py rename to runs/test_generate_handbook.py index 764d113..d619d6b 100644 --- a/tests/test_generate_handbook.py +++ b/runs/test_generate_handbook.py @@ -5,7 +5,7 @@ import unittest from pathlib import Path -ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) +ROOT = os.path.abspath(os.path.dirname(__file__)) sys.path.insert(0, ROOT) from generate_handbook import generate_markdown_handbook @@ -22,6 +22,7 @@ class GenerateHandbookTest(unittest.TestCase): root = Path(temp_dir) src_root = root / "components" docs_root = root / "docs" / "source" / "mxpic" / "components" + image_root = root / "docs" / "source" / "images" write_text( src_root / "primitives" / "pic" / "device.py", @@ -53,7 +54,7 @@ def _hidden_function(): write_text(src_root / "basic.py", "CONSTANT = 1\n") write_text(src_root / "primitives" / "__init__.py", "") - image_path = docs_root / "primitives" / "pic" / "ExistingImage.png" + image_path = image_root / "pic" / "ExistingImage.png" image_path.parent.mkdir(parents=True, exist_ok=True) image_path.write_bytes(b"fake png") write_text(docs_root / "old" / "stale.md", "# Stale\n") @@ -61,6 +62,7 @@ def _hidden_function(): modules = generate_markdown_handbook( src_root=src_root, docs_root=docs_root, + image_root=image_root, package_root="fake.components", ) @@ -77,7 +79,7 @@ def _hidden_function(): device_page.count(".. autoclass:: fake.components.primitives.pic.device.ExistingImage"), 1, ) - self.assertIn(".. image:: ExistingImage.png", device_page) + self.assertIn(".. image:: ../../../../images/pic/ExistingImage.png", device_page) self.assertIn(".. autoclass:: fake.components.primitives.pic.device.MissingImage", device_page) self.assertNotIn(".. image:: MissingImage.png", device_page) self.assertIn(".. autofunction:: fake.components.primitives.pic.device.public_function", device_page) @@ -102,6 +104,7 @@ def _hidden_function(): generate_markdown_handbook( src_root=src_root, docs_root=docs_root, + image_root=root / "docs" / "source" / "images", package_root="fake.components", ) diff --git a/tests/build_all_primitives.gds b/tests/build_all_primitives.gds deleted file mode 100644 index a89ebc1..0000000 Binary files a/tests/build_all_primitives.gds and /dev/null differ