diff --git a/pytools/__init__.py b/pytools/__init__.py index 688c9cd9e668be13904d8524b4ed209526ec34e5..926d4c7749635b816785fa4d96ba827180072338 100644 --- a/pytools/__init__.py +++ b/pytools/__init__.py @@ -2125,6 +2125,9 @@ def generate_unique_names(prefix): try_num += 1 +UNIQUE_NAME_GEN_COUNTER_RE = re.compile(r"^(?P\w+)_(?P\d+)$") + + def generate_numbered_unique_names( prefix: str, num: Optional[int] = None) -> Iterable[Tuple[int, str]]: if num is None: @@ -2189,6 +2192,17 @@ class UniqueNameGenerator: counter = self.prefix_to_counter.get(based_on, None) + # {{{ try to get counter from based_on if not already present + + if counter is None: + counter_match = UNIQUE_NAME_GEN_COUNTER_RE.match(based_on) + + if counter_match: + based_on = counter_match.groupdict()["based_on"] + counter = int(counter_match.groupdict()["counter"]) + + # }}} + for counter, var_name in generate_numbered_unique_names(based_on, counter): if not self.is_name_conflicting(var_name): break