from collections import defaultdict as defaultdict
from contextlib import contextmanager as contextmanager
from functools import partial as partial, update_wrapper as update_wrapper

from ._collections import (
    EMPTY_DICT as EMPTY_DICT,
    EMPTY_SET as EMPTY_SET,
    FacadeDict as FacadeDict,
    IdentitySet as IdentitySet,
    ImmutableContainer as ImmutableContainer,
    ImmutableProperties as ImmutableProperties,
    LRUCache as LRUCache,
    OrderedDict as OrderedDict,
    OrderedIdentitySet as OrderedIdentitySet,
    OrderedProperties as OrderedProperties,
    OrderedSet as OrderedSet,
    PopulateDict as PopulateDict,
    Properties as Properties,
    ScopedRegistry as ScopedRegistry,
    ThreadLocalRegistry as ThreadLocalRegistry,
    UniqueAppender as UniqueAppender,
    WeakPopulateDict as WeakPopulateDict,
    WeakSequence as WeakSequence,
    coerce_generator_arg as coerce_generator_arg,
    coerce_to_immutabledict as coerce_to_immutabledict,
    collections_abc as collections_abc,
    column_dict as column_dict,
    column_set as column_set,
    flatten_iterator as flatten_iterator,
    has_dupes as has_dupes,
    has_intersection as has_intersection,
    immutabledict as immutabledict,
    ordered_column_set as ordered_column_set,
    sort_dictionary as sort_dictionary,
    to_column_set as to_column_set,
    to_list as to_list,
    to_set as to_set,
    unique_list as unique_list,
    update_copy as update_copy,
)
from ._preloaded import preload_module as preload_module, preloaded as preloaded
from .compat import (
    ABC as ABC,
    TYPE_CHECKING as TYPE_CHECKING,
    StringIO as StringIO,
    arm as arm,
    b as b,
    b64decode as b64decode,
    b64encode as b64encode,
    binary_type as binary_type,
    binary_types as binary_types,
    byte_buffer as byte_buffer,
    callable as callable,
    cmp as cmp,
    cpython as cpython,
    dataclass_fields as dataclass_fields,
    decode_backslashreplace as decode_backslashreplace,
    dottedgetter as dottedgetter,
    has_refcount_gc as has_refcount_gc,
    inspect_getfullargspec as inspect_getfullargspec,
    int_types as int_types,
    iterbytes as iterbytes,
    itertools_filter as itertools_filter,
    itertools_filterfalse as itertools_filterfalse,
    local_dataclass_fields as local_dataclass_fields,
    namedtuple as namedtuple,
    next as next,
    nullcontext as nullcontext,
    osx as osx,
    parse_qsl as parse_qsl,
    perf_counter as perf_counter,
    pickle as pickle,
    print_ as print_,
    py2k as py2k,
    py3k as py3k,
    py37 as py37,
    py38 as py38,
    py39 as py39,
    pypy as pypy,
    quote_plus as quote_plus,
    raise_ as raise_,
    raise_from_cause as raise_from_cause,
    reduce as reduce,
    reraise as reraise,
    string_types as string_types,
    text_type as text_type,
    threading as threading,
    timezone as timezone,
    u as u,
    ue as ue,
    unquote as unquote,
    unquote_plus as unquote_plus,
    win32 as win32,
    with_metaclass as with_metaclass,
    zip_longest as zip_longest,
)
from .concurrency import (
    asyncio as asyncio,
    await_fallback as await_fallback,
    await_only as await_only,
    greenlet_spawn as greenlet_spawn,
    is_exit_exception as is_exit_exception,
)
from .deprecations import (
    SQLALCHEMY_WARN_20 as SQLALCHEMY_WARN_20,
    deprecated as deprecated,
    deprecated_20 as deprecated_20,
    deprecated_20_cls as deprecated_20_cls,
    deprecated_cls as deprecated_cls,
    deprecated_params as deprecated_params,
    inject_docstring_text as inject_docstring_text,
    moved_20 as moved_20,
    warn_deprecated as warn_deprecated,
    warn_deprecated_20 as warn_deprecated_20,
)
from .langhelpers import (
    EnsureKWArgType as EnsureKWArgType,
    HasMemoized as HasMemoized,
    MemoizedSlots as MemoizedSlots,
    NoneType as NoneType,
    PluginLoader as PluginLoader,
    add_parameter_text as add_parameter_text,
    as_interface as as_interface,
    asbool as asbool,
    asint as asint,
    assert_arg_type as assert_arg_type,
    attrsetter as attrsetter,
    bool_or_str as bool_or_str,
    chop_traceback as chop_traceback,
    class_hierarchy as class_hierarchy,
    classproperty as classproperty,
    clsname_as_plain_name as clsname_as_plain_name,
    coerce_kw_type as coerce_kw_type,
    constructor_copy as constructor_copy,
    constructor_key as constructor_key,
    counter as counter,
    create_proxy_methods as create_proxy_methods,
    decode_slice as decode_slice,
    decorator as decorator,
    dictlike_iteritems as dictlike_iteritems,
    duck_type_collection as duck_type_collection,
    ellipses_string as ellipses_string,
    format_argspec_init as format_argspec_init,
    format_argspec_plus as format_argspec_plus,
    generic_repr as generic_repr,
    get_callable_argspec as get_callable_argspec,
    get_cls_kwargs as get_cls_kwargs,
    get_func_kwargs as get_func_kwargs,
    getargspec_init as getargspec_init,
    has_compiled_ext as has_compiled_ext,
    hybridmethod as hybridmethod,
    hybridproperty as hybridproperty,
    iterate_attributes as iterate_attributes,
    map_bits as map_bits,
    md5_hex as md5_hex,
    memoized_instancemethod as memoized_instancemethod,
    memoized_property as memoized_property,
    method_is_overridden as method_is_overridden,
    methods_equivalent as methods_equivalent,
    monkeypatch_proxied_specials as monkeypatch_proxied_specials,
    only_once as only_once,
    portable_instancemethod as portable_instancemethod,
    quoted_token_parser as quoted_token_parser,
    safe_reraise as safe_reraise,
    set_creation_order as set_creation_order,
    string_or_unprintable as string_or_unprintable,
    symbol as symbol,
    unbound_method_to_callable as unbound_method_to_callable,
    walk_subclasses as walk_subclasses,
    warn as warn,
    warn_exception as warn_exception,
    warn_limited as warn_limited,
    wrap_callable as wrap_callable,
)
