import os import sys from _typeshed import AnyPath, BytesPath, StrPath, SupportsLessThanT from genericpath import exists as exists from os import PathLike from typing import AnyStr, List, Optional, Sequence, Tuple, Union, overload from typing_extensions import Literal # ----- os.path variables ----- supports_unicode_filenames: bool # aliases (also in os) curdir: str pardir: str sep: str if sys.platform == "win32": altsep: str else: altsep: Optional[str] extsep: str pathsep: str defpath: str devnull: str # ----- os.path function stubs ----- # Overloads are necessary to work around python/mypy#3644. @overload def abspath(path: PathLike[AnyStr]) -> AnyStr: ... @overload def abspath(path: AnyStr) -> AnyStr: ... @overload def basename(p: PathLike[AnyStr]) -> AnyStr: ... @overload def basename(p: AnyStr) -> AnyStr: ... @overload def dirname(p: PathLike[AnyStr]) -> AnyStr: ... @overload def dirname(p: AnyStr) -> AnyStr: ... @overload def expanduser(path: PathLike[AnyStr]) -> AnyStr: ... @overload def expanduser(path: AnyStr) -> AnyStr: ... @overload def expandvars(path: PathLike[AnyStr]) -> AnyStr: ... @overload def expandvars(path: AnyStr) -> AnyStr: ... @overload def normcase(s: PathLike[AnyStr]) -> AnyStr: ... @overload def normcase(s: AnyStr) -> AnyStr: ... @overload def normpath(path: PathLike[AnyStr]) -> AnyStr: ... @overload def normpath(path: AnyStr) -> AnyStr: ... if sys.platform == "win32": if sys.version_info >= (3, 10): @overload def realpath(path: PathLike[AnyStr], *, strict: bool = ...) -> AnyStr: ... @overload def realpath(path: AnyStr, *, strict: bool = ...) -> AnyStr: ... else: @overload def realpath(path: PathLike[AnyStr]) -> AnyStr: ... @overload def realpath(path: AnyStr) -> AnyStr: ... else: if sys.version_info >= (3, 10): @overload def realpath(filename: PathLike[AnyStr], *, strict: bool = ...) -> AnyStr: ... @overload def realpath(filename: AnyStr, *, strict: bool = ...) -> AnyStr: ... else: @overload def realpath(filename: PathLike[AnyStr]) -> AnyStr: ... @overload def realpath(filename: AnyStr) -> AnyStr: ... @overload def commonpath(paths: Sequence[StrPath]) -> str: ... @overload def commonpath(paths: Sequence[BytesPath]) -> bytes: ... # All overloads can return empty string. Ideally, Literal[""] would be a valid # Iterable[T], so that Union[List[T], Literal[""]] could be used as a return # type. But because this only works when T is str, we need Sequence[T] instead. @overload def commonprefix(m: Sequence[StrPath]) -> str: ... @overload def commonprefix(m: Sequence[BytesPath]) -> Union[bytes, Literal[""]]: ... @overload def commonprefix(m: Sequence[List[SupportsLessThanT]]) -> Sequence[SupportsLessThanT]: ... @overload def commonprefix(m: Sequence[Tuple[SupportsLessThanT, ...]]) -> Sequence[SupportsLessThanT]: ... # These return float if os.stat_float_times() == True, # but int is a subclass of float. def getatime(filename: AnyPath) -> float: ... def getmtime(filename: AnyPath) -> float: ... def getctime(filename: AnyPath) -> float: ... def getsize(filename: AnyPath) -> int: ... def lexists(path: AnyPath) -> bool: ... def isabs(s: AnyPath) -> bool: ... def isfile(path: AnyPath) -> bool: ... def isdir(s: AnyPath) -> bool: ... def islink(path: AnyPath) -> bool: ... def ismount(path: AnyPath) -> bool: ... @overload def join(a: StrPath, *paths: StrPath) -> str: ... @overload def join(a: BytesPath, *paths: BytesPath) -> bytes: ... @overload def relpath(path: BytesPath, start: Optional[BytesPath] = ...) -> bytes: ... @overload def relpath(path: StrPath, start: Optional[StrPath] = ...) -> str: ... def samefile(f1: AnyPath, f2: AnyPath) -> bool: ... def sameopenfile(fp1: int, fp2: int) -> bool: ... def samestat(s1: os.stat_result, s2: os.stat_result) -> bool: ... @overload def split(p: PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... @overload def split(p: AnyStr) -> Tuple[AnyStr, AnyStr]: ... @overload def splitdrive(p: PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... @overload def splitdrive(p: AnyStr) -> Tuple[AnyStr, AnyStr]: ... @overload def splitext(p: PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ... @overload def splitext(p: AnyStr) -> Tuple[AnyStr, AnyStr]: ... if sys.version_info < (3, 7) and sys.platform == "win32": def splitunc(p: AnyStr) -> Tuple[AnyStr, AnyStr]: ... # deprecated