You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
675 B
Python
24 lines
675 B
Python
2 years ago
|
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
|