122 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			122 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import re
							 | 
						||
| 
								 | 
							
								from collections.abc import Callable
							 | 
						||
| 
								 | 
							
								from typing import (
							 | 
						||
| 
								 | 
							
								    Any,
							 | 
						||
| 
								 | 
							
								    ClassVar,
							 | 
						||
| 
								 | 
							
								    Final,
							 | 
						||
| 
								 | 
							
								    Generic,
							 | 
						||
| 
								 | 
							
								    NamedTuple,
							 | 
						||
| 
								 | 
							
								    TypeVar,
							 | 
						||
| 
								 | 
							
								    final,
							 | 
						||
| 
								 | 
							
								    type_check_only,
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								from typing import (
							 | 
						||
| 
								 | 
							
								    Literal as L,
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from typing_extensions import TypeIs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								__all__ = ["VERSION_PATTERN", "InvalidVersion", "LegacyVersion", "Version", "parse"]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								###
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								_CmpKeyT = TypeVar("_CmpKeyT", bound=tuple[object, ...])
							 | 
						||
| 
								 | 
							
								_CmpKeyT_co = TypeVar("_CmpKeyT_co", bound=tuple[object, ...], default=tuple[Any, ...], covariant=True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								###
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								VERSION_PATTERN: Final[str] = ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class InvalidVersion(ValueError): ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@type_check_only
							 | 
						||
| 
								 | 
							
								@final
							 | 
						||
| 
								 | 
							
								class _InfinityType:
							 | 
						||
| 
								 | 
							
								    def __hash__(self) -> int: ...
							 | 
						||
| 
								 | 
							
								    def __eq__(self, other: object, /) -> TypeIs[_InfinityType]: ...
							 | 
						||
| 
								 | 
							
								    def __ne__(self, other: object, /) -> bool: ...
							 | 
						||
| 
								 | 
							
								    def __lt__(self, other: object, /) -> L[False]: ...
							 | 
						||
| 
								 | 
							
								    def __le__(self, other: object, /) -> L[False]: ...
							 | 
						||
| 
								 | 
							
								    def __gt__(self, other: object, /) -> L[True]: ...
							 | 
						||
| 
								 | 
							
								    def __ge__(self, other: object, /) -> L[True]: ...
							 | 
						||
| 
								 | 
							
								    def __neg__(self) -> _NegativeInfinityType: ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Infinity: Final[_InfinityType] = ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@type_check_only
							 | 
						||
| 
								 | 
							
								@final
							 | 
						||
| 
								 | 
							
								class _NegativeInfinityType:
							 | 
						||
| 
								 | 
							
								    def __hash__(self) -> int: ...
							 | 
						||
| 
								 | 
							
								    def __eq__(self, other: object, /) -> TypeIs[_NegativeInfinityType]: ...
							 | 
						||
| 
								 | 
							
								    def __ne__(self, other: object, /) -> bool: ...
							 | 
						||
| 
								 | 
							
								    def __lt__(self, other: object, /) -> L[True]: ...
							 | 
						||
| 
								 | 
							
								    def __le__(self, other: object, /) -> L[True]: ...
							 | 
						||
| 
								 | 
							
								    def __gt__(self, other: object, /) -> L[False]: ...
							 | 
						||
| 
								 | 
							
								    def __ge__(self, other: object, /) -> L[False]: ...
							 | 
						||
| 
								 | 
							
								    def __neg__(self) -> _InfinityType: ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NegativeInfinity: Final[_NegativeInfinityType] = ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class _Version(NamedTuple):
							 | 
						||
| 
								 | 
							
								    epoch: int
							 | 
						||
| 
								 | 
							
								    release: tuple[int, ...]
							 | 
						||
| 
								 | 
							
								    dev: tuple[str, int] | None
							 | 
						||
| 
								 | 
							
								    pre: tuple[str, int] | None
							 | 
						||
| 
								 | 
							
								    post: tuple[str, int] | None
							 | 
						||
| 
								 | 
							
								    local: tuple[str | int, ...] | None
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class _BaseVersion(Generic[_CmpKeyT_co]):
							 | 
						||
| 
								 | 
							
								    _key: _CmpKeyT_co
							 | 
						||
| 
								 | 
							
								    def __hash__(self) -> int: ...
							 | 
						||
| 
								 | 
							
								    def __eq__(self, other: _BaseVersion, /) -> bool: ...  # type: ignore[override]  # pyright: ignore[reportIncompatibleMethodOverride]
							 | 
						||
| 
								 | 
							
								    def __ne__(self, other: _BaseVersion, /) -> bool: ...  # type: ignore[override]  # pyright: ignore[reportIncompatibleMethodOverride]
							 | 
						||
| 
								 | 
							
								    def __lt__(self, other: _BaseVersion, /) -> bool: ...
							 | 
						||
| 
								 | 
							
								    def __le__(self, other: _BaseVersion, /) -> bool: ...
							 | 
						||
| 
								 | 
							
								    def __ge__(self, other: _BaseVersion, /) -> bool: ...
							 | 
						||
| 
								 | 
							
								    def __gt__(self, other: _BaseVersion, /) -> bool: ...
							 | 
						||
| 
								 | 
							
								    def _compare(self, /, other: _BaseVersion[_CmpKeyT], method: Callable[[_CmpKeyT_co, _CmpKeyT], bool]) -> bool: ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class LegacyVersion(_BaseVersion[tuple[L[-1], tuple[str, ...]]]):
							 | 
						||
| 
								 | 
							
								    _version: Final[str]
							 | 
						||
| 
								 | 
							
								    def __init__(self, /, version: str) -> None: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def public(self) -> str: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def base_version(self) -> str: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def local(self) -> None: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def is_prerelease(self) -> L[False]: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def is_postrelease(self) -> L[False]: ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Version(
							 | 
						||
| 
								 | 
							
								    _BaseVersion[
							 | 
						||
| 
								 | 
							
								        tuple[
							 | 
						||
| 
								 | 
							
								            int,  # epoch
							 | 
						||
| 
								 | 
							
								            tuple[int, ...],  # release
							 | 
						||
| 
								 | 
							
								            tuple[str, int] | _InfinityType | _NegativeInfinityType,  # pre
							 | 
						||
| 
								 | 
							
								            tuple[str, int] | _NegativeInfinityType,  # post
							 | 
						||
| 
								 | 
							
								            tuple[str, int] | _InfinityType,  # dev
							 | 
						||
| 
								 | 
							
								            tuple[tuple[int, L[""]] | tuple[_NegativeInfinityType, str], ...] | _NegativeInfinityType,  # local
							 | 
						||
| 
								 | 
							
								        ],
							 | 
						||
| 
								 | 
							
								    ],
							 | 
						||
| 
								 | 
							
								):
							 | 
						||
| 
								 | 
							
								    _regex: ClassVar[re.Pattern[str]] = ...
							 | 
						||
| 
								 | 
							
								    _version: Final[str]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def __init__(self, /, version: str) -> None: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def public(self) -> str: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def base_version(self) -> str: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def local(self) -> str | None: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def is_prerelease(self) -> bool: ...
							 | 
						||
| 
								 | 
							
								    @property
							 | 
						||
| 
								 | 
							
								    def is_postrelease(self) -> bool: ...
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								def parse(version: str) -> Version | LegacyVersion: ...
							 |