import os
from typing import Any, Optional

basestring = str
getcwdu = os.getcwd
getcwdu = os.getcwd

class TreeWalkWarning(Warning): ...

class ClassProperty(property):
    def __get__(self, cls: Any, owner: Any): ...

class multimethod:
    func: Any = ...
    def __init__(self, func: Any) -> None: ...
    def __get__(self, instance: Any, owner: Any): ...

class path(str):
    module: Any = ...
    def __init__(self, other: str = ...) -> None: ...
    @classmethod
    def using_module(cls, module: Any): ...
    def __add__(self, more: Any): ...
    def __radd__(self, other: Any): ...
    def __truediv__(self, rel: Any): ...
    __div__: Any = ...
    def __enter__(self): ...
    def __exit__(self, *_: Any) -> None: ...
    @classmethod
    def getcwd(cls): ...
    def abspath(self): ...
    def normcase(self): ...
    def normpath(self): ...
    def realpath(self): ...
    def expanduser(self): ...
    def expandvars(self): ...
    def dirname(self): ...
    def basename(self): ...
    def expand(self): ...
    @property
    def namebase(self): ...
    @property
    def ext(self): ...
    @property
    def drive(self): ...
    parent: Any = ...
    name: Any = ...
    def splitpath(self): ...
    def splitdrive(self): ...
    def splitext(self): ...
    def stripext(self): ...
    def splitunc(self): ...
    @property
    def uncshare(self): ...
    def joinpath(cls, first: Any, *others: Any): ...
    def splitall(self): ...
    def relpath(self, start: str = ...): ...
    def relpathto(self, dest: Any): ...
    def listdir(self, pattern: Optional[Any] = ..., realpath: bool = ...): ...
    def dirs(self, pattern: Optional[Any] = ..., realpath: bool = ...): ...
    def files(self, pattern: Optional[Any] = ..., realpath: bool = ...): ...
    def walk(self, pattern: Optional[Any] = ..., errors: str = ..., realpath: bool = ..., regex: Optional[Any] = ...) -> None: ...
    def walkdirs(self, pattern: Optional[Any] = ..., errors: str = ..., realpath: bool = ..., regex: Optional[Any] = ...) -> None: ...
    def walkfiles(self, pattern: Optional[Any] = ..., errors: str = ..., realpath: bool = ..., regex: Optional[Any] = ...) -> None: ...
    def fnmatch(self, pattern: Any, normcase: Optional[Any] = ...): ...
    def regmatch(self, pattern: Any, normcase: Optional[Any] = ...): ...
    def match(self, pattern: Any, normcase: Optional[Any] = ...): ...
    def glob(self, pattern: Any): ...
    def open(self, *args: Any, **kwargs: Any): ...
    def bytes(self): ...
    def chunks(self, size: Any, *args: Any, **kwargs: Any) -> None: ...
    def write_bytes(self, bytes: Any, append: bool = ...) -> None: ...
    def text(self, encoding: Optional[Any] = ..., errors: str = ...): ...
    def write_text(self, text: Any, encoding: Optional[Any] = ..., errors: str = ..., linesep: Any = ..., append: bool = ...) -> None: ...
    def lines(self, encoding: Optional[Any] = ..., errors: str = ..., retain: bool = ...): ...
    def write_lines(self, lines: Any, encoding: Optional[Any] = ..., errors: str = ..., linesep: Any = ..., append: bool = ...) -> None: ...
    def read_md5(self): ...
    def read_hash(self, hash_name: Any): ...
    def read_hexhash(self, hash_name: Any): ...
    def isabs(self): ...
    def exists(self): ...
    def isdir(self): ...
    def isfile(self): ...
    def islink(self): ...
    def ismount(self): ...
    def samefile(self, other: Any): ...
    def samepath(self, other: Any): ...
    def canonicalpath(self): ...
    def truepath(self): ...
    def getatime(self): ...
    atime: Any = ...
    def getmtime(self): ...
    mtime: Any = ...
    def getctime(self): ...
    ctime: Any = ...
    def getsize(self): ...
    size: Any = ...
    def access(self, mode: Any): ...
    def stat(self): ...
    def lstat(self): ...
    get_owner: Any = ...
    owner: Any = ...
    def utime(self, times: Any): ...
    def chmod(self, mode: Any): ...
    def chown(self, uid: int = ..., gid: int = ...): ...
    def get_groupname(self): ...
    groupname: Any = ...
    def chgrp(self, group: Any) -> None: ...
    def statvfs(self): ...
    def pathconf(self, name: Any): ...
    def rename(self, new: Any): ...
    def renames(self, new: Any): ...
    def mkdir(self, mode: Any = ...): ...
    def mkdir_p(self, mode: Any = ...): ...
    def makedirs(self, mode: Any = ...): ...
    def makedirs_p(self, mode: Any = ...): ...
    def rmdir(self): ...
    def rmdir_p(self): ...
    def removedirs(self): ...
    def removedirs_p(self): ...
    def touch(self): ...
    def remove(self): ...
    def remove_p(self): ...
    def unlink(self): ...
    def unlink_p(self): ...
    def link(self, newpath: Any): ...
    def symlink(self, newlink: Any): ...
    def readlink(self): ...
    def readlinkabs(self): ...
    copyfile: Any = ...
    copymode: Any = ...
    copystat: Any = ...
    copy: Any = ...
    copy2: Any = ...
    copytree: Any = ...
    move: Any = ...
    rmtree: Any = ...
    def rmtree_p(self): ...
    def chdir(self) -> None: ...
    cd: Any = ...
    def chroot(self) -> None: ...
    def startfile(self): ...

class tempdir(path):
    def __new__(cls, *args: Any, **kwargs: Any): ...
    def __init__(self, *args: Any, **kwargs: Any) -> None: ...
    def __enter__(self): ...
    def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: ...

class CaseInsensitivePattern(str):
    @property
    def normcase(self): ...
Path = path
