add subpatterns_by_id()
This commit is contained in:
parent
1976c6e684
commit
07ee25e735
@ -486,6 +486,32 @@ class Pattern:
|
||||
pat_list = [(p.name if p is not None else None, p) for p in pats_by_id.values()]
|
||||
return pat_list
|
||||
|
||||
def subpatterns_by_id(self,
|
||||
include_none: bool = False,
|
||||
recursive: bool = True,
|
||||
) -> Dict[int, List[subpattern_t]]:
|
||||
"""
|
||||
Create a dictionary which maps `{id(referenced_pattern): [subpattern0, ...]}`
|
||||
for all SubPattern objects referenced by this Pattern (by default, operates
|
||||
recursively on all referenced Patterns as well).
|
||||
|
||||
Args:
|
||||
include_none: If `True`, references to `None` will be included. Default `False`.
|
||||
recursive: If `True`, operates recursively on all referenced patterns. Default `True`.
|
||||
|
||||
Returns:
|
||||
Dictionary mapping each pattern id to a list of subpattern objects referencing the pattern.
|
||||
"""
|
||||
ids: Dict[int, List[subpattern_t]] = defaultdict(list)
|
||||
for subpat in self.subpatterns:
|
||||
pat = subpat.pattern
|
||||
if include_none or pat is not None:
|
||||
ids[id(pat)].append(subpat)
|
||||
if recursive and pat is not None:
|
||||
ids.update(pat.subpatterns_by_id(include_none=include_none))
|
||||
return dict(ids)
|
||||
|
||||
|
||||
def get_bounds(self) -> Union[numpy.ndarray, None]:
|
||||
"""
|
||||
Return a `numpy.ndarray` containing `[[x_min, y_min], [x_max, y_max]]`, corresponding to the
|
||||
|
Loading…
Reference in New Issue
Block a user