You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
675 B
23 lines
675 B
from setuptools.extern.more_itertools import consume # noqa: F401 |
|
|
|
|
|
# copied from jaraco.itertools 6.1 |
|
def ensure_unique(iterable, key=lambda x: x): |
|
""" |
|
Wrap an iterable to raise a ValueError if non-unique values are encountered. |
|
|
|
>>> list(ensure_unique('abc')) |
|
['a', 'b', 'c'] |
|
>>> consume(ensure_unique('abca')) |
|
Traceback (most recent call last): |
|
... |
|
ValueError: Duplicate element 'a' encountered. |
|
""" |
|
seen = set() |
|
seen_add = seen.add |
|
for element in iterable: |
|
k = key(element) |
|
if k in seen: |
|
raise ValueError(f"Duplicate element {element!r} encountered.") |
|
seen_add(k) |
|
yield element
|
|
|