# util/__init__.py
# Copyright (C) 2005-2018 the SQLAlchemy authors and contributors
# <see AUTHORS file>
#
# This module is part of SQLAlchemy and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php

from .compat import callable, cmp, reduce,  \
    threading, py3k, py33, py36, py2k, jython, pypy, cpython, win32, \
    pickle, dottedgetter, parse_qsl, namedtuple, next, reraise, \
    raise_from_cause, text_type, safe_kwarg, string_types, int_types, \
    binary_type, nested, \
    quote_plus, with_metaclass, print_, itertools_filterfalse, u, ue, b,\
    unquote_plus, unquote, b64decode, b64encode, byte_buffer, itertools_filter,\
    iterbytes, StringIO, inspect_getargspec, zip_longest

from ._collections import KeyedTuple, ImmutableContainer, immutabledict, \
    Properties, OrderedProperties, ImmutableProperties, OrderedDict, \
    OrderedSet, IdentitySet, OrderedIdentitySet, column_set, \
    column_dict, ordered_column_set, populate_column_dict, unique_list, \
    UniqueAppender, PopulateDict, EMPTY_SET, to_list, to_set, \
    to_column_set, update_copy, flatten_iterator, has_intersection, \
    LRUCache, ScopedRegistry, ThreadLocalRegistry, WeakSequence, \
    coerce_generator_arg, lightweight_named_tuple

from .langhelpers import iterate_attributes, class_hierarchy, \
    portable_instancemethod, unbound_method_to_callable, \
    getargspec_init, format_argspec_init, format_argspec_plus, \
    get_func_kwargs, get_cls_kwargs, decorator, as_interface, \
    memoized_property, memoized_instancemethod, md5_hex, \
    group_expirable_memoized_property, dependencies, decode_slice, \
    monkeypatch_proxied_specials, asbool, bool_or_str, coerce_kw_type,\
    duck_type_collection, assert_arg_type, symbol, dictlike_iteritems,\
    classproperty, set_creation_order, warn_exception, warn, NoneType,\
    constructor_copy, methods_equivalent, chop_traceback, asint,\
    generic_repr, counter, PluginLoader, hybridproperty, hybridmethod, \
    safe_reraise,\
    get_callable_argspec, only_once, attrsetter, ellipses_string, \
    warn_limited, map_bits, MemoizedSlots, EnsureKWArgType, wrap_callable

from .deprecations import warn_deprecated, warn_pending_deprecation, \
    deprecated, pending_deprecation, inject_docstring_text

# things that used to be not always available,
# but are now as of current support Python versions
from collections import defaultdict
from functools import partial
from functools import update_wrapper
from contextlib import contextmanager
