bytes, __p3: bytes, __p4: Text, *p: AnyPath) -> Text: ...
        @overload
        def join(__p1: bytes, __p2: bytes, __p3: Text, *p: AnyPath) -> Text: ...
        @overload
        def join(__p1: bytes, __p2: Text, *p: AnyPath) -> Text: ...
        @overload
        def join(__p1: Text, *p: AnyPath) -> Text: ...
    elif sys.version_info >= (3, 6):
        # Mypy complains that the signatures overlap, but things seem to behave correctly anyway.
        @overload
        def join(s: StrPath, *paths: StrPath) -> Text: ...
        @overload
        def join(s: BytesPath, *paths: BytesPath) -> bytes: ...
    else:
        def join(s: AnyStr, *paths: AnyStr) -> AnyStr: ...
    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: ...
    if sys.version_info >= (3, 6):
        @overload
        def split(s: _PathLike[AnyStr]) -> Tuple[AnyStr, AnyStr]: ...
        @overload
        def split(s: 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]: ...
    else:
        def split(s: AnyStr) -> Tuple[AnyStr, AnyStr]: ...
        def splitdrive(p: AnyStr) -> Tuple[AnyStr, AnyStr]: ...
        def splitext(p: AnyStr) -> Tuple[AnyStr, AnyStr]: ...
    if sys.version_info < (3,):
        def walk(path: AnyStr, visit: Callable[[_T, AnyStr, List[AnyStr]], Any], arg: _T) -> None: ...
PK