diff --git a/masque/builder/builder.py b/masque/builder/builder.py index bc837f6..1fbbe88 100644 --- a/masque/builder/builder.py +++ b/masque/builder/builder.py @@ -192,27 +192,22 @@ class Builder(PortList): @wraps(Pattern.label) def label(self, *args, **kwargs) -> Self: self.pattern.label(*args, **kwargs) - return self @wraps(Pattern.ref) def ref(self, *args, **kwargs) -> Self: self.pattern.ref(*args, **kwargs) - return self @wraps(Pattern.polygon) def polygon(self, *args, **kwargs) -> Self: self.pattern.polygon(*args, **kwargs) - return self @wraps(Pattern.rect) def rect(self, *args, **kwargs) -> Self: self.pattern.rect(*args, **kwargs) - return self @wraps(Pattern.path) def path(self, *args, **kwargs) -> Self: self.pattern.path(*args, **kwargs) - return self def plug( self, diff --git a/masque/pattern.py b/masque/pattern.py index 0d98164..bb077be 100644 --- a/masque/pattern.py +++ b/masque/pattern.py @@ -87,7 +87,7 @@ class Pattern(PortList, AnnotatableImpl, Mirrorable): __slots__ = ( 'shapes', 'labels', 'refs', '_ports', # inherited - '_annotations', + '_offset', '_annotations', ) shapes: defaultdict[layer_t, list[Shape]] diff --git a/masque/shapes/shape.py b/masque/shapes/shape.py index 4263531..d65c05b 100644 --- a/masque/shapes/shape.py +++ b/masque/shapes/shape.py @@ -1,4 +1,4 @@ -from typing import Callable, TYPE_CHECKING, Any +from typing import Callable, Self, TYPE_CHECKING from abc import ABCMeta, abstractmethod import numpy @@ -32,12 +32,12 @@ class Shape(PositionableImpl, Rotatable, Mirrorable, Copyable, Scalable, """ __slots__ = () # Children should use AutoSlots or set slots themselves - #def __copy__(self) -> Self: - # cls = self.__class__ - # new = cls.__new__(cls) - # for name in self.__slots__: # type: str - # object.__setattr__(new, name, getattr(self, name)) - # return new + def __copy__(self) -> Self: + cls = self.__class__ + new = cls.__new__(cls) + for name in self.__slots__: # type: str + object.__setattr__(new, name, getattr(self, name)) + return new # # Methods (abstract)