from typing import Any, Optional

def column_mapped_collection(mapping_spec): ...
def attribute_mapped_collection(attr_name): ...
def mapped_collection(keyfunc): ...

class collection(object):
    @staticmethod
    def appender(fn): ...
    @staticmethod
    def remover(fn): ...
    @staticmethod
    def iterator(fn): ...
    @staticmethod
    def internally_instrumented(fn): ...
    @staticmethod
    def linker(fn): ...
    link: Any = ...
    @staticmethod
    def converter(fn): ...
    @staticmethod
    def adds(arg): ...
    @staticmethod
    def replaces(arg): ...
    @staticmethod
    def removes(arg): ...
    @staticmethod
    def removes_return(): ...

collection_adapter: Any = ...

class CollectionAdapter(object):
    attr: Any = ...
    owner_state: Any = ...
    invalidated: bool = ...
    def __init__(self, attr, owner_state, data) -> None: ...
    @property
    def data(self): ...
    def bulk_appender(self): ...
    def append_with_event(self, item, initiator: Optional[Any] = ...): ...
    def append_without_event(self, item): ...
    def append_multiple_without_event(self, items): ...
    def bulk_remover(self): ...
    def remove_with_event(self, item, initiator: Optional[Any] = ...): ...
    def remove_without_event(self, item): ...
    def clear_with_event(self, initiator: Optional[Any] = ...): ...
    def clear_without_event(self): ...
    def __iter__(self): ...
    def __len__(self): ...
    def __bool__(self): ...
    __nonzero__: Any = ...
    def fire_append_event(self, item, initiator: Optional[Any] = ...): ...
    def fire_remove_event(self, item, initiator: Optional[Any] = ...): ...
    def fire_pre_remove_event(self, initiator: Optional[Any] = ...): ...

class InstrumentedList(list): ...
class InstrumentedSet(set): ...
class InstrumentedDict(dict): ...

class MappedCollection(dict):
    keyfunc: Any = ...
    def __init__(self, keyfunc) -> None: ...
    def set(self, value, _sa_initiator: Optional[Any] = ...): ...
    def remove(self, value, _sa_initiator: Optional[Any] = ...): ...
