prefab 0.5.2__py3-none-any.whl → 1.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- prefab/__init__.py +12 -44
- prefab/__main__.py +8 -10
- prefab/compare.py +92 -0
- prefab/device.py +1233 -0
- prefab/geometry.py +302 -0
- prefab/models.py +114 -0
- prefab/read.py +293 -0
- {prefab-0.5.2.dist-info → prefab-1.0.1.dist-info}/METADATA +27 -31
- prefab-1.0.1.dist-info/RECORD +11 -0
- {prefab-0.5.2.dist-info → prefab-1.0.1.dist-info}/WHEEL +1 -1
- prefab/io.py +0 -214
- prefab/predictor.py +0 -231
- prefab/processor.py +0 -248
- prefab-0.5.2.dist-info/RECORD +0 -9
- {prefab-0.5.2.dist-info → prefab-1.0.1.dist-info}/licenses/LICENSE +0 -0
prefab/__init__.py
CHANGED
|
@@ -1,51 +1,19 @@
|
|
|
1
1
|
"""
|
|
2
|
-
The
|
|
3
|
-
device layouts, and utilities for interacting with GDSII files.
|
|
2
|
+
The prefab module predicts and corrects nanofabrication variations in photonic devices.
|
|
4
3
|
|
|
5
4
|
Usage:
|
|
6
5
|
import prefab as pf
|
|
7
6
|
"""
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
from
|
|
12
|
-
device_to_cell, # Convert a device layout to a gdstk cell
|
|
13
|
-
load_device_gds, # Load device from a GDSII file
|
|
14
|
-
load_device_img, # Load device from an image file
|
|
15
|
-
)
|
|
8
|
+
from . import compare, geometry, read
|
|
9
|
+
from .device import BufferSpec, Device
|
|
10
|
+
from .models import models
|
|
16
11
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# Functions to modify and manipulate device images
|
|
26
|
-
from prefab.processor import (
|
|
27
|
-
binarize, # Soft binarization of grayscale images
|
|
28
|
-
binarize_hard, # Hard binarization of grayscale images
|
|
29
|
-
calculate_prediction_uncertainty, # Computes prediction uncertainty for device images
|
|
30
|
-
generate_device_contour, # Generates contour of device images
|
|
31
|
-
mse, # Computes mean squared error between two images
|
|
32
|
-
remove_padding, # Trims excess padding from device images
|
|
33
|
-
ternarize, # Ternarization of grayscale images
|
|
34
|
-
zero_boundary, # Applies zero boundary to device images
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
__all__ = (
|
|
38
|
-
"device_to_cell",
|
|
39
|
-
"load_device_gds",
|
|
40
|
-
"load_device_img",
|
|
41
|
-
"correct",
|
|
42
|
-
"predict",
|
|
43
|
-
"binarize",
|
|
44
|
-
"binarize_hard",
|
|
45
|
-
"calculate_prediction_uncertainty",
|
|
46
|
-
"generate_device_contour",
|
|
47
|
-
"mse",
|
|
48
|
-
"remove_padding",
|
|
49
|
-
"ternarize",
|
|
50
|
-
"zero_boundary",
|
|
51
|
-
)
|
|
12
|
+
__all__ = [
|
|
13
|
+
"Device",
|
|
14
|
+
"BufferSpec",
|
|
15
|
+
"geometry",
|
|
16
|
+
"read",
|
|
17
|
+
"compare",
|
|
18
|
+
"models",
|
|
19
|
+
]
|
prefab/__main__.py
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""Provides the main entry point for the Prefab CLI."""
|
|
2
|
+
|
|
2
3
|
import argparse
|
|
3
4
|
import os
|
|
4
5
|
import threading
|
|
5
6
|
import webbrowser
|
|
7
|
+
from contextlib import suppress
|
|
6
8
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
7
9
|
|
|
8
10
|
import toml
|
|
9
11
|
|
|
10
12
|
|
|
11
13
|
def store_jwt_securely(jwt, refresh_token):
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
"""
|
|
14
|
+
"""Store the JWT and refresh token securely in a TOML file."""
|
|
15
|
+
|
|
15
16
|
prefab_file_path = os.path.expanduser("~/.prefab.toml")
|
|
16
17
|
with open(prefab_file_path, "w", encoding="utf-8") as toml_file:
|
|
17
18
|
toml.dump({"access_token": jwt, "refresh_token": refresh_token}, toml_file)
|
|
@@ -28,9 +29,7 @@ class GracefulHTTPServer(HTTPServer):
|
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
class CallbackHandler(BaseHTTPRequestHandler):
|
|
31
|
-
"""
|
|
32
|
-
A request handler for the HTTP server that handles the OAuth callback.
|
|
33
|
-
"""
|
|
32
|
+
"""A request handler for the HTTP server that handles the OAuth callback."""
|
|
34
33
|
|
|
35
34
|
def do_GET(self):
|
|
36
35
|
if self.path.startswith("/callback"):
|
|
@@ -56,6 +55,7 @@ class CallbackHandler(BaseHTTPRequestHandler):
|
|
|
56
55
|
|
|
57
56
|
|
|
58
57
|
def main():
|
|
58
|
+
"""Main function for the Prefab CLI."""
|
|
59
59
|
parser = argparse.ArgumentParser(description="Prefab CLI")
|
|
60
60
|
parser.add_argument("command", help="The command to run", choices=["setup"])
|
|
61
61
|
parser.add_argument(
|
|
@@ -68,10 +68,8 @@ def main():
|
|
|
68
68
|
webbrowser.open("https://www.prefabphotonics.com/token-flow")
|
|
69
69
|
httpd = GracefulHTTPServer(("localhost", args.port), CallbackHandler)
|
|
70
70
|
print("Started token authentication flow on the web browser...")
|
|
71
|
-
|
|
71
|
+
with suppress(KeyboardInterrupt):
|
|
72
72
|
httpd.serve_forever()
|
|
73
|
-
except KeyboardInterrupt:
|
|
74
|
-
pass
|
|
75
73
|
httpd.server_close()
|
|
76
74
|
else:
|
|
77
75
|
print(f"Command {args.command} not recognized.")
|
prefab/compare.py
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"""Provides functions to measure the similarity between devices."""
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
|
|
5
|
+
from .device import Device
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def mean_squared_error(device_a: Device, device_b: Device) -> float:
|
|
9
|
+
"""
|
|
10
|
+
Calculate the mean squared error (MSE) between two non-binarized devices.
|
|
11
|
+
|
|
12
|
+
Parameters
|
|
13
|
+
----------
|
|
14
|
+
device_a : Device
|
|
15
|
+
The first device.
|
|
16
|
+
device_b : Device
|
|
17
|
+
The second device.
|
|
18
|
+
|
|
19
|
+
Returns
|
|
20
|
+
-------
|
|
21
|
+
float
|
|
22
|
+
The mean squared error between two devices. A lower value indicates more
|
|
23
|
+
similarity.
|
|
24
|
+
"""
|
|
25
|
+
return np.mean((device_a.device_array - device_b.device_array) ** 2)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def intersection_over_union(device_a: Device, device_b: Device) -> float:
|
|
29
|
+
"""
|
|
30
|
+
Calculates the Intersection over Union (IoU) between two binary devices.
|
|
31
|
+
|
|
32
|
+
Parameters
|
|
33
|
+
----------
|
|
34
|
+
device_a : Device
|
|
35
|
+
The first device.
|
|
36
|
+
device_b : Device
|
|
37
|
+
The second device.
|
|
38
|
+
|
|
39
|
+
Returns
|
|
40
|
+
-------
|
|
41
|
+
float
|
|
42
|
+
The Intersection over Union between two devices. A value closer to 1 indicates
|
|
43
|
+
more similarity (more overlap).
|
|
44
|
+
"""
|
|
45
|
+
return np.sum(
|
|
46
|
+
np.logical_and(device_a.device_array, device_b.device_array)
|
|
47
|
+
) / np.sum(np.logical_or(device_a.device_array, device_b.device_array))
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def hamming_distance(device_a: Device, device_b: Device) -> int:
|
|
51
|
+
"""
|
|
52
|
+
Calculates the Hamming distance between two binary devices.
|
|
53
|
+
|
|
54
|
+
Parameters
|
|
55
|
+
----------
|
|
56
|
+
device_a : Device
|
|
57
|
+
The first device.
|
|
58
|
+
device_b : Device
|
|
59
|
+
The second device.
|
|
60
|
+
|
|
61
|
+
Returns
|
|
62
|
+
-------
|
|
63
|
+
int
|
|
64
|
+
The Hamming distance between two devices. A lower value indicates more
|
|
65
|
+
similarity.
|
|
66
|
+
"""
|
|
67
|
+
return np.sum(device_a.device_array != device_b.device_array)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def dice_coefficient(device_a: Device, device_b: Device) -> float:
|
|
71
|
+
"""
|
|
72
|
+
Calculates the Dice coefficient between two binary devices.
|
|
73
|
+
|
|
74
|
+
Parameters
|
|
75
|
+
----------
|
|
76
|
+
device_a : Device
|
|
77
|
+
The first device.
|
|
78
|
+
device_b : Device
|
|
79
|
+
The second device.
|
|
80
|
+
|
|
81
|
+
Returns
|
|
82
|
+
-------
|
|
83
|
+
float
|
|
84
|
+
The Dice coefficient between two devices. A value closer to 1 indicates more
|
|
85
|
+
similarity.
|
|
86
|
+
"""
|
|
87
|
+
intersection = 2.0 * np.sum(
|
|
88
|
+
np.logical_and(device_a.device_array, device_b.device_array)
|
|
89
|
+
)
|
|
90
|
+
size_a = np.sum(device_a.device_array)
|
|
91
|
+
size_b = np.sum(device_b.device_array)
|
|
92
|
+
return intersection / (size_a + size_b)
|