| 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: ... |
| def __ne__(self, other: _BaseVersion, /) -> bool: ... |
| 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, |
| tuple[int, ...], |
| tuple[str, int] | _InfinityType | _NegativeInfinityType, |
| tuple[str, int] | _NegativeInfinityType, |
| tuple[str, int] | _InfinityType, |
| tuple[tuple[int, L[""]] | tuple[_NegativeInfinityType, str], ...] | _NegativeInfinityType, |
| ], |
| ], |
| ): |
| _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: ... |
|
|