Improve type annotations for layer

lethe/HEAD
Jan Petykiewicz 4 years ago
parent 95ab0934b7
commit df179c9233

@ -20,7 +20,7 @@ import gzip
from .utils import mangle_name, make_dose_table from .utils import mangle_name, make_dose_table
from .. import Pattern, SubPattern, GridRepetition, PatternError, Label, Shape from .. import Pattern, SubPattern, GridRepetition, PatternError, Label, Shape
from ..shapes import Polygon, Path from ..shapes import Polygon, Path
from ..utils import rotation_matrix_2d, get_bit, set_bit, vector2, is_scalar from ..utils import rotation_matrix_2d, get_bit, set_bit, vector2, is_scalar, layer_t
from ..utils import remove_colinear_vertices, normalize_mirror from ..utils import remove_colinear_vertices, normalize_mirror
#TODO document how GDS rotation / mirror works #TODO document how GDS rotation / mirror works
@ -210,7 +210,7 @@ def dose2dtype(patterns: List[Pattern],
for shape in pat.shapes: for shape in pat.shapes:
data_type = dose_vals_list.index(shape.dose * pat_dose) data_type = dose_vals_list.index(shape.dose * pat_dose)
if is_scalar(shape.layer): if isinstance(shape.layer, int):
shape.layer = (shape.layer, data_type) shape.layer = (shape.layer, data_type)
else: else:
shape.layer = (shape.layer[0], data_type) shape.layer = (shape.layer[0], data_type)
@ -371,7 +371,7 @@ def read(stream: io.BufferedIOBase,
return patterns_dict, library_info return patterns_dict, library_info
def _mlayer2gds(mlayer): def _mlayer2gds(mlayer: layer_t) -> Tuple[int, int]:
""" Helper to turn a layer tuple-or-int into a layer and datatype""" """ Helper to turn a layer tuple-or-int into a layer and datatype"""
if is_scalar(mlayer): if is_scalar(mlayer):
layer = mlayer layer = mlayer

@ -4,10 +4,10 @@ import numpy
from numpy import pi from numpy import pi
from .error import PatternError, PatternLockedError from .error import PatternError, PatternLockedError
from .utils import is_scalar, vector2, rotation_matrix_2d
__author__ = 'Jan Petykiewicz' __author__ = 'Jan Petykiewicz'
from .utils import is_scalar, vector2, rotation_matrix_2d, layer_t
class Label: class Label:
@ -19,7 +19,7 @@ class Label:
_offset: numpy.ndarray _offset: numpy.ndarray
""" [x_offset, y_offset] """ """ [x_offset, y_offset] """
_layer: int or Tuple _layer: layer_t
""" Layer (integer >= 0, or 2-Tuple of integers) """ """ Layer (integer >= 0, or 2-Tuple of integers) """
_string: str _string: str
@ -56,14 +56,14 @@ class Label:
# layer property # layer property
@property @property
def layer(self) -> int or Tuple[int]: def layer(self) -> layer_t:
""" """
Layer number (int or tuple of ints) Layer number (int or tuple of ints)
""" """
return self._layer return self._layer
@layer.setter @layer.setter
def layer(self, val: int or List[int]): def layer(self, val: layer_t):
self._layer = val self._layer = val
# string property # string property
@ -81,7 +81,7 @@ class Label:
def __init__(self, def __init__(self,
string: str, string: str,
offset: vector2=(0.0, 0.0), offset: vector2=(0.0, 0.0),
layer: int=0, layer: layer_t = 0,
locked: bool = False): locked: bool = False):
self.unlock() self.unlock()
self.identifier = () self.identifier = ()

@ -6,10 +6,10 @@ from numpy import pi
from . import Shape, Polygon, normalized_shape_tuple, DEFAULT_POLY_NUM_POINTS from . import Shape, Polygon, normalized_shape_tuple, DEFAULT_POLY_NUM_POINTS
from .. import PatternError from .. import PatternError
from ..utils import is_scalar, vector2
__author__ = 'Jan Petykiewicz' __author__ = 'Jan Petykiewicz'
from ..utils import is_scalar, vector2, layer_t
class Arc(Shape): class Arc(Shape):
@ -158,7 +158,7 @@ class Arc(Shape):
offset: vector2 = (0.0, 0.0), offset: vector2 = (0.0, 0.0),
rotation: float = 0, rotation: float = 0,
mirrored: Tuple[bool] = (False, False), mirrored: Tuple[bool] = (False, False),
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
locked: bool = False): locked: bool = False):
self.unlock() self.unlock()

@ -5,10 +5,10 @@ from numpy import pi
from . import Shape, Polygon, normalized_shape_tuple, DEFAULT_POLY_NUM_POINTS from . import Shape, Polygon, normalized_shape_tuple, DEFAULT_POLY_NUM_POINTS
from .. import PatternError from .. import PatternError
from ..utils import is_scalar, vector2
__author__ = 'Jan Petykiewicz' __author__ = 'Jan Petykiewicz'
from ..utils import is_scalar, vector2, layer_t
class Circle(Shape): class Circle(Shape):
@ -46,7 +46,7 @@ class Circle(Shape):
poly_num_points: int = DEFAULT_POLY_NUM_POINTS, poly_num_points: int = DEFAULT_POLY_NUM_POINTS,
poly_max_arclen: float = None, poly_max_arclen: float = None,
offset: vector2 = (0.0, 0.0), offset: vector2 = (0.0, 0.0),
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
locked: bool = False): locked: bool = False):
self.unlock() self.unlock()

@ -6,10 +6,10 @@ from numpy import pi
from . import Shape, Polygon, normalized_shape_tuple, DEFAULT_POLY_NUM_POINTS from . import Shape, Polygon, normalized_shape_tuple, DEFAULT_POLY_NUM_POINTS
from .. import PatternError from .. import PatternError
from ..utils import is_scalar, rotation_matrix_2d, vector2
__author__ = 'Jan Petykiewicz' __author__ = 'Jan Petykiewicz'
from ..utils import is_scalar, rotation_matrix_2d, vector2, layer_t
class Ellipse(Shape): class Ellipse(Shape):
@ -93,7 +93,7 @@ class Ellipse(Shape):
offset: vector2 = (0.0, 0.0), offset: vector2 = (0.0, 0.0),
rotation: float = 0, rotation: float = 0,
mirrored: Tuple[bool] = (False, False), mirrored: Tuple[bool] = (False, False),
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
locked: bool = False): locked: bool = False):
self.unlock() self.unlock()

@ -6,7 +6,7 @@ from numpy import pi, inf
from . import Shape, normalized_shape_tuple, Polygon, Circle from . import Shape, normalized_shape_tuple, Polygon, Circle
from .. import PatternError from .. import PatternError
from ..utils import is_scalar, rotation_matrix_2d, vector2 from ..utils import is_scalar, rotation_matrix_2d, vector2, layer_t
from ..utils import remove_colinear_vertices, remove_duplicate_vertices from ..utils import remove_colinear_vertices, remove_duplicate_vertices
__author__ = 'Jan Petykiewicz' __author__ = 'Jan Petykiewicz'
@ -144,7 +144,7 @@ class Path(Shape):
offset: vector2 = (0.0, 0.0), offset: vector2 = (0.0, 0.0),
rotation: float = 0, rotation: float = 0,
mirrored: Tuple[bool] = (False, False), mirrored: Tuple[bool] = (False, False),
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
locked: bool = False, locked: bool = False,
) -> 'Path': ) -> 'Path':
@ -182,7 +182,7 @@ class Path(Shape):
offset: vector2 = (0.0, 0.0), offset: vector2 = (0.0, 0.0),
rotation: float = 0, rotation: float = 0,
mirrored: Tuple[bool] = (False, False), mirrored: Tuple[bool] = (False, False),
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
) -> 'Path': ) -> 'Path':
""" """

@ -5,7 +5,7 @@ from numpy import pi
from . import Shape, normalized_shape_tuple from . import Shape, normalized_shape_tuple
from .. import PatternError from .. import PatternError
from ..utils import is_scalar, rotation_matrix_2d, vector2 from ..utils import is_scalar, rotation_matrix_2d, vector2, layer_t
from ..utils import remove_colinear_vertices, remove_duplicate_vertices from ..utils import remove_colinear_vertices, remove_duplicate_vertices
__author__ = 'Jan Petykiewicz' __author__ = 'Jan Petykiewicz'
@ -74,7 +74,7 @@ class Polygon(Shape):
offset: vector2 = (0.0, 0.0), offset: vector2 = (0.0, 0.0),
rotation: float = 0.0, rotation: float = 0.0,
mirrored: Tuple[bool] = (False, False), mirrored: Tuple[bool] = (False, False),
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
locked: bool = False, locked: bool = False,
): ):
@ -100,7 +100,7 @@ class Polygon(Shape):
def square(side_length: float, def square(side_length: float,
rotation: float = 0.0, rotation: float = 0.0,
offset: vector2 = (0.0, 0.0), offset: vector2 = (0.0, 0.0),
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
) -> 'Polygon': ) -> 'Polygon':
""" """
@ -130,7 +130,7 @@ class Polygon(Shape):
ly: float, ly: float,
rotation: float = 0, rotation: float = 0,
offset: vector2 = (0.0, 0.0), offset: vector2 = (0.0, 0.0),
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
) -> 'Polygon': ) -> 'Polygon':
""" """
@ -164,7 +164,7 @@ class Polygon(Shape):
yctr: float = None, yctr: float = None,
ymax: float = None, ymax: float = None,
ly: float = None, ly: float = None,
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
) -> 'Polygon': ) -> 'Polygon':
""" """

@ -4,7 +4,7 @@ import copy
import numpy import numpy
from ..error import PatternError, PatternLockedError from ..error import PatternError, PatternLockedError
from ..utils import is_scalar, rotation_matrix_2d, vector2 from ..utils import is_scalar, rotation_matrix_2d, vector2, layer_t
__author__ = 'Jan Petykiewicz' __author__ = 'Jan Petykiewicz'
@ -29,7 +29,7 @@ class Shape(metaclass=ABCMeta):
_offset: numpy.ndarray _offset: numpy.ndarray
""" `[x_offset, y_offset]` """ """ `[x_offset, y_offset]` """
_layer: int or Tuple _layer: layer_t
""" Layer (integer >= 0 or tuple) """ """ Layer (integer >= 0 or tuple) """
_dose: float _dose: float
@ -162,14 +162,14 @@ class Shape(metaclass=ABCMeta):
# layer property # layer property
@property @property
def layer(self) -> int or Tuple[int]: def layer(self) -> layer_t:
""" """
Layer number (int or tuple of ints) Layer number (int or tuple of ints)
""" """
return self._layer return self._layer
@layer.setter @layer.setter
def layer(self, val: int or List[int]): def layer(self, val: layer_t):
self._layer = val self._layer = val
# dose property # dose property

@ -5,7 +5,7 @@ from numpy import pi, inf
from . import Shape, Polygon, normalized_shape_tuple from . import Shape, Polygon, normalized_shape_tuple
from .. import PatternError from .. import PatternError
from ..utils import is_scalar, vector2, get_bit, normalize_mirror from ..utils import is_scalar, vector2, get_bit, normalize_mirror, layer_t
# Loaded on use: # Loaded on use:
# from freetype import Face # from freetype import Face
@ -76,7 +76,7 @@ class Text(Shape):
offset: vector2 = (0.0, 0.0), offset: vector2 = (0.0, 0.0),
rotation: float = 0.0, rotation: float = 0.0,
mirrored: Tuple[bool] = (False, False), mirrored: Tuple[bool] = (False, False),
layer: int = 0, layer: layer_t = 0,
dose: float = 1.0, dose: float = 1.0,
locked: bool = False, locked: bool = False,
): ):

@ -8,6 +8,7 @@ import numpy
# Type definitions # Type definitions
vector2 = Union[numpy.ndarray, Tuple[float, float]] vector2 = Union[numpy.ndarray, Tuple[float, float]]
layer_t = Union[int, Tuple[int, int]]
def is_scalar(var: Any) -> bool: def is_scalar(var: Any) -> bool:

Loading…
Cancel
Save