fixes to subtree and lshift, as well as some cast() improvements

This commit is contained in:
jan 2023-04-07 16:48:40 -07:00
parent f1baf8b577
commit abef8771db

View File

@ -142,6 +142,7 @@ class Library(Mapping[str, 'Pattern'], metaclass=ABCMeta):
"""
Return a new `Library`, containing only the specified patterns and the patterns they
reference (recursively).
Dangling references do not cause an error.
Args:
tops: Name(s) of patterns to keep
@ -152,7 +153,7 @@ class Library(Mapping[str, 'Pattern'], metaclass=ABCMeta):
if isinstance(tops, str):
tops = (tops,)
keep: set[str] = self.referenced_patterns(tops) - set((None,)) # type: ignore
keep = cast(set[str], self.referenced_patterns(tops) - set((None,)))
keep |= set(tops)
filtered = {kk: vv for kk, vv in self.items() if kk in keep}
@ -251,7 +252,7 @@ class Library(Mapping[str, 'Pattern'], metaclass=ABCMeta):
flatten_single(top)
assert None not in flattened.values()
return flattened # type: ignore
return cast(dict[str, 'Pattern'], flattened)
def get_name(
self,
@ -592,8 +593,11 @@ class MutableLibrary(Library, MutableMapping[str, 'Pattern'], metaclass=ABCMeta)
if len(other) == 1:
name = next(iter(other))
else:
if not isinstance(other, Library):
other = WrapROLibrary(other)
tops = other.tops()
if len(other.tops()) > 1:
if len(tops) > 1:
raise LibraryError('Received a library containing multiple topcells!')
name = tops[0]
@ -762,6 +766,7 @@ class MutableLibrary(Library, MutableMapping[str, 'Pattern'], metaclass=ABCMeta)
"""
Return a new `Library`, containing only the specified patterns and the patterns they
reference (recursively).
Dangling references do not cause an error.
Args:
tops: Name(s) of patterns to keep
@ -772,11 +777,11 @@ class MutableLibrary(Library, MutableMapping[str, 'Pattern'], metaclass=ABCMeta)
if isinstance(tops, str):
tops = (tops,)
keep: set[str] = self.referenced_patterns(tops) - set((None,)) # type: ignore
keep = cast(set[str], self.referenced_patterns(tops) - set((None,)))
keep |= set(tops)
new = type(self)()
for key in keep:
for key in keep - set(self.keys()):
new._merge(key, self, key)
return new