1import sys
2from types import FrameType, TracebackType
3from typing import Any, Callable, Iterable, List, Mapping, Optional, Text, Type, TypeVar, Union
4
5# TODO recursive type
6_TF = Callable[[FrameType, str, Any], Optional[Callable[..., Any]]]
7
8_PF = Callable[[FrameType, str, Any], None]
9_T = TypeVar("_T")
10
11__all__: List[str]
12
13def active_count() -> int: ...
14
15if sys.version_info < (3,):
16    def activeCount() -> int: ...
17
18def current_thread() -> Thread: ...
19def currentThread() -> Thread: ...
20
21if sys.version_info >= (3,):
22    def get_ident() -> int: ...
23
24def enumerate() -> List[Thread]: ...
25
26if sys.version_info >= (3, 4):
27    def main_thread() -> Thread: ...
28
29if sys.version_info >= (3, 8):
30    from _thread import get_native_id as get_native_id
31
32def settrace(func: _TF) -> None: ...
33def setprofile(func: Optional[_PF]) -> None: ...
34def stack_size(size: int = ...) -> int: ...
35
36if sys.version_info >= (3,):
37    TIMEOUT_MAX: float
38
39class ThreadError(Exception): ...
40
41class local(object):
42    def __getattribute__(self, name: str) -> Any: ...
43    def __setattr__(self, name: str, value: Any) -> None: ...
44    def __delattr__(self, name: str) -> None: ...
45
46class Thread:
47    name: str
48    ident: Optional[int]
49    daemon: bool
50    if sys.version_info >= (3,):
51        def __init__(
52            self,
53            group: None = ...,
54            target: Optional[Callable[..., Any]] = ...,
55            name: Optional[str] = ...,
56            args: Iterable[Any] = ...,
57            kwargs: Optional[Mapping[str, Any]] = ...,
58            *,
59            daemon: Optional[bool] = ...,
60        ) -> None: ...
61    else:
62        def __init__(
63            self,
64            group: None = ...,
65            target: Optional[Callable[..., Any]] = ...,
66            name: Optional[Text] = ...,
67            args: Iterable[Any] = ...,
68            kwargs: Optional[Mapping[Text, Any]] = ...,
69        ) -> None: ...
70    def start(self) -> None: ...
71    def run(self) -> None: ...
72    def join(self, timeout: Optional[float] = ...) -> None: ...
73    def getName(self) -> str: ...
74    def setName(self, name: Text) -> None: ...
75    if sys.version_info >= (3, 8):
76        @property
77        def native_id(self) -> Optional[int]: ...  # only available on some platforms
78    def is_alive(self) -> bool: ...
79    if sys.version_info < (3, 9):
80        def isAlive(self) -> bool: ...
81    def isDaemon(self) -> bool: ...
82    def setDaemon(self, daemonic: bool) -> None: ...
83
84class _DummyThread(Thread): ...
85
86class Lock:
87    def __init__(self) -> None: ...
88    def __enter__(self) -> bool: ...
89    def __exit__(
90        self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]
91    ) -> Optional[bool]: ...
92    if sys.version_info >= (3,):
93        def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ...
94    else:
95        def acquire(self, blocking: bool = ...) -> bool: ...
96    def release(self) -> None: ...
97    def locked(self) -> bool: ...
98
99class _RLock:
100    def __init__(self) -> None: ...
101    def __enter__(self) -> bool: ...
102    def __exit__(
103        self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]
104    ) -> Optional[bool]: ...
105    if sys.version_info >= (3,):
106        def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ...
107    else:
108        def acquire(self, blocking: bool = ...) -> bool: ...
109    def release(self) -> None: ...
110
111RLock = _RLock
112
113class Condition:
114    def __init__(self, lock: Union[Lock, _RLock, None] = ...) -> None: ...
115    def __enter__(self) -> bool: ...
116    def __exit__(
117        self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]
118    ) -> Optional[bool]: ...
119    if sys.version_info >= (3,):
120        def acquire(self, blocking: bool = ..., timeout: float = ...) -> bool: ...
121    else:
122        def acquire(self, blocking: bool = ...) -> bool: ...
123    def release(self) -> None: ...
124    def wait(self, timeout: Optional[float] = ...) -> bool: ...
125    if sys.version_info >= (3,):
126        def wait_for(self, predicate: Callable[[], _T], timeout: Optional[float] = ...) -> _T: ...
127    def notify(self, n: int = ...) -> None: ...
128    def notify_all(self) -> None: ...
129    def notifyAll(self) -> None: ...
130
131class Semaphore:
132    def __init__(self, value: int = ...) -> None: ...
133    def __exit__(
134        self, exc_type: Optional[Type[BaseException]], exc_val: Optional[BaseException], exc_tb: Optional[TracebackType]
135    ) -> Optional[bool]: ...
136    if sys.version_info >= (3,):
137        def acquire(self, blocking: bool = ..., timeout: Optional[float] = ...) -> bool: ...
138        def __enter__(self, blocking: bool = ..., timeout: Optional[float] = ...) -> bool: ...
139    else:
140        def acquire(self, blocking: bool = ...) -> bool: ...
141        def __enter__(self, blocking: bool = ...) -> bool: ...
142    if sys.version_info >= (3, 9):
143        def release(self, n: int = ...) -> None: ...
144    else:
145        def release(self) -> None: ...
146
147class BoundedSemaphore(Semaphore): ...
148
149class Event:
150    def __init__(self) -> None: ...
151    def is_set(self) -> bool: ...
152    if sys.version_info < (3,):
153        def isSet(self) -> bool: ...
154    def set(self) -> None: ...
155    def clear(self) -> None: ...
156    def wait(self, timeout: Optional[float] = ...) -> bool: ...
157
158if sys.version_info >= (3, 8):
159    from _thread import _excepthook, _ExceptHookArgs
160
161    excepthook = _excepthook
162    ExceptHookArgs = _ExceptHookArgs
163
164class Timer(Thread):
165    if sys.version_info >= (3,):
166        def __init__(
167            self,
168            interval: float,
169            function: Callable[..., Any],
170            args: Optional[Iterable[Any]] = ...,
171            kwargs: Optional[Mapping[str, Any]] = ...,
172        ) -> None: ...
173    else:
174        def __init__(
175            self, interval: float, function: Callable[..., Any], args: Iterable[Any] = ..., kwargs: Mapping[str, Any] = ...
176        ) -> None: ...
177    def cancel(self) -> None: ...
178
179if sys.version_info >= (3,):
180    class Barrier:
181        parties: int
182        n_waiting: int
183        broken: bool
184        def __init__(self, parties: int, action: Optional[Callable[[], None]] = ..., timeout: Optional[float] = ...) -> None: ...
185        def wait(self, timeout: Optional[float] = ...) -> int: ...
186        def reset(self) -> None: ...
187        def abort(self) -> None: ...
188    class BrokenBarrierError(RuntimeError): ...
189