diff --git a/.gitea/workflows/build_relase.yaml b/.gitea/workflows/build_relase.yaml index 2f009f2..58e6a98 100644 --- a/.gitea/workflows/build_relase.yaml +++ b/.gitea/workflows/build_relase.yaml @@ -28,6 +28,9 @@ jobs: # This generates the linux_x86_64.whl inside the dist/ folder run: python build_wheel.py + - name: Export Technology Manifests + run: python scripts/export_technology_manifests.py --dest exported_PDKs + - name: Inject Prebuilt Windows Wheel # This copies your locally-built Windows wheel into the dist/ folder # so they sit side-by-side right before the release is published. @@ -44,4 +47,4 @@ jobs: with: # This command scopes up everything currently sitting in the dist/ folder files: "dist/*.whl" - api_key: ${{ secrets.GITEA_TOKEN }} \ No newline at end of file + api_key: ${{ secrets.GITEA_TOKEN }} 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 deleted file mode 100644 index 491ca0a..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index dac594b..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index aa8c4ca..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/__init__.obj and /dev/null 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 deleted file mode 100644 index 8a90129..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/basic.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 84a4998..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/basic.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index b659dfd..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/basic.obj and /dev/null 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 deleted file mode 100644 index 0eda1be..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 63c466d..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index daea65d..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/__init__.obj and /dev/null 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 deleted file mode 100644 index 03d2452..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 4c74f0e..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 0674e08..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/EC_dual_layer_px3.obj and /dev/null 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 deleted file mode 100644 index d4db94b..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 4c47381..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 4dcda49..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/__init__.obj and /dev/null 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 deleted file mode 100644 index b876520..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 0cae340..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 75c77bf..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/beam_splitters.obj and /dev/null 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 deleted file mode 100644 index 2d5a441..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index a47fa35..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 73ac816..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/directional_couplers.obj and /dev/null 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 deleted file mode 100644 index 5c78782..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 9ac0e24..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 932bfef..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/grating_couplers.obj and /dev/null 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 deleted file mode 100644 index a2be3a8..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 7516686..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index c42b5cb..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/multimode_interferometers.obj and /dev/null 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 deleted file mode 100644 index b4f4a43..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 9500aae..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 3b910cf..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/components/primitives/spiral.obj and /dev/null 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 deleted file mode 100644 index a8d8b78..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 2a554f8..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 3f068f3..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/core/generate_license.obj and /dev/null 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 deleted file mode 100644 index d2821e7..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index c692579..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 1553ec8..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/core/license_check.obj and /dev/null 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 deleted file mode 100644 index eb1a690..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 4a56a97..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index da3661c..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/AMF.obj and /dev/null 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 deleted file mode 100644 index ecb4b9a..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index a192b49..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 9f27c68..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Foundry.obj and /dev/null 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 deleted file mode 100644 index 8dd3fe6..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 4dd3394..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index d8d9ae4..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/Silterra.obj and /dev/null 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 deleted file mode 100644 index 5f8e033..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 37cf49a..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 9953610..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/foundries/__init__.obj and /dev/null 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 deleted file mode 100644 index 33313ac..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index f5602e2..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 3c8349e..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/__init__.obj and /dev/null 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 deleted file mode 100644 index bb7abc4..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index bdc1455..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index a002d53..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/routing/routing.obj and /dev/null 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 deleted file mode 100644 index cf773ae..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/structures.cp39-win_amd64.exp and /dev/null 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 deleted file mode 100644 index 824be02..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/structures.cp39-win_amd64.lib and /dev/null 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 deleted file mode 100644 index 69e1944..0000000 Binary files a/build/temp.win-amd64-cpython-39/Release/mxpic/structures.obj and /dev/null differ diff --git a/mxpic/foundries/AMF.py b/mxpic/foundries/AMF.py deleted file mode 100644 index 17e6278..0000000 --- a/mxpic/foundries/AMF.py +++ /dev/null @@ -1,65 +0,0 @@ -import nazca as nd -from .Foundry import Foundry - -class AMF_Si220_Active(Foundry) : - - ## Generall parameters - STD_SMWG_WIDTH = 0.45 - SLAB_GROWTH = 2 - W_METAL_MIN = 5 - SPACING_HEATER_MIN = 2 - SPACING_METAL_MIN = 4 - W_HEATER_MIN = 3 - - lib_path = 'GDS_lib\\' - - # show_pins = False - - def __init__(self, layermap={ - - 'STRIP_COR' : ((10,0), 'RIB'), - - 'SRIB_COR' : ((11,0), 'GRAT'), - - 'RIB_COR' : ((12,0), 'SLAB'), - - 'SINWIN1' : ((53,0), 'SINWIN1'), - 'SINWG1' : ((54,0), 'SINWG1'), - - 'HEATER' : ((115,0), 'HTR'), - - 'VIA_S2M' : ((100,0), 'VIA1'), - 'VIA_H2M' : ((120,0), 'VIA2'), - 'VIA_M2M' : ((120,0), 'VIA2'), - - 'METAL' : ((105,0), 'METAL'), - 'METAL_2' : ((125,0), 'METAL_2'), - - 'PAD' : ((150,0), 'BONDPAD'), - - 'OPEN' : ((151,0), 'OX_OPEN'), - - 'ISL' : ((160,0), 'DT'), - - ### Active part - 'PP' : ((21,0), 'PCONT'), - 'PCONT' : ((21,0), 'PCONT'), - 'NP' : ((22,0), 'NCONT'), - 'NCONT' : ((22,0), 'NCONT'), - 'PLD' : ((23,0), 'PIM'), - 'NLD' : ((24,0), 'NIM'), - 'PLD2' : ((25,0), 'IPD'), - 'NLD2' : ((26,0), 'NPD'), - - 'GE' : ((40,0), 'GeEP'), - 'PPPGE' : ((20,0), 'PPPGE'), - 'NPPGE' : ((41,0), 'NPPGE'), - }): - super().__init__(layermap=layermap) - self._add_xsection_(xsection='strip',layers=['STRIP_COR'],growth=[0]) - self._add_xsection_(xsection='rib',layers=['STRIP_COR','RIB_COR'],growth=[0,3]) ## Slab waveguide - self._add_xsection_(xsection='rib_s',layers=['STRIP_COR','SRIB_COR'],growth=[0,4]) ## Slab waveguide - self._add_xsection_(xsection='isl',layers=['ISL'],growth=[0]) - self._add_xsection_(xsection='sn',layers=['SINWG1','SINWIN1'],growth=[0,21]) - - self._add_xsection_(xsection='pad',layers=['METAL_2','PAD'],growth=[0,-2.5]) ## DRC 4.2 - [AMF-QP-RND-006] diff --git a/mxpic/foundries/Silterra.py b/mxpic/foundries/Silterra.py index 60429f4..166ee6c 100644 --- a/mxpic/foundries/Silterra.py +++ b/mxpic/foundries/Silterra.py @@ -1,7 +1,7 @@ import nazca as nd from .Foundry import Foundry -class EOM1_2ML_CU(Foundry) : +class EOM1_2ML_CU_RDL(Foundry) : ## Generall parameters STD_SMWG_WIDTH = 0.45 @@ -68,4 +68,24 @@ class EOM1_2ML_CU(Foundry) : 'PD_SIPP' : ((100,140)), 'PD_SINP' : ((100,150)), }): + super().__init__(layermap=layermap) + + ## add cross sections + nd.add_xsection("strip") + nd.add_layer2xsection("strip",layer="WG_HM",growx=0,growy=0) + nd.add_layer2xsection("strip",layer="WG_STRIP",growx=4,growy=4) + + nd.add_xsection("rib_low") + nd.add_layer2xsection("rib_low",layer="WG_HM",growx=0,growy=0) + nd.add_layer2xsection("rib_low",layer="WG_SRIB",growx=3,growy=3) + nd.add_layer2xsection("rib_low",layer="WG_STRIP",leftedge=(-0.5,-3),rightedge=(-0.5,-3.5)) + nd.add_layer2xsection("rib_low",layer="WG_STRIP",leftedge=(0.5,3.5),rightedge=(0.5,3)) + + nd.add_xsection("metal_1") + nd.add_layer2xsection("metal_1",layer="UTM",growx=0,growy=0) + nd.add_layer2xsection("metal_1",layer="SSIN0",growx=2.5,growy=2.5) + + nd.add_xsection("metal_2") + nd.add_layer2xsection("metal_2",layer="UTM2",growx=0,growy=0) + nd.add_layer2xsection("metal_2",layer="SSIN1",growx=2.5,growy=2.5) \ No newline at end of file diff --git a/mxpic/foundries/__init__.py b/mxpic/foundries/__init__.py index f139e49..d3ca9ea 100644 --- a/mxpic/foundries/__init__.py +++ b/mxpic/foundries/__init__.py @@ -1,6 +1,5 @@ -from .AMF import AMF_Si220_Active -from .Silterra import EOM1_2ML_CU +from .Silterra import EOM1_2ML_CU_RDL diff --git a/mxpic_release/mxpic/__init__.pyi b/mxpic_release/mxpic/__init__.pyi deleted file mode 100644 index 8bee11a..0000000 --- a/mxpic_release/mxpic/__init__.pyi +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index 5e06c99..0000000 --- a/mxpic_release/mxpic/basic.pyi +++ /dev/null @@ -1,4 +0,0 @@ -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 deleted file mode 100644 index bbc20db..0000000 --- a/mxpic_release/mxpic/components/__init__.pyi +++ /dev/null @@ -1 +0,0 @@ -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 deleted file mode 100644 index c44bea9..0000000 --- a/mxpic_release/mxpic/components/primitives/EC_dual_layer_px3.pyi +++ /dev/null @@ -1,30 +0,0 @@ -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 deleted file mode 100644 index 1805c80..0000000 --- a/mxpic_release/mxpic/components/primitives/__init__.pyi +++ /dev/null @@ -1,5 +0,0 @@ -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 deleted file mode 100644 index 49b4cab..0000000 --- a/mxpic_release/mxpic/components/primitives/beam_splitters.pyi +++ /dev/null @@ -1,39 +0,0 @@ -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 deleted file mode 100644 index 051c101..0000000 --- a/mxpic_release/mxpic/components/primitives/directional_couplers.pyi +++ /dev/null @@ -1,141 +0,0 @@ -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 deleted file mode 100644 index d65f29d..0000000 --- a/mxpic_release/mxpic/components/primitives/grating_couplers.pyi +++ /dev/null @@ -1,121 +0,0 @@ -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 deleted file mode 100644 index 21aba9d..0000000 --- a/mxpic_release/mxpic/components/primitives/multimode_interferometers.pyi +++ /dev/null @@ -1,29 +0,0 @@ -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 deleted file mode 100644 index 7d77be3..0000000 --- a/mxpic_release/mxpic/components/primitives/spiral.pyi +++ /dev/null @@ -1,108 +0,0 @@ -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 deleted file mode 100644 index f8f63c2..0000000 --- a/mxpic_release/mxpic/core/generate_license.pyi +++ /dev/null @@ -1,3 +0,0 @@ -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 deleted file mode 100644 index ce59c57..0000000 --- a/mxpic_release/mxpic/core/license_check.pyi +++ /dev/null @@ -1 +0,0 @@ -def verify_license() -> None: ... diff --git a/mxpic_release/mxpic/foundries/AMF.pyi b/mxpic_release/mxpic/foundries/AMF.pyi deleted file mode 100644 index 2d2b2ba..0000000 --- a/mxpic_release/mxpic/foundries/AMF.pyi +++ /dev/null @@ -1,11 +0,0 @@ -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 deleted file mode 100644 index 76dbb0c..0000000 --- a/mxpic_release/mxpic/foundries/Foundry.pyi +++ /dev/null @@ -1,16 +0,0 @@ -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 deleted file mode 100644 index 689a483..0000000 --- a/mxpic_release/mxpic/foundries/Silterra.pyi +++ /dev/null @@ -1,11 +0,0 @@ -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 deleted file mode 100644 index 57b2a25..0000000 --- a/mxpic_release/mxpic/foundries/__init__.pyi +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 94cee78..0000000 --- a/mxpic_release/mxpic/routing/__init__.pyi +++ /dev/null @@ -1 +0,0 @@ -from .routing import * diff --git a/mxpic_release/mxpic/routing/routing.pyi b/mxpic_release/mxpic/routing/routing.pyi deleted file mode 100644 index eebfd59..0000000 --- a/mxpic_release/mxpic/routing/routing.pyi +++ /dev/null @@ -1,36 +0,0 @@ -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 deleted file mode 100644 index 52bc280..0000000 --- a/mxpic_release/mxpic/structures.pyi +++ /dev/null @@ -1,113 +0,0 @@ -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): ... diff --git a/scripts/__init__.py b/scripts/__init__.py new file mode 100644 index 0000000..65ffc1a --- /dev/null +++ b/scripts/__init__.py @@ -0,0 +1 @@ +"""Build and export helpers for mxpic.""" diff --git a/scripts/export_technology_manifests.py b/scripts/export_technology_manifests.py new file mode 100644 index 0000000..deeebe9 --- /dev/null +++ b/scripts/export_technology_manifests.py @@ -0,0 +1,137 @@ +import argparse +import os +from typing import Any, Dict + +import yaml + + +def build_silterra_eom1_manifest() -> Dict[str, Any]: + """Build the Silterra EOM1 manifest consumed by mxpic_EDA.""" + layers = { + "WG_HM": {"layer": 275, "datatype": 0}, + "WG_STRIP": {"layer": 101, "datatype": 251}, + "WG_LOWRIB": {"layer": 100, "datatype": 90}, + "WG_SRIB": {"layer": 100, "datatype": 90}, + "WG_HIGHRIB": {"layer": 232, "datatype": 0}, + "HEATER": {"layer": 29, "datatype": 30}, + "CT_SI": {"layer": 268, "datatype": 0}, + "CT_GE": {"layer": 35, "datatype": 0}, + "UTV": {"layer": 172, "datatype": 0}, + "RDL_VIA": {"layer": 194, "datatype": 0}, + "UTM": {"layer": 173, "datatype": 0}, + "UTM2": {"layer": 197, "datatype": 0}, + "RDL_MET": {"layer": 195, "datatype": 0}, + "PAD_ELE": {"layer": 100, "datatype": 170}, + "PAD_OPTICAL": {"layer": 100, "datatype": 160}, + "PAD_AL": {"layer": 145, "datatype": 0}, + "WG_N": {"layer": 263, "datatype": 0}, + "SiN_Rib_WG": {"layer": 63, "datatype": 30}, + "SSIN0": {"layer": 283, "datatype": 0}, + "SSIN1": {"layer": 289, "datatype": 0}, + "SSIN2": {"layer": 290, "datatype": 0}, + "SSIN3": {"layer": 291, "datatype": 0}, + "EXCLUSION": {"layer": 57, "datatype": 0}, + "SALICIDE": {"layer": 128, "datatype": 60}, + "DM_EXL": {"layer": 23, "datatype": 0}, + "DM_EXL_FE": {"layer": 23, "datatype": 40}, + "DM_EXL_BE": {"layer": 23, "datatype": 41}, + "OXIDE_FACET": {"layer": 90, "datatype": 0}, + "DT": {"layer": 404, "datatype": 0}, + "P": {"layer": 256, "datatype": 0}, + "N": {"layer": 257, "datatype": 0}, + "PP": {"layer": 258, "datatype": 0}, + "NP": {"layer": 259, "datatype": 0}, + "PPP": {"layer": 260, "datatype": 0}, + "NPP": {"layer": 261, "datatype": 0}, + "PD_SIPP": {"layer": 100, "datatype": 140}, + "PD_SINP": {"layer": 100, "datatype": 150}, + } + + return { + "schema_version": "1.0.0", + "foundry": "Silterra", + "technology": "EMO1_2ML_CU_Al_RDL", + "source_class": "mxpic.foundries.Silterra.EOM1_2ML_CU_RDL", + "constants": { + "STD_SMWG_WIDTH": 0.45, + "SLAB_GROWTH": 2, + "W_METAL_MIN": 5, + "SPACING_HEATER_MIN": 2, + "SPACING_METAL_MIN": 4, + "W_HEATER_MIN": 3, + }, + "layers": layers, + "routing_types": ["euler_bend", "standard_bend"], + "defaults": { + "xsection": "strip", + "family": "optical", + "width": 0.45, + "radius": 10, + "routing_type": "euler_bend", + }, + "xsections": { + "strip": { + "family": "optical", + "default_width": 0.45, + "default_radius": 10, + "layers": [ + {"layer": "WG_HM", "growx": 0, "growy": 0}, + {"layer": "WG_STRIP", "growx": 4, "growy": 4}, + ], + }, + "rib_low": { + "family": "optical", + "default_width": 0.45, + "default_radius": 10, + "layers": [ + {"layer": "WG_HM", "growx": 0, "growy": 0}, + {"layer": "WG_SRIB", "growx": 3, "growy": 3}, + {"layer": "WG_STRIP", "leftedge": [-0.5, -3], "rightedge": [-0.5, -3.5]}, + {"layer": "WG_STRIP", "leftedge": [0.5, 3.5], "rightedge": [0.5, 3]}, + ], + }, + "metal_1": { + "family": "electrical", + "default_width": 5, + "default_radius": 10, + "layers": [ + {"layer": "UTM", "growx": 0, "growy": 0}, + {"layer": "SSIN0", "growx": 2.5, "growy": 2.5}, + ], + }, + "metal_2": { + "family": "electrical", + "default_width": 5, + "default_radius": 10, + "layers": [ + {"layer": "UTM2", "growx": 0, "growy": 0}, + {"layer": "SSIN1", "growx": 2.5, "growy": 2.5}, + ], + }, + }, + } + + +def export_manifests(destination_root: str) -> None: + """Export supported technology manifests into an EDA PDK root.""" + manifest = build_silterra_eom1_manifest() + technology_dir = os.path.join(destination_root, manifest["foundry"], manifest["technology"]) + os.makedirs(technology_dir, exist_ok=True) + output_path = os.path.join(technology_dir, "technology.yml") + with open(output_path, "w", encoding="utf-8") as file: + yaml.safe_dump(manifest, file, sort_keys=False, allow_unicode=True) + + +def main() -> None: + parser = argparse.ArgumentParser(description="Export mxpic technology manifests for mxpic_EDA.") + parser.add_argument( + "--dest", + default=os.path.abspath(os.path.join(os.getcwd(), "..", "mxpic_EDAX", "mxpic", "PDKs")), + help="Destination mxpic_EDA PDK root.", + ) + args = parser.parse_args() + export_manifests(os.path.abspath(args.dest)) + + +if __name__ == "__main__": + main() diff --git a/tests/technology_manifest_export.test.py b/tests/technology_manifest_export.test.py new file mode 100644 index 0000000..c9649d2 --- /dev/null +++ b/tests/technology_manifest_export.test.py @@ -0,0 +1,39 @@ +import os +import sys +import tempfile +import unittest + +import yaml + +ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) +sys.path.insert(0, ROOT) + +from scripts.export_technology_manifests import build_silterra_eom1_manifest, export_manifests + + +class TechnologyManifestExportTest(unittest.TestCase): + def test_silterra_manifest_contains_route_xsections(self): + manifest = build_silterra_eom1_manifest() + self.assertEqual(manifest["foundry"], "Silterra") + self.assertEqual(manifest["technology"], "EMO1_2ML_CU_Al_RDL") + self.assertEqual(manifest["defaults"]["xsection"], "strip") + self.assertEqual(manifest["defaults"]["routing_type"], "euler_bend") + self.assertIn("standard_bend", manifest["routing_types"]) + self.assertEqual(manifest["xsections"]["strip"]["family"], "optical") + self.assertEqual(manifest["xsections"]["rib_low"]["family"], "optical") + self.assertEqual(manifest["xsections"]["metal_1"]["family"], "electrical") + self.assertEqual(manifest["xsections"]["metal_2"]["family"], "electrical") + self.assertIn("WG_STRIP", manifest["layers"]) + + def test_export_writes_eda_technology_yml(self): + with tempfile.TemporaryDirectory() as temp_dir: + export_manifests(temp_dir) + output = os.path.join(temp_dir, "Silterra", "EMO1_2ML_CU_Al_RDL", "technology.yml") + self.assertTrue(os.path.exists(output)) + with open(output, "r", encoding="utf-8") as file: + data = yaml.safe_load(file) + self.assertEqual(data["xsections"]["metal_1"]["family"], "electrical") + + +if __name__ == "__main__": + unittest.main()