import collections.abc
import nanobind
from _typeshed import Incomplete
from typing import Any, Callable, ClassVar, overload

class DrakeLcm(DrakeLcmInterface):
    available: ClassVar[nanobind.nb_func] = ...
    @overload
    def __init__(self) -> None: ...
    @overload
    def __init__(self, lcm_url: str) -> None: ...
    @overload
    def __init__(self, params: DrakeLcmParams) -> None: ...

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: collections.abc.Callable[[bytes], None]) -> None: ...
    def SubscribeAllChannels(self, handler: collections.abc.Callable[[str, bytes], None]) -> None: ...
    def SubscribeMultichannel(self, regex: str, handler: collections.abc.Callable[[str, bytes], None]) -> None: ...
    def get_lcm_url(self) -> str: ...

class DrakeLcmParams:
    channel_suffix: Incomplete
    defer_initialization: Any
    lcm_url: str
    def __init__(self, **kwargs) -> None: ...
    def __copy__(self) -> DrakeLcmParams: ...
    def __deepcopy__(self, arg: dict) -> DrakeLcmParams: ...
    @property
    def __fields__(self): ...

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