get rid of NamedPattern in favor of just returning a tuple

master
jan 1 year ago
parent 9115371b19
commit cbfbdf66a1

@ -32,7 +32,7 @@ from .error import MasqueError, PatternError, LibraryError, BuildError
from .shapes import Shape, Polygon, Path, Circle, Arc, Ellipse from .shapes import Shape, Polygon, Path, Circle, Arc, Ellipse
from .label import Label from .label import Label
from .ref import Ref from .ref import Ref
from .pattern import Pattern, NamedPattern from .pattern import Pattern
from .library import ( from .library import (
Library, MutableLibrary, Library, MutableLibrary,

@ -6,7 +6,7 @@ import numpy
from numpy import pi from numpy import pi
from numpy.typing import ArrayLike from numpy.typing import ArrayLike
from ..pattern import Pattern, NamedPattern from ..pattern import Pattern
from ..ref import Ref from ..ref import Ref
from ..library import MutableLibrary, Tree from ..library import MutableLibrary, Tree
from ..error import PortError, BuildError from ..error import PortError, BuildError
@ -236,7 +236,7 @@ class Builder(PortList):
def plug( def plug(
self, self,
other: Abstract | str | NamedPattern, other: Abstract | str,
map_in: dict[str, str], map_in: dict[str, str],
map_out: dict[str, str | None] | None = None, map_out: dict[str, str | None] | None = None,
*, *,
@ -337,7 +337,7 @@ class Builder(PortList):
def place( def place(
self, self,
other: Abstract | str | NamedPattern, other: Abstract | str,
*, *,
offset: ArrayLike = (0, 0), offset: ArrayLike = (0, 0),
rotation: float = 0, rotation: float = 0,

@ -26,7 +26,7 @@ from .label import Label
from .abstract import Abstract from .abstract import Abstract
if TYPE_CHECKING: if TYPE_CHECKING:
from .pattern import Pattern, NamedPattern from .pattern import Pattern
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -490,22 +490,21 @@ class MutableLibrary(Library, MutableMapping[str, 'Pattern'], metaclass=ABCMeta)
ref.target = new_target ref.target = new_target
return self return self
def create(self, name: str) -> 'NamedPattern': def mkpat(self, name: str) -> tuple[str, 'Pattern']:
""" """
Convenience method to create an empty pattern, choose a name Convenience method to create an empty pattern, add it to the library,
for it, add it with that name, and return both the pattern and name. and return both the pattern and name.
Args: Args:
base_name: Prefix used when naming the pattern name: Name for the pattern
Returns: Returns:
(name, pattern) tuple (name, pattern) tuple
""" """
from .pattern import NamedPattern from .pattern import Pattern
#name = self.get_name(base_name) pat = Pattern()
npat = NamedPattern(name) self[name] = pat
self[name] = npat return pat
return npat
def add( def add(
self, self,
@ -865,8 +864,6 @@ class WrapLibrary(MutableLibrary):
if callable(value): if callable(value):
value = value() value = value()
elif hasattr(value, 'as_pattern'):
value = cast('NamedPattern', value).as_pattern() # don't want to carry along NamedPattern instances
else: else:
value = value value = value
self.mapping[key] = value self.mapping[key] = value
@ -1045,7 +1042,7 @@ class Tree(MutableLibrary):
def __init__( def __init__(
self, self,
top: 'str | NamedPattern', top: str,
library: MutableLibrary | None = None library: MutableLibrary | None = None
) -> None: ) -> None:
self.top = top if isinstance(top, str) else top.name self.top = top if isinstance(top, str) else top.name

@ -700,54 +700,3 @@ class Pattern(PortList, AnnotatableImpl, Mirrorable):
pyplot.xlabel('x') pyplot.xlabel('x')
pyplot.ylabel('y') pyplot.ylabel('y')
pyplot.show() pyplot.show()
class NamedPattern(Pattern):
"""
TODO: Document NamedPattern
"""
__slots__ = ('_name',)
_name: str
""" The pattern's name """
@property
def name(self) -> str:
return self._name
def __init__(self, name: str) -> None:
"""
Creates an empty NamedPattern
Args:
name: The pattern's name. Immutable.
"""
Pattern.__init__(self)
self._name = name
def __repr__(self) -> str:
s = f'<NamedPattern "{self.name}":'
s += f' sh{len(self.shapes)} sp{len(self.refs)} la{len(self.labels)} ['
for name, port in self.ports.items():
s += f'\n\t{name}: {port}'
s += ']>'
return s
def __str__(self) -> str:
return self.name
def __copy__(self) -> Pattern:
return Pattern.__copy__(self)
def __deepcopy__(self, memo: dict | None = None) -> Pattern:
return Pattern.__deepcopy__(self, memo)
def as_pattern(self) -> Pattern:
return Pattern(
shapes=self.shapes,
labels=self.labels,
refs=self.refs,
annotations=self.annotations,
ports=self.ports,
)

@ -21,7 +21,7 @@ from .traits import (
if TYPE_CHECKING: if TYPE_CHECKING:
from . import Pattern, NamedPattern from . import Pattern
class Ref( class Ref(
@ -46,7 +46,7 @@ class Ref(
def __init__( def __init__(
self, self,
target: 'str | NamedPattern | None', target: str | None,
*, *,
offset: ArrayLike = (0.0, 0.0), offset: ArrayLike = (0.0, 0.0),
rotation: float = 0.0, rotation: float = 0.0,
@ -64,8 +64,6 @@ class Ref(
scale: Scaling factor applied to the pattern's geometry. scale: Scaling factor applied to the pattern's geometry.
repetition: `Repetition` object, default `None` repetition: `Repetition` object, default `None`
""" """
if hasattr(target, 'name'):
target = cast('NamedPattern', target).name
self.target = target self.target = target
self.offset = offset self.offset = offset
self.rotation = rotation self.rotation = rotation

Loading…
Cancel
Save