From ee8f0151721243c6a6c86b98b98910146191d11f Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Tue, 12 May 2020 14:17:17 -0700 Subject: [PATCH] add subpattern_t type (generalizattion of SubPattern and GridRepetition) --- masque/__init__.py | 2 +- masque/file/gdsii.py | 4 ++-- masque/pattern.py | 8 ++++---- masque/subpattern.py | 5 +++++ 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/masque/__init__.py b/masque/__init__.py index dfb324b..c826d18 100644 --- a/masque/__init__.py +++ b/masque/__init__.py @@ -31,7 +31,7 @@ import pathlib from .error import PatternError, PatternLockedError from .shapes import Shape from .label import Label -from .subpattern import SubPattern +from .subpattern import SubPattern, subpattern_t from .repetition import GridRepetition from .pattern import Pattern diff --git a/masque/file/gdsii.py b/masque/file/gdsii.py index c0dcfc6..e283e98 100644 --- a/masque/file/gdsii.py +++ b/masque/file/gdsii.py @@ -18,7 +18,7 @@ import pathlib import gzip from .utils import mangle_name, make_dose_table -from .. import Pattern, SubPattern, GridRepetition, PatternError, Label, Shape +from .. import Pattern, SubPattern, GridRepetition, PatternError, Label, Shape, subpattern_t from ..shapes import Polygon, Path from ..utils import rotation_matrix_2d, get_bit, set_bit, vector2, is_scalar, layer_t from ..utils import remove_colinear_vertices, normalize_mirror @@ -467,7 +467,7 @@ def _aref_to_gridrep(element: gdsii.elements.ARef) -> GridRepetition: return gridrep -def _subpatterns_to_refs(subpatterns: List[Union[SubPattern, GridRepetition]] +def _subpatterns_to_refs(subpatterns: List[subpattern_t] ) -> List[Union[gdsii.elements.ARef, gdsii.elements.SRef]]: refs = [] for subpat in subpatterns: diff --git a/masque/pattern.py b/masque/pattern.py index eb25c97..ef6fc99 100644 --- a/masque/pattern.py +++ b/masque/pattern.py @@ -13,7 +13,7 @@ import numpy from numpy import inf # .visualize imports matplotlib and matplotlib.collections -from .subpattern import SubPattern +from .subpattern import SubPattern, subpattern_t from .repetition import GridRepetition from .shapes import Shape, Polygon from .label import Label @@ -40,7 +40,7 @@ class Pattern: labels: List[Label] """ List of all labels in this Pattern. """ - subpatterns: List[Union[SubPattern, GridRepetition]] + subpatterns: List[subpattern_t] """ List of all objects referencing other patterns in this Pattern. Examples are SubPattern (gdsii "instances") or GridRepetition (gdsii "arrays") Multiple objects in this list may reference the same Pattern object @@ -57,7 +57,7 @@ class Pattern: name: str = '', shapes: Sequence[Shape] = (), labels: Sequence[Label] = (), - subpatterns: Sequence[Union[SubPattern, GridRepetition]] = (), + subpatterns: Sequence[subpattern_t] = (), locked: bool = False, ): """ @@ -130,7 +130,7 @@ class Pattern: def subset(self, shapes_func: Callable[[Shape], bool] = None, labels_func: Callable[[Label], bool] = None, - subpatterns_func: Callable[[Union[SubPattern, GridRepetition]], bool] = None, + subpatterns_func: Callable[[subpattern_t], bool] = None, recursive: bool = False, ) -> 'Pattern': """ diff --git a/masque/subpattern.py b/masque/subpattern.py index 3f78d62..9ca0dc7 100644 --- a/masque/subpattern.py +++ b/masque/subpattern.py @@ -11,6 +11,8 @@ from numpy import pi from .error import PatternError, PatternLockedError from .utils import is_scalar, rotation_matrix_2d, vector2 +from .repetition import GridRepetition + if TYPE_CHECKING: from . import Pattern @@ -348,3 +350,6 @@ class SubPattern: dose = f' d{self.dose:g}' if self.dose != 1 else '' locked = ' L' if self.locked else '' return f'' + + +subpattern_t = Union[SubPattern, GridRepetition]