diff --git a/README.md b/README.md index 9aedd71..226855f 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ This is the fast-track guide to contributing to **mxPIC**. Adherence to these ru ### 0. Installation dependencies - python 3.10.1 - nazca 0.5.13 +- build 1.4.4 - gdstk 1.0.0 - numpy 1.22.3 - pandas 1.3.3 @@ -16,15 +17,12 @@ This is the fast-track guide to contributing to **mxPIC**. Adherence to these ru - myst-parser 3.0.1 - sphinx-rtd-theme 3.1.0 -``` -pip install sphinx myst-parser sphinx-rtd-theme gdstk==1.0.0 -``` ## 1. File & architecture The repository have an archtecture like this. ``` -mxpic_forge/ +mxpic/ ├── primitives/ │ ├── edge_couplers/ │ │ └── EC_dual_layer_px3.py @@ -42,10 +40,8 @@ mxpic_forge/ ├── others/ ├── structures/ ├── routing/ -├── foundries/ -└── docs/ - └── source/ - └── conf.py +└── foundries/ + ``` ## 2. Annotation & Documentation @@ -84,6 +80,7 @@ The devices are divided into four major types, which is 4. Port information formatting The basic routing algorthium is based the information between nodes, which is the **pin** attribute inside each file. The formatting of **pin** name will be important. diff --git a/_test_.py b/_test_.py index 476ddc2..7f31b06 100644 --- a/_test_.py +++ b/_test_.py @@ -1,16 +1,20 @@ -# import mxpic as mx import mxpic as mx import nazca as nd -import matplotlib -matplotlib.use('Agg') -import matplotlib.pyplot as plt # <-- Add this import +import numpy as np -EC = mx.EC_dual_layer_px3(name="xxx",w_in=0.5,L_in=10,Ltp1=100,Ltp2=200,Ltp3=300) +w_teeth_SiN = 0.5*np.ones(30) +gap_teeth_SiN = 0.5*np.ones(30) -nd.export_plt(topcells=EC.cell,path="",title="test",filename="file.plt") -plt.savefig("test", bbox_inches='tight', dpi=300) -plt.close() -# import uuid -# mac = uuid.getnode() -# mc_addr = ':'.join(("%012X" % mac)[i:i+2] for i in range(0, 12, 2)) -# print(mc_addr) \ No newline at end of file +w_teeth_Si = 0.45*np.ones(30) +gap_teeth_Si = 0.45*np.ones(30) + + +tapeout = mx.foundries.Silterra.EOM1_2ML_CU() + +GC = mx.grating_couplers.GC_SiN_Si_Dual_Layer(name="test", + w_teeth_SiN=w_teeth_SiN,gap_teeth_SiN=gap_teeth_SiN, + w_teeth_Si=w_teeth_Si,gap_teeth_Si=gap_teeth_Si, + layer_Si_teeth="WG_HM",layer_Si_slab="WG_HIGHRIB", + layer_SiN_etch="SiN_Rib_WG",layer_SiN_slab="WG_N") + +nd.export_gds(topcells=GC.cell,filename="..\\test.gds") \ No newline at end of file diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.cp39-win_amd64.exp new file mode 100644 index 0000000..491ca0a Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.cp39-win_amd64.lib new file mode 100644 index 0000000..dac594b Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.obj new file mode 100644 index 0000000..aa8c4ca Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/basic.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/basic.cp39-win_amd64.exp new file mode 100644 index 0000000..8a90129 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/basic.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/basic.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/basic.cp39-win_amd64.lib new file mode 100644 index 0000000..84a4998 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/basic.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/basic.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/basic.obj new file mode 100644 index 0000000..b659dfd Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/basic.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.cp39-win_amd64.exp new file mode 100644 index 0000000..0eda1be Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.cp39-win_amd64.lib new file mode 100644 index 0000000..63c466d Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.obj new file mode 100644 index 0000000..daea65d Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.cp39-win_amd64.exp new file mode 100644 index 0000000..03d2452 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.cp39-win_amd64.lib new file mode 100644 index 0000000..4c74f0e Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.obj new file mode 100644 index 0000000..0674e08 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.cp39-win_amd64.exp new file mode 100644 index 0000000..d4db94b Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.cp39-win_amd64.lib new file mode 100644 index 0000000..4c47381 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.obj new file mode 100644 index 0000000..4dcda49 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.cp39-win_amd64.exp new file mode 100644 index 0000000..b876520 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.cp39-win_amd64.lib new file mode 100644 index 0000000..0cae340 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.obj new file mode 100644 index 0000000..75c77bf Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.cp39-win_amd64.exp new file mode 100644 index 0000000..2d5a441 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.cp39-win_amd64.lib new file mode 100644 index 0000000..a47fa35 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.obj new file mode 100644 index 0000000..73ac816 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.cp39-win_amd64.exp new file mode 100644 index 0000000..5c78782 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.cp39-win_amd64.lib new file mode 100644 index 0000000..9ac0e24 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.obj new file mode 100644 index 0000000..932bfef Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.cp39-win_amd64.exp new file mode 100644 index 0000000..a2be3a8 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.cp39-win_amd64.lib new file mode 100644 index 0000000..7516686 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.obj new file mode 100644 index 0000000..c42b5cb Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.cp39-win_amd64.exp new file mode 100644 index 0000000..b4f4a43 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.cp39-win_amd64.lib new file mode 100644 index 0000000..9500aae Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.obj new file mode 100644 index 0000000..3b910cf Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.cp39-win_amd64.exp new file mode 100644 index 0000000..a8d8b78 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.cp39-win_amd64.lib new file mode 100644 index 0000000..2a554f8 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.obj new file mode 100644 index 0000000..3f068f3 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.cp39-win_amd64.exp new file mode 100644 index 0000000..d2821e7 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.cp39-win_amd64.lib new file mode 100644 index 0000000..c692579 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.obj new file mode 100644 index 0000000..1553ec8 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.cp39-win_amd64.exp new file mode 100644 index 0000000..eb1a690 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.cp39-win_amd64.lib new file mode 100644 index 0000000..4a56a97 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.obj new file mode 100644 index 0000000..da3661c Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.cp39-win_amd64.exp new file mode 100644 index 0000000..ecb4b9a Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.cp39-win_amd64.lib new file mode 100644 index 0000000..a192b49 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.obj new file mode 100644 index 0000000..9f27c68 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.cp39-win_amd64.exp new file mode 100644 index 0000000..8dd3fe6 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.cp39-win_amd64.lib new file mode 100644 index 0000000..4dd3394 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.obj new file mode 100644 index 0000000..d8d9ae4 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.cp39-win_amd64.exp new file mode 100644 index 0000000..5f8e033 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.cp39-win_amd64.lib new file mode 100644 index 0000000..37cf49a Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.obj new file mode 100644 index 0000000..9953610 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.cp39-win_amd64.exp new file mode 100644 index 0000000..33313ac Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.cp39-win_amd64.lib new file mode 100644 index 0000000..f5602e2 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.obj new file mode 100644 index 0000000..3c8349e Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.cp39-win_amd64.exp new file mode 100644 index 0000000..bb7abc4 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.cp39-win_amd64.lib new file mode 100644 index 0000000..bdc1455 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.obj new file mode 100644 index 0000000..a002d53 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.obj differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/structures.cp39-win_amd64.exp b/build/temp.win-amd64-cpython-39/Release/mxpic/structures.cp39-win_amd64.exp new file mode 100644 index 0000000..cf773ae Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/structures.cp39-win_amd64.exp differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/structures.cp39-win_amd64.lib b/build/temp.win-amd64-cpython-39/Release/mxpic/structures.cp39-win_amd64.lib new file mode 100644 index 0000000..824be02 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/structures.cp39-win_amd64.lib differ diff --git a/build/temp.win-amd64-cpython-39/Release/mxpic/structures.obj b/build/temp.win-amd64-cpython-39/Release/mxpic/structures.obj new file mode 100644 index 0000000..69e1944 Binary files /dev/null and b/build/temp.win-amd64-cpython-39/Release/mxpic/structures.obj differ diff --git a/docs/build_images.py b/build_images.py similarity index 94% rename from docs/build_images.py rename to build_images.py index 7438f0d..5535301 100644 --- a/docs/build_images.py +++ b/build_images.py @@ -4,6 +4,7 @@ import importlib import inspect from pathlib import Path import matplotlib +import shutil matplotlib.use('Agg') import matplotlib.pyplot as plt @@ -43,6 +44,13 @@ def generate_component_images(img_root="images/components"): src_root = Path("mxpic/components") img_root = Path(img_root) + # 1. Delete the directory and all its contents + if img_root.exists() and img_root.is_dir(): + shutil.rmtree(img_root) + + # 2. Recreate the directory + img_root.mkdir(parents=True, exist_ok=True) + if not src_root.exists(): print(f"❌ Error: Source directory '{src_root}' not found.") sys.exit(1) diff --git a/docs/source/mxpic/components/primitives/ADC_STD_2x2.png b/docs/source/mxpic/components/primitives/ADC_STD_2x2.png new file mode 100644 index 0000000..74e800f Binary files /dev/null and b/docs/source/mxpic/components/primitives/ADC_STD_2x2.png differ diff --git a/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md b/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md deleted file mode 100644 index e10ec8d..0000000 --- a/docs/source/mxpic/components/primitives/EC_dual_layer_px3.md +++ /dev/null @@ -1,20 +0,0 @@ -# mxpic.components.primitives.EC_dual_layer_px3 - -```{eval-rst} -.. automodule:: mxpic.components.primitives.EC_dual_layer_px3 - :no-members: -``` - -## 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: - :show-inheritance: -``` - diff --git a/docs/source/mxpic/components/primitives/EC_dual_layer_px3.png b/docs/source/mxpic/components/primitives/EC_dual_layer_px3.png new file mode 100644 index 0000000..489d4fd Binary files /dev/null and b/docs/source/mxpic/components/primitives/EC_dual_layer_px3.png differ diff --git a/docs/source/mxpic/components/primitives/GC_STD_1D.png b/docs/source/mxpic/components/primitives/GC_STD_1D.png new file mode 100644 index 0000000..ccd07ce Binary files /dev/null and b/docs/source/mxpic/components/primitives/GC_STD_1D.png differ diff --git a/docs/source/mxpic/components/primitives/GC_STD_2D.png b/docs/source/mxpic/components/primitives/GC_STD_2D.png new file mode 100644 index 0000000..ba0bf2c Binary files /dev/null and b/docs/source/mxpic/components/primitives/GC_STD_2D.png differ diff --git a/docs/source/mxpic/components/primitives/MDM.png b/docs/source/mxpic/components/primitives/MDM.png index f571c40..4fc73ba 100644 Binary files a/docs/source/mxpic/components/primitives/MDM.png and b/docs/source/mxpic/components/primitives/MDM.png differ diff --git a/docs/source/mxpic/components/primitives/Spiral_Rect_STD.png b/docs/source/mxpic/components/primitives/Spiral_Rect_STD.png new file mode 100644 index 0000000..ecf9369 Binary files /dev/null and b/docs/source/mxpic/components/primitives/Spiral_Rect_STD.png differ 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 51361de..0000000 --- a/docs/source/mxpic/components/primitives/beam_splitters.md +++ /dev/null @@ -1,33 +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 168b974..0000000 --- a/docs/source/mxpic/components/primitives/directional_couplers.md +++ /dev/null @@ -1,98 +0,0 @@ -# mxpic.components.primitives.directional_couplers - -```{eval-rst} -.. automodule:: mxpic.components.primitives.directional_couplers - :no-members: -``` - -## 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: -``` - -## 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: -``` - -## DC - -```{eval-rst} -.. image:: DC.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.directional_couplers.DC - :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: -``` - -## MDM - -```{eval-rst} -.. image:: MDM.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.directional_couplers.MDM - :members: - :undoc-members: - :show-inheritance: -``` - -## 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: -``` - diff --git a/docs/source/mxpic/components/primitives/grating_couplers.md b/docs/source/mxpic/components/primitives/grating_couplers.md deleted file mode 100644 index 9d36fb0..0000000 --- a/docs/source/mxpic/components/primitives/grating_couplers.md +++ /dev/null @@ -1,111 +0,0 @@ -# mxpic.components.primitives.grating_couplers - -```{eval-rst} -.. automodule:: mxpic.components.primitives.grating_couplers - :no-members: -``` - -## FA - -```{eval-rst} -.. image:: FA.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.FA - :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: -``` - -## 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: -``` - -## 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: -``` - -## Grating_2D_Hole_3Rec - -```{eval-rst} -.. image:: Grating_2D_Hole_3Rec.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.Grating_2D_Hole_3Rec - :members: - :undoc-members: - :show-inheritance: -``` - -## Grating_2D_Hole_4Rec - -```{eval-rst} -.. image:: Grating_2D_Hole_4Rec.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.grating_couplers.Grating_2D_Hole_4Rec - :members: - :undoc-members: - :show-inheritance: -``` - -## 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: -``` - 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 5d3d385..0000000 --- a/docs/source/mxpic/components/primitives/multimode_interferometers.md +++ /dev/null @@ -1,33 +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/spiral.md b/docs/source/mxpic/components/primitives/spiral.md deleted file mode 100644 index 07096c1..0000000 --- a/docs/source/mxpic/components/primitives/spiral.md +++ /dev/null @@ -1,85 +0,0 @@ -# mxpic.components.primitives.spiral - -```{eval-rst} -.. automodule:: mxpic.components.primitives.spiral - :no-members: -``` - -## 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: -``` - -## 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 - -```{eval-rst} -.. image:: spiral.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.spiral.spiral - :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_rectangle - -```{eval-rst} -.. image:: spiral_rectangle.png - :align: center - :width: 600px - -.. autoclass:: mxpic.components.primitives.spiral.spiral_rectangle - :members: - :undoc-members: - :show-inheritance: -``` - diff --git a/docs/source/mxpic/components/primitives/spiral_rectangle.png b/docs/source/mxpic/components/primitives/spiral_rectangle.png new file mode 100644 index 0000000..c45a6b1 Binary files /dev/null and b/docs/source/mxpic/components/primitives/spiral_rectangle.png differ diff --git a/docs/generate_handbook.py b/generate_handbook.py similarity index 50% rename from docs/generate_handbook.py rename to generate_handbook.py index 874c987..a8b7aaa 100644 --- a/docs/generate_handbook.py +++ b/generate_handbook.py @@ -1,88 +1,9 @@ -# import os -# import shutil -# from pathlib import Path - -# basic_md_info = "\ -# .. mxpic_handbook documentation master file, created by\n\ -# sphinx-quickstart on Sun May 3 16:05:57 2026.\n\ -# You can adapt this file completely to your liking, but it should at least\n\ -# contain the root `toctree` directive.\n\n\ -# # Welcome to the automated documentation for the mxPIC silicon photonics library.\n\ -# ```{toctree}\n\ -# :maxdepth: 2\n\ -# :caption: Components:\n\n\ -# " - -# def generate_myst_docs(src_dir: str, docs_api_dir: str) -> None: -# """ -# Scans a Python package and generates MyST Markdown files for Sphinx autodoc. -# """ -# src_path = Path(src_dir).resolve() -# api_path = Path(docs_api_dir).resolve() - -# # Clean the old api directory to prevent dead links from deleted files -# if api_path.exists(): -# # shutil.rmtree(api_path) -# pass -# else : -# api_path.mkdir(parents=True, exist_ok=True) - -# package_name = src_path.name -# generated_files = [] - -# print(f"Scanning {package_name} for Python modules...") - -# index_info = basic_md_info -# # Recursively find all .py files -# for py_file in src_path.rglob("*.py"): -# # Skip init files and private/internal scripts if desired -# if py_file.name == "__init__.py" or py_file.name.startswith("_"): -# continue - -# # Convert file path to Python module format (e.g., mxpic.primitives.mzm) -# rel_path = py_file.relative_to(src_path.parent.parent) -# class_name = str(rel_path.with_suffix("")).replace(os.sep, ".") -# module_name = str(rel_path.with_suffix("")).replace(os.sep, "\\") -# index_md_name = str(rel_path.with_suffix("")).replace(os.sep, "/") - -# # Create the markdown file -# md_filename = api_path / f"{module_name}.md" - -# # MyST Markdown format using Sphinx autodoc directives -# content = f"# {module_name}\n \ -# ```{{eval-rst}}\n \ -# .. automodule:: {class_name}\n\ -# :members:\n\ -# :undoc-members:\n\ -# :show-inheritance:\n\ -# ```\n\ -# " -# ## Building .md file for each .py file -# try : -# try : os.makedirs(name=str(md_filename.parent.resolve())) -# except : pass - -# with open(file=str(md_filename.resolve()),mode="w") as md_file: -# md_file.write(content) -# print(f"Generated: {docs_api_dir}{module_name}.md") -# except Exception as e: -# print(e) - -# ## Writing information into the index.md file -# index_info = index_info + f"{index_md_name}\n" - -# with open(file=docs_api_dir+"index.md",mode="w") as md_file: -# md_file.write(index_info) - -# if __name__ == "__main__": -# generate_myst_docs(src_dir="mxpic\\components\\",docs_api_dir="mxpic\\docs\\source\\") - - import os import sys import importlib import inspect from pathlib import Path +import shutil def generate_markdown_handbook(): print("📝 Starting mxPIC Markdown Generation...") @@ -92,8 +13,12 @@ def generate_markdown_handbook(): # This should point to where your Sphinx .md files are stored docs_root = Path("docs/source/mxpic/components") - # We use absolute Sphinx paths for images (starts with / meaning docs/source root) - sphinx_image_root = "source/images/components" + # 1. Delete the directory and all its contents + if docs_root.exists() and docs_root.is_dir(): + shutil.rmtree(docs_root) + + # 2. Recreate the directory + docs_root.mkdir(parents=True, exist_ok=True) success_count = 0 diff --git a/mxpic/__init__.py b/mxpic/__init__.py index fda00b9..80e8fe2 100644 --- a/mxpic/__init__.py +++ b/mxpic/__init__.py @@ -6,7 +6,7 @@ from .core.license_check import verify_license verify_license() # If the check passes, the rest of the library loads -from .components import EC_dual_layer_px3,DC,DC_bend,DC_pX_3sg +from .components import grating_couplers,EC_dual_layer_px3 from .routing import Route from .foundries import * diff --git a/mxpic/components/primitives/EC_dual_layer_px3.py b/mxpic/components/primitives/EC_dual_layer_px3.py index 4fee37a..0fbb511 100644 --- a/mxpic/components/primitives/EC_dual_layer_px3.py +++ b/mxpic/components/primitives/EC_dual_layer_px3.py @@ -76,20 +76,10 @@ class EC_dual_layer_px3(): layer_dum_exl_be:str=None, angle_tile: float = 8, R_bend: float = 50, - sample_build = False, ): """""" - """ This is the instruction for building a sample """ - if (sample_build): - name = "EC_dual_layer_px3" - w_in = 0.8 - L_in = 15 - Ltp1 = 50 - Ltp2 = 150 - Ltp3 = 450 - - + """ This is the instruction for building a sample """ self.name = name if (self.name is None): self.instantiate = False else: self.instantiate = True diff --git a/mxpic/components/primitives/__init__.py b/mxpic/components/primitives/__init__.py index 2b61251..acd735a 100644 --- a/mxpic/components/primitives/__init__.py +++ b/mxpic/components/primitives/__init__.py @@ -3,4 +3,5 @@ from .EC_dual_layer_px3 import * from .directional_couplers import * from .beam_splitters import * from .multimode_interferometers import * -from .spiral import * \ No newline at end of file +from .spiral import * +from .grating_couplers import * \ No newline at end of file diff --git a/mxpic/components/primitives/directional_couplers.py b/mxpic/components/primitives/directional_couplers.py index 50bdfed..1b4ceb7 100644 --- a/mxpic/components/primitives/directional_couplers.py +++ b/mxpic/components/primitives/directional_couplers.py @@ -452,7 +452,7 @@ class ADC_STD_2x2: _dX_ = abs(pin_a1.x) else : - Ltp = np.max([_dX_-5,np.abs(self.wu0+err-self.wu_in)/np.tan(self.tp_angle/180*pi)]) + Ltp = np.max([-5,np.abs(self.wu0+err-self.wu_in)/np.tan(self.tp_angle/180*pi)]) Ltp = int(Ltp*20)*0.05 ## keep it in integer temp = nd.strt(xs=self.xs,length=5,width=self.wu0+err).put(0,vtx_upper_y[0]/2+vtx_upper_y[-1]/2,180,flip=0) pin_a1 = nd.taper(xs=self.xs,length=Ltp,width1=self.wu0+err,width2=self.wu_in).put().pin['b0'] diff --git a/mxpic/components/primitives/grating_couplers.py b/mxpic/components/primitives/grating_couplers.py index e2ec1a8..52a9109 100644 --- a/mxpic/components/primitives/grating_couplers.py +++ b/mxpic/components/primitives/grating_couplers.py @@ -394,172 +394,6 @@ class Grating_2D_Hole() : ) return ic -class Grating_2D_Hole_4Rec() : - """ - Assemble four identical 2D hole gratings into a rectangular array. - - Parameters - ---------- - grating_unit : Grating_2D_Hole - Pre-built grating instance supplying the unit cell. - mode_radius : float, optional - Radius of the target circular fiber mode in microns (default is 8). - cell_name : str or None, optional - Nazca cell name suffix; ``None`` uses "TwoD_Grating" (default is None). - show_pins : bool, optional - Draw Nazca stub markers on exported IO pins (default is False). - """ - def __init__(self, grating_unit, mode_radius=8, cell_name=None, show_pins=False) -> None: - self.gt_2D_class = grating_unit - self.cell_unit = grating_unit.cell - self.mode_radius = mode_radius - - # Calculate the field center location - # radius = np.sqrt(2)/2 * ( - # self.mode_radius + np.sqrt(2)/2*(grating_unit.w_gt/2-grating_unit.l_field_center) - - # np.sqrt(np.power(self.mode_radius, 2) - 1/2*np.power(grating_unit.w_gt/2-grating_unit.l_field_center, 2)) - # ) - # print("---------------------"+str(radius)+"------------------------------") - l_field_center = grating_unit.l_field_center - w_gt = grating_unit.w_gt - x0 = ( - 2*(w_gt/2-l_field_center)-np.sqrt( - 8*mode_radius**2 - 4 * (w_gt/2 - l_field_center)**2 - ) - ) / 4 - self.field_center = ( - x0 + mode_radius*np.cos(np.pi/4), - x0 + mode_radius*np.cos(np.pi/4), - 180 - ) - self.cell_unit._put_pin(name='g0', connect=self.field_center) - - self.show_pins = show_pins - self.cell_name = cell_name - self.cell = self.generate_gds() - - def generate_gds(self) : - if self.cell_name is not None : self.cell_name = "TwoD_Grating_" + self.cell_name - else : self.cell_name = "TwoD_Grating" - with nd.Cell(name=self.cell_name, instantiate=False) as ic : - gt_1 = self.cell_unit.put( - 'g0', self.mode_radius*np.cos(np.pi/4), self.mode_radius*np.sin(np.pi/4) - ) - gt_2 = self.cell_unit.put( - 'g0', self.mode_radius*np.cos(np.pi/4), -self.mode_radius*np.sin(np.pi/4), flip=True - ) - gt_3 = self.cell_unit.put( - 'g0', -self.mode_radius*np.cos(np.pi/4), -self.mode_radius*np.sin(np.pi/4), flip=True, flop=True - ) - gt_4 = self.cell_unit.put( - 'g0', -self.mode_radius*np.cos(np.pi/4), self.mode_radius*np.sin(np.pi/4), flip=False, flop=True - ) - '''Put OPEN and PATH region if necessary.''' - if nd.get_layer(layer="GC_OPEN") == "GC_OPEN" : - nd.Polygon( - points=nd.geom.circle(radius=self.mode_radius+20, N=int(np.floor((self.mode_radius+20)/0.1))), - layer="GC_OPEN" - ).put(0,0) - if nd.get_layer(layer="STRIP_CLD") == "STRIP_CLD" : - nd.Polygon( - points=nd.geom.circle(radius=self.mode_radius+10, N=int(np.floor((self.mode_radius+20)/0.1))), - layer="STRIP_CLD" - ).put(0,0) - ''' Put Pins ''' - nd.Pin(name='g1').put(gt_1.pin['g1']) - nd.Pin(name='g2').put(gt_1.pin['g2']) - nd.Pin(name='g3').put(gt_2.pin['g1']) - nd.Pin(name='g4').put(gt_2.pin['g2']) - nd.Pin(name='g5').put(gt_3.pin['g1']) - nd.Pin(name='g6').put(gt_3.pin['g2']) - nd.Pin(name='g7').put(gt_4.pin['g1']) - nd.Pin(name='g8').put(gt_4.pin['g2']) - nd.Pin(name='a0').put(gt_1.pin['g1'].x, 0, 0) - if self.show_pins : - nd.put_stub() - return ic - -class Grating_2D_Hole_3Rec() : - """ - Assemble three identical 2D hole gratings in triangular symmetry. - - Parameters - ---------- - grating_unit : Grating_2D_Hole - Source grating instance providing the layout cell. - mode_radius : float, optional - Radius of the circumscribed fiber mode in microns (default is 6.5). - cell_name : str or None, optional - Custom Nazca cell name suffix (default is None). - show_pins : bool, optional - Draw Nazca stub markers on exported IO pins (default is False). - """ - def __init__(self, grating_unit, mode_radius=6.5, cell_name=None, show_pins=False) -> None: - self.gt_2D_class = grating_unit - self.cell_unit = grating_unit.cell - self.mode_radius = mode_radius - self.cell_name = cell_name - - # Calculate the field center location - radius = np.sqrt(2)/2 * ( - self.mode_radius + np.sqrt(2)/2*(grating_unit.w_gt/2-grating_unit.l_field_center) - - np.sqrt(np.power(self.mode_radius, 2) - 1/2*np.power(grating_unit.w_gt/2-grating_unit.l_field_center, 2)) - ) - self.field_center = ( - radius*np.cos(np.pi/4), - radius*np.cos(np.pi/4), - 45 - ) - self.cell_unit._put_pin(name='g0', connect=self.field_center) - self.show_pins = show_pins - - self.cell = self.generate_gds() - - def generate_gds(self) : - if self.cell_name is not None : self.cell_name = "TwoD_Grating_" + self.cell_name - else : self.cell_name = "TwoD_Grating" - with nd.Cell(name=self.cell_name, instantiate=False) as ic : - rotation_angle = 2*np.pi/3*0 - gt_1 = self.cell_unit.put( - 'g0', - self.mode_radius*np.cos(rotation_angle), self.mode_radius*np.sin(rotation_angle), - 180 + rotation_angle*180/np.pi - ) - rotation_angle = 2*np.pi/3*1 - gt_2 = self.cell_unit.put( - 'g0', - self.mode_radius*np.cos(rotation_angle), self.mode_radius*np.sin(rotation_angle), - 180 + rotation_angle*180/np.pi - ) - rotation_angle = 2*np.pi/3*2 - gt_3 = self.cell_unit.put( - 'g0', - self.mode_radius*np.cos(rotation_angle), self.mode_radius*np.sin(rotation_angle), - 180 + rotation_angle*180/np.pi - ) - '''Put OPEN and PATH region if necessary.''' - if nd.get_layer(layer="GC_OPEN") == "GC_OPEN" : - nd.Polygon( - points=nd.geom.circle(radius=self.mode_radius+20, N=int(np.floor((self.mode_radius+20)/0.1))), - layer="GC_OPEN" - ).put(0,0) - if nd.get_layer(layer="STRIP_CLD") == "STRIP_CLD" : - nd.Polygon( - points=nd.geom.circle(radius=self.mode_radius+10, N=int(np.floor((self.mode_radius+20)/0.1))), - layer="STRIP_CLD" - ).put(0,0) - '''Put pins''' - nd.Pin(name='g1').put(gt_1.pin['g1']) - nd.Pin(name='g2').put(gt_1.pin['g2']) - nd.Pin(name='g3').put(gt_2.pin['g1']) - nd.Pin(name='g4').put(gt_2.pin['g2']) - nd.Pin(name='g5').put(gt_3.pin['g1']) - nd.Pin(name='g6').put(gt_3.pin['g2']) - if self.show_pins : - nd.put_stub() - return ic - - """ Renamed for simplification in 2023.04.02 """ class GC_STD_2D: """ @@ -632,14 +466,14 @@ class GC_STD_2D: Py:float=0.57, num_x:float=25, num_y:float=25, - Lx_taper:float = 50, - Ly_taper:float = 0, - Lx_end:float = 1, - Ly_end:float = 1, + 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, - Ly_port:float=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, @@ -926,18 +760,18 @@ class GC_STD_1D: w_wg : float = 0.5, etch_type :str = 'FETCH', xs_open :str=None, - L_taper :float = 10, - L_end :float = 2, - A_taper :float = 30, + 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 :float = 20, ### note, when Period and eta is defined as list, this is not usefull + 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, ### adding anti reflection pitches - L_AR: float = 2, + P_AR: float = 1.0, ### adding anti reflection pitches + L_AR: float = 2.0, ): self.name = name @@ -1276,3 +1110,133 @@ class FA: nd.put_stub(pinsize=3) self.cell = C +class GC_SiN_Si_Dual_Layer: + def __init__(self, + name:str=None, + w_teeth_SiN:'list|float' = 0.5, + gap_teeth_SiN:'list|float' = 0.5, + w_teeth_Si:'list|float' = 0.5, + gap_teeth_Si:'list|float' = 0.5, + ori_teeth_offset:float = 5.0, + n_teeth_Si:float=30, + n_teeth_SiN:float=30, + A_gc_taper:float=25.0, + R_teeth_ori_SiN:float=40.0, + R_teeth_ori_Si:float=40.0, + L_end_Si:float=0.2, + L_end_SiN:float=5.0, + + w_port : float = 0.9, + + A_anti_rfl:float = 4.0, + layer_SiN_slab:str=None, + layer_Si_slab:str=None, + layer_Si_teeth:str=None, + layer_SiN_teeth:str=None, + layer_SiN_etch:str=None, + layer_Si_etch:str=None, + layer_ox_open:str=None, + ): + + self.name = name + self.w_teeth_SiN = w_teeth_SiN + self.gap_teeth_SiN = gap_teeth_SiN + self.w_teeth_Si = w_teeth_Si + self.gap_teeth_Si = gap_teeth_Si + self.ori_teeth_offset = ori_teeth_offset + + self.n_teeth_SiN = n_teeth_SiN + self.n_teeth_Si = n_teeth_Si + + self.A_gc_taper = A_gc_taper + + self.w_port = w_port + + self.L_end_Si = L_end_Si + self.L_end_SiN = L_end_SiN + + self.A_anti_rfl = A_anti_rfl + + self.R_teeth_ori_SiN = R_teeth_ori_SiN + self.R_teeth_ori_Si = R_teeth_ori_Si + + self.layer_SiN_slab = layer_SiN_slab + self.layer_Si_slab = layer_Si_slab + self.layer_Si_teeth = layer_Si_teeth + self.layer_SiN_teeth = layer_SiN_teeth + self.layer_SiN_etch = layer_SiN_etch + self.layer_Si_etch = layer_Si_etch + self.layer_ox_open = layer_ox_open + + self.cell = self.generate_gds() + + def generate_gds(self): + """ creating instance cell or not """ + if (self.name is None) : self.instantiate = False + else : self.instantiate = True + + """ """ + if (isinstance(self.w_teeth_SiN,list) or isinstance(self.w_teeth_SiN,np.ndarray)): + n_teeth_SiN = len(self.w_teeth_SiN) + elif (isinstance(self.w_teeth_SiN,float)): + n_teeth_SiN = self.n_teeth_SiN + w_teeth_SiN = [w_teeth_SiN]*n_teeth_SiN + + """ """ + if (isinstance(self.w_teeth_Si,list) or isinstance(self.w_teeth_Si,np.ndarray)): + n_teeth_Si = len(self.w_teeth_Si) + elif (isinstance(self.w_teeth_Si,float)): + n_teeth_Si = self.n_teeth_Si + w_teeth_Si = [w_teeth_Si]*n_teeth_Si + + with nd.Cell(instantiate=self.instantiate, name=self.name) as C: + + """ Creating SiN layer grating """ + ## whole area where the grating area covered + L_gc = self.R_teeth_ori_SiN + self.L_end_SiN + sum(self.w_teeth_SiN) + sum(self.gap_teeth_SiN) + + w_box_gc = L_gc*np.sin(self.A_gc_taper/2*np.pi/180)*2 + L_box_gc = L_gc*np.cos(self.A_gc_taper/2*np.pi/180) + x_slab = [0,L_box_gc,L_gc+w_box_gc*np.sin(self.A_anti_rfl*np.pi/180),L_gc,L_box_gc,0] + y_slab = [self.w_port/2,w_box_gc/2,w_box_gc/2,-w_box_gc/2,-w_box_gc/2,-self.w_port/2] + + _my_polygon(layer_wg=self.layer_SiN_slab,vtx=np.c_[x_slab,y_slab]).put(0,0,0) + + # circle(radius=self.R_teeth_ori_SiN/2,angle=self.A_gc_taper,layer=self.layer_SiN_slab, + # width=self.R_teeth_ori_SiN).cell.put(0,0,-self.A_gc_taper/2) + + A_etch_ext = 4 + ## Placing teeth + r_in = self.R_teeth_ori_SiN + for idxT in range(0,n_teeth_SiN): + r_out = r_in + self.gap_teeth_SiN[idxT] + + circle(radius=(r_out+r_in)/2,angle=self.A_gc_taper+A_etch_ext,layer=self.layer_SiN_etch, + width=self.gap_teeth_Si[idxT]).cell.put(0,0,-self.A_gc_taper/2-A_etch_ext/2) + + r_in = r_out + self.w_teeth_SiN[idxT] + + """ Creating Si layer grating """ + + w_Si_slab = sum(self.w_teeth_Si)+sum(self.gap_teeth_Si) + R_Si_slab = self.R_teeth_ori_Si+w_Si_slab/2 + circle(radius=R_Si_slab,angle=self.A_gc_taper,layer=self.layer_Si_slab, + width=w_Si_slab).cell.put(0,0,-self.A_gc_taper/2) + + ## Placing teeth + r_in = self.R_teeth_ori_Si + for idxT in range(0,n_teeth_Si): + r_out = r_in + self.gap_teeth_Si[idxT] + + if (self.layer_Si_etch is not None): + circle(radius=(r_out+r_in)/2,angle=self.A_gc_taper+A_etch_ext,layer=self.layer_Si_etch, + width=self.gap_teeth_Si[idxT]).cell.put(0,0,-self.A_gc_taper/2-A_etch_ext/2) + elif (self.layer_Si_teeth is not None): + circle(radius=r_out+(self.w_teeth_Si[idxT])/2,angle=self.A_gc_taper,layer=self.layer_Si_teeth, + width=self.w_teeth_Si[idxT]).cell.put(0,0,-self.A_gc_taper/2) + + r_in = r_out + self.w_teeth_Si[idxT] + + return C + + diff --git a/mxpic/components/primitives/spiral.py b/mxpic/components/primitives/spiral.py index 28add01..9349f2b 100644 --- a/mxpic/components/primitives/spiral.py +++ b/mxpic/components/primitives/spiral.py @@ -565,7 +565,11 @@ class spiral_rectangle: print("WARNING: In , Dmin too small") D_port = self.Dmin - bend_sz[1]*2 - with nd.Cell(instantiate=True,name="wg_mid_cell"+self.name) as wg_mid_cell: + 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) diff --git a/mxpic/core/license_check.py b/mxpic/core/license_check.py index c53fed6..1df3cc0 100644 --- a/mxpic/core/license_check.py +++ b/mxpic/core/license_check.py @@ -15,6 +15,7 @@ _ENV_VAR_NAME = "LIC_MXPIC_OPTIHK_DIR" # Add your team's MAC addresses here. Use uppercase. _DEVELOPER_MACS = { "D4:54:8B:F1:46:49", # Qin Yue's Workstation + "28:92:00:C9:13:E5", # Qin Yue's in HKSTP } def _get_local_mac() -> str: diff --git a/mxpic_release/mxpic/__init__.pyi b/mxpic_release/mxpic/__init__.pyi new file mode 100644 index 0000000..8bee11a --- /dev/null +++ b/mxpic_release/mxpic/__init__.pyi @@ -0,0 +1,3 @@ +from .foundries import * +from .components import DC as DC, DC_bend as DC_bend, DC_pX_3sg as DC_pX_3sg, EC_dual_layer_px3 as EC_dual_layer_px3 +from .routing import Route as Route diff --git a/mxpic_release/mxpic/basic.pyi b/mxpic_release/mxpic/basic.pyi new file mode 100644 index 0000000..5e06c99 --- /dev/null +++ b/mxpic_release/mxpic/basic.pyi @@ -0,0 +1,4 @@ +def __cell_arg__(arg, arg_name, func_name): ... +def __list_convert__(var, name, func_name): ... +def __array_convert__(var, name, func_name, num: int = 1): ... +def __xs_exist__(xs, para_name, func_name): ... diff --git a/mxpic_release/mxpic/components/__init__.pyi b/mxpic_release/mxpic/components/__init__.pyi new file mode 100644 index 0000000..bbc20db --- /dev/null +++ b/mxpic_release/mxpic/components/__init__.pyi @@ -0,0 +1 @@ +from .primitives import * diff --git a/mxpic_release/mxpic/components/primitives/EC_dual_layer_px3.pyi b/mxpic_release/mxpic/components/primitives/EC_dual_layer_px3.pyi new file mode 100644 index 0000000..c44bea9 --- /dev/null +++ b/mxpic_release/mxpic/components/primitives/EC_dual_layer_px3.pyi @@ -0,0 +1,30 @@ +from _typeshed import Incomplete + +class EC_dual_layer_px3: + name: Incomplete + instantiate: bool + w_in: Incomplete + L_in: Incomplete + Ltp1: Incomplete + Ltp2: Incomplete + Ltp3: Incomplete + L_end: Incomplete + w_tip_core: Incomplete + w1_slab: Incomplete + w_tip_slab: Incomplete + w_mid_slab: Incomplete + w_box: Incomplete + w_box_end: Incomplete + L_box_end: Incomplete + w_DT: Incomplete + xs_SiN: Incomplete + layer_SiN_slab: Incomplete + layer_top_cover: Incomplete + layer_dum_exl_be: Incomplete + layer_DT: Incomplete + xs_Trench: Incomplete + angle_tile: Incomplete + R_bend: Incomplete + cell: Incomplete + def __init__(self, name: str = None, w_in: float = 1.0, L_in: float = 15, Ltp1: float = 100, Ltp2: float = 200, Ltp3: float = 400, L_end: float = 0, w_tip_core: float = 0.2, w1_slab: float = 0.6, w_tip_slab: float = 0.2, w_mid_slab: float = 0.45, w_box: float = 8, w_box_end: float = 12, L_box_end: float = 2, w_DT: float = 12, xs_SiN: str = 'sin', layer_SiN_slab: str = 'SiN_Rib_WG', layer_DT: str = 'OXIDE_FACET', xs_Trench: str = 'air_trench', layer_top_cover: str = 'PAD_OPTICAL', layer_dum_exl_be: str = None, angle_tile: float = 8, R_bend: float = 50) -> None: ... + def generate_gds(self): ... diff --git a/mxpic_release/mxpic/components/primitives/__init__.pyi b/mxpic_release/mxpic/components/primitives/__init__.pyi new file mode 100644 index 0000000..1805c80 --- /dev/null +++ b/mxpic_release/mxpic/components/primitives/__init__.pyi @@ -0,0 +1,5 @@ +from .directional_couplers import * +from .EC_dual_layer_px3 import * +from .beam_splitters import * +from .multimode_interferometers import * +from .spiral import * diff --git a/mxpic_release/mxpic/components/primitives/beam_splitters.pyi b/mxpic_release/mxpic/components/primitives/beam_splitters.pyi new file mode 100644 index 0000000..49b4cab --- /dev/null +++ b/mxpic_release/mxpic/components/primitives/beam_splitters.pyi @@ -0,0 +1,39 @@ +from ...structures import * +from ...foundries import * +import numpy as np +from ...basic import __cell_arg__ as __cell_arg__ +from ...routing import Route as Route +from _typeshed import Incomplete + +class YBranch: + name: Incomplete + instantiate: bool + w: Incomplete + L: Incomplete + res: Incomplete + R_att: Incomplete + A_att: Incomplete + w_port: Incomplete + xs: Incomplete + cell: Incomplete + 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: ... + def generate_gds(self, show_pins: bool = False, sharp_patch: bool = True): ... + +class Ybranch_3wg: + name: Incomplete + instantiate: bool + w0: Incomplete + w1: Incomplete + gap: Incomplete + Lcp: Incomplete + xs: Incomplete + w_wg: Incomplete + R0: Incomplete + angle: Incomplete + L_attach: Incomplete + L_in_tp: Incomplete + cell: Incomplete + L: Incomplete + 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) -> None: ... + def generate_gds(self, sharp_patch, err_asy: int = 0): ... + def generate_test_gds(self, gc, dX_gc2gc: int = 400, dY_gc2gc: int = 80, sharp_patch: bool = True, Rbend: int = 15): ... diff --git a/mxpic_release/mxpic/components/primitives/directional_couplers.pyi b/mxpic_release/mxpic/components/primitives/directional_couplers.pyi new file mode 100644 index 0000000..051c101 --- /dev/null +++ b/mxpic_release/mxpic/components/primitives/directional_couplers.pyi @@ -0,0 +1,141 @@ +from ...basic import __cell_arg__ as __cell_arg__ +from ...routing import Route as Route +from ...structures import Clothoid as Clothoid, circle as circle +from _typeshed import Incomplete + +class ring_bus_wg: + xs: Incomplete + R_cp: Incomplete + w_bus: Incomplete + dLc: Incomplete + dAc: Incomplete + w_wg: Incomplete + bend_DC: Incomplete + euler_transistion: Incomplete + dL_trans: Incomplete + dA_trans: Incomplete + R_max_trans: Incomplete + w_trans: Incomplete + R_max_anti: Incomplete + R_min_anti: Incomplete + A_anti: Incomplete + wg_Ltp: Incomplete + dL_p2p: Incomplete + res: Incomplete + end_patch: Incomplete + L: int + clothoid_order: Incomplete + cell: Incomplete + def __init__(self, xs: str = 'strip', R_cp: int = 20, w_bus: float = 0.5, bend_DC: bool = True, w_wg: float = 0.5, dLc: int = 10, dAc: int = 10, euler_transistion: bool = False, dL_trans: int = 10, dA_trans: int = 30, R_max_trans: int = 100, w_trans: float = 0.5, euler_anti_bend: bool = False, R_max_anti: int = 100, R_min_anti: int = 10, A_anti=None, res: float = 0.1, wg_Ltp: int = 5, dL_p2p=None, sharp_patch: bool = True, show_pins: bool = False, end_patch: bool = False, clothoid_order: int = 1) -> None: ... + w: Incomplete + sz: Incomplete + def generate_gds(self, sharp_patch, show_pins: bool = False): ... + +class ADC_STD_2x2: + name: Incomplete + instantiate: bool + wu0: Incomplete + xs: Incomplete + wu1: Incomplete + wu_in: Incomplete + wu_out: Incomplete + wd0: Incomplete + wd1: Incomplete + wd_in: Incomplete + wd_out: Incomplete + Lu: Incomplete + Ld: Incomplete + angle: Incomplete + g0: Incomplete + g1: Incomplete + sbend_type: Incomplete + Rmax: Incomplete + Rmin: Incomplete + sharp_patch: Incomplete + euler_points: Incomplete + res: Incomplete + Ru0: Incomplete + Ru1: Incomplete + Rd0: Incomplete + Rd1: Incomplete + tp_angle: Incomplete + cell: Incomplete + L: Incomplete + def __init__(self, name=None, xs: str = 'strip', wu0: float = 0.45, wu1: float = 0.61, wu_in: float = 0.45, wu_out: float = 0.8, wd0: float = 0.33, wd1: float = 0.2, wd_in: float = 0.45, wd_out: float = 0.8, Lu: int = 33, Ld: int = 33, angle: int = 20, g0: float = 0.2, g1: float = 0.2, sbend_type: str = 'euler', Rmax=None, Rmin: int = 5, Ru0: int = 0, Ru1: int = 20, Rd0: int = 20, Rd1: int = 0, tp_angle: int = 2, sharp_patch: bool = True, show_pins: bool = False, euler_points: int = 64, res: float = 0.1) -> None: ... + def generate_gds(self, err: int = 0, show_pins: bool = False): ... + err: Incomplete + def generate_err(self, err: float = 0.02): ... + def generate_test_gds(self, gc, dX_gc2gc: int = 400, dY_gc2gc: int = 80, sharp_patch: bool = True): ... + +class DC(ADC_STD_2x2): + 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) -> None: ... + def generate_test_gds(self, gc, dX_gc2gc: int = 300, dY_gc2gc: int = 40, sharp_patch: bool = True): ... + +class BS_tdc(ADC_STD_2x2): + 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') -> None: ... + +class MDM(ADC_STD_2x2): + wb0: Incomplete + wb1: Incomplete + w0: Incomplete + w1: Incomplete + w_wg: Incomplete + gap0: Incomplete + gap1: Incomplete + Lt_bus: Incomplete + Lt_cp: Incomplete + xs: Incomplete + R0: Incomplete + angle: Incomplete + symmetric_BUS: Incomplete + Rmin: Incomplete + L: Incomplete + 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) -> None: ... + def generate_test_gds(self, gc, dX_gc2gc: int = 300, dY_gc2gc: int = 40, sharp_patch: bool = True): ... + +class DC_bend: + name: Incomplete + instantiate: bool + w_in: Incomplete + w_out: Incomplete + gap: Incomplete + r_in: Incomplete + r_out: Incomplete + theta_arc: Incomplete + theta_ext: Incomplete + w_wg: Incomplete + xs_wg: Incomplete + sharp_patch: Incomplete + show_pins: Incomplete + cell: Incomplete + def __init__(self, name=None, w_in: float = 0.45, w_out: float = 0.45, gap: float = 0.2, r_in: int = 40, theta_arc: int = 30, w_wg: float = 0.45, theta_ext: int = 15, xs_wg: str = 'strip', sharp_patch: bool = True, show_pins: bool = False) -> None: ... + width: Incomplete + length: Incomplete + def generate_gds(self, cellname: str = ''): ... + def generate_test_gds(self, gc, dX_gc2gc: int = 300, dY_gc2gc: int = 40, sharp_patch: bool = True): ... + +class DC_pX_3sg: + name: Incomplete + instantiate: bool + xs_wg: Incomplete + Lc1: Incomplete + Lp1: Incomplete + Lc2: Incomplete + Lt: Incomplete + w_cp: Incomplete + dw: Incomplete + gap: Incomplete + R0: Incomplete + A: Incomplete + w_wg: Incomplete + sharp_patch: Incomplete + pX_type: Incomplete + port_symmetric: Incomplete + cell: Incomplete + cellU: Incomplete + cellD: Incomplete + L: Incomplete + length: Incomplete + 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) -> None: ... + def generate_gds(self, err: int = 0): ... + def generate_test_gds(self, gc, dX_gc2gc: int = 300, dY_gc2gc: int = 40, sharp_patch: bool = True): ... diff --git a/mxpic_release/mxpic/components/primitives/grating_couplers.pyi b/mxpic_release/mxpic/components/primitives/grating_couplers.pyi new file mode 100644 index 0000000..d65f29d --- /dev/null +++ b/mxpic_release/mxpic/components/primitives/grating_couplers.pyi @@ -0,0 +1,121 @@ +from ...basic import __cell_arg__ as __cell_arg__ +from ...routing import Route as Route +from ...structures import Clothoid as Clothoid, circle as circle, hole as hole +from _typeshed import Incomplete + +class Nano_ant: + w_wg: Incomplete + xs_wg: Incomplete + etch_type: str + vector: Incomplete + teeth_number: Incomplete + pitch: Incomplete + duty_cycle: Incomplete + taper_length: Incomplete + ant_length: Incomplete + width: Incomplete + max_theta: Incomplete + define_type: Incomplete + etch_depth: Incomplete + show_pins: Incomplete + cell: Incomplete + 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) -> None: ... + def generate_gds(self, sample_step: float = 0.1, cell_name: str = 'Nanoantenna'): ... + def generate_gds_positive(self, sample_step: float = 0.1): ... + def generate_gds_error(self) -> None: ... + +class Taper: + width1: Incomplete + width2: Incomplete + length: Incomplete + type: Incomplete + order: int + show_pins: Incomplete + cell: Incomplete + def __init__(self, width1: int = 4, width2: float = 0.45, length: int = 30, type: str = 'linear', show_pins: bool = False) -> None: ... + def generate_gds(self): ... + +class Grating_2D_Hole: + w_wg: Incomplete + w_gt: Incomplete + l_taper: Incomplete + type_taper: Incomplete + gt_vector: Incomplete + gt_num: Incomplete + gt_diameter: Incomplete + gt_layer: Incomplete + polysi_vector: Incomplete + polysi_num: Incomplete + polysi_diameter: Incomplete + polysi_layer: Incomplete + reflector_vector: Incomplete + l_field_center: Incomplete + cell: Incomplete + def __init__(self, w_wg: float = 0.5, w_gt: int = 5, l_taper: int = 30, type_taper: str = 'parabolic', gt_vector=[0.5, 0.5, 0.5, 0.5, 0.5], gt_diameter: float = 0.4, gt_layer: str = 'STRIP_COR', polysi_vector=[0.5, 0.5, 0.5, 0.5, 0.5], polysi_diameter: float = 0.4, polysi_layer: str = 'FCW_TRE', reflector_vector=[0.3, 0.3, 0.3, 0.3, 0.3, 0.3], l_field_center: int = 1) -> None: ... + reflector_num: Incomplete + def generate_gds(self): ... + +class GC_STD_2D: + name: Incomplete + instantiate: bool + num_x: Incomplete + num_y: Incomplete + Lx_taper: Incomplete + Ly_taper: Incomplete + Lx_end: Incomplete + Ly_end: Incomplete + Lx_side: Incomplete + Ly_side: Incomplete + Lx_port: Incomplete + Ly_port: Incomplete + xs_open: Incomplete + w_wg: Incomplete + xs_wg: Incomplete + etch_type: Incomplete + shape: Incomplete + hole_shape: Incomplete + Dx_hole: Incomplete + Dy_hole: Incomplete + Px: Incomplete + Py: Incomplete + P_AR: Incomplete + L_AR: Incomplete + show_pins: Incomplete + positive: bool + layer_etch: Incomplete + cell: Incomplete + 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) -> None: ... + def generate_negative(self): ... + def generate_positive(self): ... + def generate_test_gds(self, dX_gc2gc: int = 300): ... + +class GC_STD_1D: + name: Incomplete + instantiate: bool + xs_open: Incomplete + xs_wg: Incomplete + w_wg: Incomplete + L_taper: Incomplete + L_end: Incomplete + A_taper: Incomplete + show_pins: Incomplete + L_tail: Incomplete + positive: bool + Period: Incomplete + eta_etch: Incomplete + num: Incomplete + sector_gc: Incomplete + L_AR: Incomplete + P_AR: Incomplete + layer_etch: Incomplete + cell: Incomplete + 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, sector_gc: bool = True, show_pins: bool = False, L_tail: int = 2, P_AR: float = 1.0, L_AR: float = 2.0) -> None: ... + def generate_negative(self): ... + def generate_positive(self): ... + def generate_test_dev(self, dX_gc2gc): ... + +class FA: + pitch: Incomplete + number: Incomplete + cell: Incomplete + def __init__(self, fiber_coupler, pitch, number, show_pins: bool = False) -> None: ... diff --git a/mxpic_release/mxpic/components/primitives/multimode_interferometers.pyi b/mxpic_release/mxpic/components/primitives/multimode_interferometers.pyi new file mode 100644 index 0000000..21aba9d --- /dev/null +++ b/mxpic_release/mxpic/components/primitives/multimode_interferometers.pyi @@ -0,0 +1,29 @@ +from ...structures import * +from ...routing import Route as Route +from ...structures import Conchoid as Conchoid +from _typeshed import Incomplete +from turtle import shape as shape + +class MMI_ML: + name: Incomplete + instantiate: bool + L_arm: Incomplete + xs: Incomplete + w_arm: Incomplete + arm_sine_width: Incomplete + L_mmi: Incomplete + w_mmi: Incomplete + res: Incomplete + N_out: Incomplete + N_in: Incomplete + Dp_out: Incomplete + Dp_in: Incomplete + mmi_sine_width: Incomplete + cell: Incomplete + L: Incomplete + def __init__(self, name=None, L_arm=[10], w_arm=[0.45, 1.35], xs: str = 'strip', arm_sine_width: bool = False, L_mmi=[10], w_mmi=[5, 5], mmi_sine_width: bool = False, sharp_patch: bool = True, show_pins: bool = False, res: float = 0.01, N_out: int = 3, N_in: int = 1, Dp_out: float = 1.5, Dp_in: float = 1.5) -> None: ... + def generate_gds(self, sharp_patch, show_pins): ... + def generate_test_gds(self, gc, dX_gc2gc, dY_gc2gc, R_bend: int = 10, Xout_offset: int = 50): ... + +class MMI_STD(MMI_ML): + def __init__(self, name=None, N_out: int = 3, N_in: int = 1, L_arm: int = 10, w_wg: float = 0.45, w_port: float = 1.2, xs: str = 'strip', L_mmi: int = 10, w_mmi: int = 5, sharp_patch: bool = True, show_pins: bool = False, Dp_out: float = 1.5, Dp_in: float = 1.5) -> None: ... diff --git a/mxpic_release/mxpic/components/primitives/spiral.pyi b/mxpic_release/mxpic/components/primitives/spiral.pyi new file mode 100644 index 0000000..7d77be3 --- /dev/null +++ b/mxpic_release/mxpic/components/primitives/spiral.pyi @@ -0,0 +1,108 @@ +from ...structures import * +from ...foundries import * +import nazca as nd +from ...routing import Route as Route +from ...structures import Conchoid as Conchoid +from _typeshed import Incomplete +from scipy import optimize as optimize + +class spiral: + Dmin: Incomplete + Lmin: Incomplete + R_bend: Incomplete + shape: Incomplete + cycles: Incomplete + width: Incomplete + w_port: Incomplete + gap: Incomplete + xs: Incomplete + layer: Incomplete + name: Incomplete + instantiate: bool + port_angle: Incomplete + w_bend_center: Incomplete + Rmin_bend_center: Incomplete + Euler_bend: Incomplete + Rmin_euler: Incomplete + sharp_patch: Incomplete + w_bend_port: Incomplete + Ltp_port: Incomplete + cell_transition: Incomplete + res: Incomplete + cell: Incomplete + 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, 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: int = 10, res: float = 0.5, 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) -> None: ... + def __strt_with_taper__(self, width1, width2, xs, length, Ltp: int = 15, Lstart: int = 2): ... + Atilt: Incomplete + L: Incomplete + Ru: Incomplete + Rd: Incomplete + bend_cell: Incomplete + def generate_gds(self, show_pins): ... + +class spiral_rectangle: + Dmin: Incomplete + Lmin: Incomplete + Rmax_bend: Incomplete + Rmin_bend: Incomplete + wmin_bend: Incomplete + cycles: Incomplete + width: Incomplete + w_port: Incomplete + gap: Incomplete + xs: Incomplete + layer: Incomplete + Ltp: Incomplete + Lpatch: Incomplete + name: Incomplete + instantiate: bool + port_angle: Incomplete + sharp_patch: Incomplete + w_bend_port: Incomplete + Lport: Incomplete + cell_xs_transition: Incomplete + res: Incomplete + in_out_align: Incomplete + cell: Incomplete + 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, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, w_bend_port=None, Lport: int = 10, Ltp: int = 10, res: float = 0.5, cell_xs_transition=None, port_angle: float = 180, show_pins: bool = False, sharp_patch: bool = True, in_out_align: bool = True, Lpatch: float = 0.05, sample_build: bool = False) -> None: ... + def __strt_with_taper__(self, width1, width2, xs, length, Ltp: int = 15, Lstart: int = 2): ... + bend_cell: Incomplete + L: Incomplete + def generate_gds(self, show_pins): ... + +class Spiral_Rect_STD(spiral_rectangle): + 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: int = 10, in_out_align: bool = True, res: float = 0.5, cell_xs_transition=None, port_angle: float = 180, show_pins: bool = False, sharp_patch: bool = True) -> None: ... + +class spiral_circle: + Dmin: Incomplete + cycles: Incomplete + width: Incomplete + w_port: Incomplete + gap: Incomplete + xs: Incomplete + layer: Incomplete + name: Incomplete + instantiate: bool + port_angle: Incomplete + w_bend_center: Incomplete + Euler_Sbend: Incomplete + sharp_patch: Incomplete + Lport: Incomplete + rib2strip: Incomplete + res: Incomplete + strict_condition: Incomplete + R_ratio_mamnual: Incomplete + cell: Incomplete + def __init__(self, name: str = None, Dmin: float = 50, width: float = 2, w_port: float = 0.45, w_bend_center: float = 1, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, Lport: int = 10, res: float = 0.5, rib2strip: bool = True, port_angle: float = 180, Euler_Sbend: bool = False, show_pins: bool = False, sharp_patch: bool = True, strict_condition: bool = False, R_ratio_mamnual=None) -> None: ... + def opt_euler(self, R, R0): ... + Atilt: Incomplete + Rmax: Incomplete + L: Incomplete + Ru: Incomplete + Rd: Incomplete + def generate_gds(self, show_pins): ... + +class Spiral_Cicle_MM(spiral_circle): + def __init__(self, name: str = None, Dmin: float = 50, width: float = 2, w_port: float = 0.45, w_bend_center: float = 1, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, Lport: int = 10, res: float = 0.5, rib2strip: bool = True, port_angle: float = 180, show_pins: bool = False, sharp_patch: bool = True, strict_condition: bool = False) -> None: ... + +class Spiral_Cicle_STD(spiral_circle): + def __init__(self, name: str = None, Dmin: float = 50, width: float = 2, w_port: float = 0.45, gap: float = 1, cycles: float = 20, xs: str = 'strip', layer: str = None, Lport: int = 10, res: float = 0.5, rib2strip: bool = True, port_angle: float = 180, show_pins: bool = False, sharp_patch: bool = True, strict_condition: bool = False) -> None: ... diff --git a/mxpic_release/mxpic/core/generate_license.pyi b/mxpic_release/mxpic/core/generate_license.pyi new file mode 100644 index 0000000..f8f63c2 --- /dev/null +++ b/mxpic_release/mxpic/core/generate_license.pyi @@ -0,0 +1,3 @@ +SECRET_KEY: bytes + +def generate_license(mac_address: str, days_valid: int, output_file: str = 'mxpic.lic'): ... diff --git a/mxpic_release/mxpic/core/license_check.pyi b/mxpic_release/mxpic/core/license_check.pyi new file mode 100644 index 0000000..ce59c57 --- /dev/null +++ b/mxpic_release/mxpic/core/license_check.pyi @@ -0,0 +1 @@ +def verify_license() -> None: ... diff --git a/mxpic_release/mxpic/foundries/AMF.pyi b/mxpic_release/mxpic/foundries/AMF.pyi new file mode 100644 index 0000000..2d2b2ba --- /dev/null +++ b/mxpic_release/mxpic/foundries/AMF.pyi @@ -0,0 +1,11 @@ +from .Foundry import Foundry as Foundry + +class AMF_Si220_Active(Foundry): + STD_SMWG_WIDTH: float + SLAB_GROWTH: int + W_METAL_MIN: int + SPACING_HEATER_MIN: int + SPACING_METAL_MIN: int + W_HEATER_MIN: int + lib_path: str + def __init__(self, layermap=...) -> None: ... diff --git a/mxpic_release/mxpic/foundries/Foundry.pyi b/mxpic_release/mxpic/foundries/Foundry.pyi new file mode 100644 index 0000000..76dbb0c --- /dev/null +++ b/mxpic_release/mxpic/foundries/Foundry.pyi @@ -0,0 +1,16 @@ +from _typeshed import Incomplete + +class Foundry: + STD_SMWG_WIDTH: float + SLAB_GROWTH: int + W_METAL_MIN: int + SPACING_HEATER_MIN: int + SPACING_METAL_MIN: float + W_HEATER_MIN: int + W_VIA_H2M: float + SPACING_VIA_H2M: float + ISL_W_MIN: int + ISL_SP_MIN: int + show_pins: bool + layermap: Incomplete + def __init__(self, layermap=None) -> None: ... diff --git a/mxpic_release/mxpic/foundries/Silterra.pyi b/mxpic_release/mxpic/foundries/Silterra.pyi new file mode 100644 index 0000000..689a483 --- /dev/null +++ b/mxpic_release/mxpic/foundries/Silterra.pyi @@ -0,0 +1,11 @@ +from .Foundry import Foundry as Foundry + +class EOM1_2ML_CU(Foundry): + STD_SMWG_WIDTH: float + SLAB_GROWTH: int + W_METAL_MIN: int + SPACING_HEATER_MIN: int + SPACING_METAL_MIN: int + W_HEATER_MIN: int + lib_path: str + def __init__(self, layermap=...) -> None: ... diff --git a/mxpic_release/mxpic/foundries/__init__.pyi b/mxpic_release/mxpic/foundries/__init__.pyi new file mode 100644 index 0000000..57b2a25 --- /dev/null +++ b/mxpic_release/mxpic/foundries/__init__.pyi @@ -0,0 +1,2 @@ +from .AMF import AMF_Si220_Active as AMF_Si220_Active +from .Silterra import EOM1_2ML_CU as EOM1_2ML_CU diff --git a/mxpic_release/mxpic/routing/__init__.pyi b/mxpic_release/mxpic/routing/__init__.pyi new file mode 100644 index 0000000..94cee78 --- /dev/null +++ b/mxpic_release/mxpic/routing/__init__.pyi @@ -0,0 +1 @@ +from .routing import * diff --git a/mxpic_release/mxpic/routing/routing.pyi b/mxpic_release/mxpic/routing/routing.pyi new file mode 100644 index 0000000..eebfd59 --- /dev/null +++ b/mxpic_release/mxpic/routing/routing.pyi @@ -0,0 +1,36 @@ +from ..structures import * +import nazca as nd +from _typeshed import Incomplete + +def ic_exception(msg: str = '') -> None: ... + +class Route(nd.interconnects.Interconnect): + PCB: Incomplete + sharp_patch: Incomplete + Ltp_mm: Incomplete + width2_mm: Incomplete + MM_route: Incomplete + def __init__(self, radius=None, width=None, angle: int = 90, Ltp_mm: int = 10, width2_mm: float = 1.0, MM_route: bool = False, xs=None, layer=None, adapt_width: bool = False, adapt_xs: bool = False, instantiate: bool = False, pinstyle=None, offset=None, varname=None, doc: str = '', PCB: bool = False, modes=None, sharp_patch: bool = True) -> None: ... + def connPatch(self) -> None: ... + def rt_bend(self, width: int = 3, xs: str = 'strip', angle: int = 90, layer=None, pin=None): ... + def strt_mm(self, pin=None, width2=None, Ltp=None, width1=None, Lstart: float = 0.5, length=None, xs=None, arrow: bool = False): ... + def line_mm(self, length=None, width=None, xs=None, width_mm=None, Ltp=None): ... + def strt_mm_p2p(self, pin1=None, pin2=None, width2=None, Ltp=None, width1=None, Lstart: float = 0.5, length=None, xs=None, arrow: bool = False, name=None): ... + def bend_p2p(self, pin1=None, pin2=None, radius=None, width=None, xs=None, name=None, arrow: bool = False, width_mm=None, Ltp=None, sharp_path: bool = True): ... + def ubend_route(self, pin=None, offset: float = 20.0, radius=None, width=None, xs=None, length: int = 0, name=None, arrow: bool = False, balance: int = 0, end_angle: bool = False, width_mm=None, Ltp=None): ... + def sbend_route(self, radius=None, width=None, pin=None, xs=None, offset: int = 20, Ltot=None, length1: int = 0, length2: int = 0, name=None, arrow: bool = False, Amax: float = 90.0, original_function: bool = False): ... + def bend_strt_bend_p2p_mine(self, pin1=None, pin2=None, radius=None, radius1=None, radius2=None, width=None, xs=None, length1: int = 0, length2: int = 0, ictype: str = 'shortest', name=None, arrow: bool = False): ... + def bend_route(self, radius=None, angle=None, width=None, pin=None, xs=None, length1: float = 0.1, length2: float = 0.1, name=None, arrow: bool = False, offset=None, sharp_patch: bool = True, original_function: bool = False): ... + def bend_route_p2p(self, pin1=None, pin2=None, radius=None, width=None, xs=None, name=None, arrow: bool = False, original_function: bool = False): ... + def bend_mine(self, radius=None, angle=None, width=None, pin=None, xs=None, length1: int = 0, length2: int = 0, name=None, arrow: bool = False, offset=None, sharp_patch: bool = True): ... + def tube_mine(self, geo, showpins: bool = False, name=None, xs=None, arrow: bool = False, Ltp=None, width_mm=None, sharp_patch=None): ... + def strt_bend_strt_p2p_mine(self, pin1=None, pin2=None, radius=None, radius1=None, radius2=None, width=None, xs=None, length1: int = 0, length2: int = 0, ictype: str = 'shortest', name=None, arrow: bool = False, width_mm=None, Ltp=None): ... + def sbend_p2p_mine(self, pin1=None, pin2=None, width=None, radius=None, Lstart: int = 0, doFirst: int = 1, arrow: bool = False, width_mm=None, Ltp=None, sharp_patch: bool = False): ... + def sbend_p2p(self, pin1=None, pin2=None, width=None, radius=None, Amax: int = 90, xs=None, doStrFirst: int = 1, Lstart: int = 0, BendEndFlag: int = 1, ref=None, name=None, arrow: bool = False, bsb: bool = True, sharp_patch=None, width_mm=None, Ltp=None): ... + def bend_strt_bend_p2p(self, pin1=None, pin2=None, radius=None, radius1=None, radius2=None, width=None, xs=None, length1: int = 0, length2: int = 0, ictype: str = 'shortest', name=None, arrow: bool = True, width_mm=None, Ltp=None): ... + def ubend_p2p(self, pin1=None, pin2=None, radius=None, width=None, xs=None, length: float = 0.1, name=None, arrow: bool = False, balance: int = 0, end_angle: bool = False, original_function: bool = False, Ltp=None, width_mm=None): ... + def strt(self, length=None, width=None, pin=None, xs=None, edge1=None, edge2=None, edgepoints: int = 50, name=None, arrow: bool = False, gridpatch=None): ... + def taper(self, length=None, width1=None, width2=None, shift: int = 0, xs=None, pin=None, name=None, patch: bool = False, arrow: bool = False): ... + adapt_width: bool + def taper_p2p(self, pin1=None, pin2=None, width1=None, width2=None, xs=None, name=None, arrow: bool = False): ... + def strt_p2p(self, pin1=None, pin2=None, width=None, xs=None, name=None, arrow: bool = False): ... diff --git a/mxpic_release/mxpic/structures.pyi b/mxpic_release/mxpic/structures.pyi new file mode 100644 index 0000000..52bc280 --- /dev/null +++ b/mxpic_release/mxpic/structures.pyi @@ -0,0 +1,113 @@ +import numpy as np +from _typeshed import Incomplete + +class hole: + cell: Incomplete + def __init__(self, r_hole: float = 0.3, Dx_hole: float = 0.3, Dy_hole: float = 0.3, Lx_sq: int = 6, Ly_sq: int = 6, offset: int = 0, res: float = 0.05, xs: str = 'strip', layer=None, sharp_patch: bool = True, hole_shape: str = 'circle') -> None: ... + +class strt_round_courner: + cell: Incomplete + def __init__(self, width: int = 5, length: int = 10, layer=None, radius: int = 1, n_points: int = 64) -> None: ... + +class circle: + vtx: Incomplete + sz: Incomplete + w: Incomplete + cell: Incomplete + def __init__(self, radius: int = 10, width: float = 0.45, theta_start: int = 0, theta_stop: int = 360, res: float = 0.05, angle=None, xs: str = 'strip', layer=None, sharp_patch: bool = True, y_cut=None) -> None: ... + +class mx_bend: + sz: Incomplete + w: Incomplete + cell: Incomplete + def __init__(self, radius: int = 10, width: float = 0.45, theta_start: int = 0, theta_stop: int = 360, res: float = 0.05, angle=None, xs: str = 'strip', layer=None, sharp_patch: bool = True) -> None: ... + +class Elipse_dual: + ORx: Incomplete + ORy: Incomplete + IRx: Incomplete + IRy: Incomplete + offset_X: Incomplete + offset_Y: Incomplete + xs: Incomplete + layer: Incomplete + res: Incomplete + theta_start: Incomplete + theta_stop: Incomplete + y_cut: Incomplete + cell: Incomplete + wa: Incomplete + wb: Incomplete + def __init__(self, ORx: float, ORy: float, IRx: float, IRy: float, offset_X: float = 0, offset_Y: float = 0, xs: str = None, layer: str = None, theta_start: float = 0, theta_stop: float = 360, sharp_patch: bool = True, res: float = 0.001, y_cut=None) -> None: ... + sz: Incomplete + def generate_gds(self, sharp_patch): ... + +class Elipse: + La: Incomplete + Lb: Incomplete + wa: Incomplete + wb: Incomplete + offset_a: Incomplete + offset_b: Incomplete + type: Incomplete + layer: Incomplete + xs: Incomplete + theta_start: Incomplete + theta_stop: Incomplete + res: Incomplete + cell: Incomplete + def __init__(self, La=None, Lb=None, wa=None, wb=None, offset_a: int = 0, offset_b: int = 0, type: str = 'center', width_type: str = 'sine', layer=None, xs=None, theta_start: int = 0, theta_stop: int = 360, res: float = 0.001, sharp_patch: bool = False, show_pins: bool = False) -> None: ... + sz: Incomplete + def generate_gds(self, sharp_patch, show_pins): ... + +class Conchoid: + Atilt: Incomplete + L: Incomplete + cell: Incomplete + vtx_center: Incomplete + vtx: Incomplete + K_end: Incomplete + R_end: Incomplete + def __init__(self, R0, kR, T, w, layer, w_end=None, res: float = 0.1, final_flat=None, begin_flat=None, xs=None) -> None: ... + +class Clothoid: + name: Incomplete + R: Incomplete + A: Incomplete + width_type: Incomplete + spiral_order: Incomplete + dL_cal: Incomplete + xs: Incomplete + layer: Incomplete + dL_wg: Incomplete + x: Incomplete + y: Incomplete + L: Incomplete + L0: Incomplete + theta: Incomplete + vtx_center: Incomplete + end_patch: Incomplete + sz: Incomplete + n_points: Incomplete + w: Incomplete + cell: Incomplete + def __init__(self, name: str = None, R: list | np.ndarray = [10, 20], w: list | np.ndarray | float = [0.4, 0.5], A: list | np.ndarray = [0, 45], width_type: str = 'sine', spiral_order: float | list = 1, Rmax: float = 10000, dL_cal: float = 0.001, dL_wg: float = 0.1, xs: str = 'strip', layer: str = None, sharp_patch: bool = True, end_patch: bool = True, show_pins: bool = False) -> None: ... + instantiate: bool + vtx: Incomplete + sz_p2p: Incomplete + def generate_gds(self, sharp_patch, show_pins): ... + +class Racetrack: + dLx: Incomplete + R_bend: Incomplete + dLy: Incomplete + xs: Incomplete + layer: Incomplete + bend_cell: Incomplete + A_bend: Incomplete + w: Incomplete + w_crack: float + cell: Incomplete + def __init__(self, bend_cell=None, xs: str = 'strip', layer=None, R_bend: int = 10, w: float = 0.5, dLx: int = 100, dLy: int = 100, res: float = 0.001) -> None: ... + sz: Incomplete + def generate_gds(self): ...