from _typeshed import Incomplete
from typing import Callable, ClassVar

class DrakeLcm(DrakeLcmInterface):
    def __init__(self) -> None: ...
    @staticmethod
    def available() -> bool: ...

class DrakeLcmInterface:
    def __init__(self, *args, **kwargs) -> None: ...
    def HandleSubscriptions(self, timeout_millis: int) -> int: ...
    def Publish(self, channel: str, buffer: bytes, time_sec: float | None = ...) -> None: ...
    def Subscribe(self, channel: str, handler: Callable[[bytes], None]) -> None: ...
    def SubscribeAllChannels(self, handler: Callable[[str, bytes], None]) -> None: ...
    def SubscribeMultichannel(self, regex: str, handler: Callable[[str, bytes], None]) -> None: ...
    def get_lcm_url(self) -> str: ...

class DrakeLcmParams:
    __fields__: ClassVar[tuple] = ...  # read-only
    channel_suffix: str
    defer_initialization: Incomplete
    lcm_url: str
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> DrakeLcmParams: ...
    def __deepcopy__(self, arg0: dict) -> DrakeLcmParams: ...

class Subscriber:
    __init__: ClassVar[Callable] = ...
    _handler: ClassVar[Callable] = ...
    clear: ClassVar[Callable] = ...
