Files

68 lines
2.1 KiB
Python
Raw Permalink Normal View History

2026-04-26 00:51:40 +08:00
from typing import Never, TypeIs, overload, override
from .messages import Message
from .midifiles import MetaMessage, UnknownMetaMessage
from .midifiles.meta import _MetaMessage # pyright: ignore[reportPrivateUsage]
class Frozen:
@override
def __setattr__(self, *_) -> Never: ...
@override
def __hash__(self) -> int: ...
class FrozenMessage(Frozen, Message): ...
class FrozenMetaMessage(Frozen, _MetaMessage): ...
class FrozenUnknownMetaMessage(Frozen, UnknownMetaMessage): ...
@overload
def is_frozen(msg: UnknownMetaMessage) -> TypeIs[FrozenUnknownMetaMessage]: ... # pyright: ignore[reportOverlappingOverload]
@overload
def is_frozen(msg: _MetaMessage) -> TypeIs[FrozenMetaMessage]: ...
@overload
def is_frozen(msg: Message) -> TypeIs[FrozenMessage]: ...
@overload
def is_frozen(msg: object) -> TypeIs[Frozen]:
"""Return True if message is frozen, otherwise False."""
@overload
def freeze_message[T: Frozen](msg: T) -> T: ...
@overload
def freeze_message(msg: Message) -> FrozenMessage: ...
@overload
def freeze_message(msg: UnknownMetaMessage) -> FrozenUnknownMetaMessage: ...
@overload
def freeze_message(msg: MetaMessage) -> FrozenMetaMessage: ...
@overload
def freeze_message(msg: None) -> None: ...
@overload
def freeze_message[T: Frozen](
msg: T | Message | UnknownMetaMessage | MetaMessage | None,
) -> T | FrozenMessage | FrozenUnknownMetaMessage | FrozenMetaMessage | None:
"""Freeze message.
Returns a frozen version of the message. Frozen messages are
immutable, hashable and can be used as dictionary keys.
Will return None if called with None. This allows you to do things
like::
msg = freeze_message(port.poll())
"""
@overload
def thaw_message(msg: FrozenUnknownMetaMessage) -> UnknownMetaMessage: ...
@overload
def thaw_message(msg: FrozenMetaMessage) -> MetaMessage: ...
@overload
def thaw_message(msg: FrozenMessage) -> Message: ...
@overload
def thaw_message(
msg: FrozenMessage | FrozenUnknownMetaMessage | FrozenMetaMessage,
) -> Message | UnknownMetaMessage | MetaMessage:
"""Thaw message.
Returns a mutable version of a frozen message.
Will return None if called with None.
"""