from _typeshed import Self
from types import TracebackType
from typing_extensions import final

__all__ = ("Timeout", "timeout", "timeout_at")

@final
class Timeout:
    def __init__(self, when: float | None) -> None: ...
    def when(self) -> float | None: ...
    def reschedule(self, when: float | None) -> None: ...
    def expired(self) -> bool: ...
    async def __aenter__(self: Self) -> Self: ...
    async def __aexit__(
        self, exc_type: type[BaseException] | None, exc_val: BaseException | None, exc_tb: TracebackType | None
    ) -> None: ...

def timeout(delay: float | None) -> Timeout: ...
def timeout_at(when: float | None) -> Timeout: ...
