Spaces:
Runtime error
Runtime error
| import functools | |
| import itertools | |
| import platform | |
| import sys | |
| def add_ext_suffix_39(vars): | |
| """ | |
| Ensure vars contains 'EXT_SUFFIX'. pypa/distutils#130 | |
| """ | |
| import _imp | |
| ext_suffix = _imp.extension_suffixes()[0] | |
| vars.update( | |
| EXT_SUFFIX=ext_suffix, | |
| # sysconfig sets SO to match EXT_SUFFIX, so maintain | |
| # that expectation. | |
| # https://github.com/python/cpython/blob/785cc6770588de087d09e89a69110af2542be208/Lib/sysconfig.py#L671-L673 | |
| SO=ext_suffix, | |
| ) | |
| needs_ext_suffix = sys.version_info < (3, 10) and platform.system() == 'Windows' | |
| add_ext_suffix = add_ext_suffix_39 if needs_ext_suffix else lambda vars: None | |
| # from more_itertools | |
| class UnequalIterablesError(ValueError): | |
| def __init__(self, details=None): | |
| msg = 'Iterables have different lengths' | |
| if details is not None: | |
| msg += (': index 0 has length {}; index {} has length {}').format(*details) | |
| super().__init__(msg) | |
| # from more_itertools | |
| def _zip_equal_generator(iterables): | |
| _marker = object() | |
| for combo in itertools.zip_longest(*iterables, fillvalue=_marker): | |
| for val in combo: | |
| if val is _marker: | |
| raise UnequalIterablesError() | |
| yield combo | |
| # from more_itertools | |
| def _zip_equal(*iterables): | |
| # Check whether the iterables are all the same size. | |
| try: | |
| first_size = len(iterables[0]) | |
| for i, it in enumerate(iterables[1:], 1): | |
| size = len(it) | |
| if size != first_size: | |
| raise UnequalIterablesError(details=(first_size, i, size)) | |
| # All sizes are equal, we can use the built-in zip. | |
| return zip(*iterables) | |
| # If any one of the iterables didn't have a length, start reading | |
| # them until one runs out. | |
| except TypeError: | |
| return _zip_equal_generator(iterables) | |
| zip_strict = ( | |
| _zip_equal if sys.version_info < (3, 10) else functools.partial(zip, strict=True) | |
| ) | |