# Path: sigtools/_util.py
# def get_funcsigs():
#     def __repr__(self):
# def noop(func):
# def qualname(obj):
#     def __init__(self, *args, **kwargs):
#             def cg(func, **kwargs):
#     def __get__(self, instance, owner):
# def safe_get(obj, instance, owner):
# def iter_call(obj):
# def get_introspectable(obj, forged=True, af_hint=True, partial=True):
# def get_ast(func):
# class _Unset(object):
# class OverrideableDataDesc(object):
# UNSET = _Unset()
# 
# Path: sigtools/signatures.py

# 
# Path: sigtools/specifiers.py
# class _AsForged(object):
# class _ForgerWrapper(object):
#     def __init__(self):
#     def __get__(self, instance, owner):
# def set_signature_forger(obj, forger, emulate=None):
# def _transform(obj, meta):
#     def __init__(self, obj, forger):
#     def _sigtools__forger(self, obj):
#     def __call__(self, *args, **kwargs):
#     def __get__(self, instance, owner):
# def forger_function(func):
#     def _apply_forger(emulate=None, *args, **kwargs):
#         def _applier(obj):
# def forwards(wrapper, wrapped, *args, **kwargs):
# def forwards_to_function(obj, *args, **kwargs):
# def forwards_to_method(obj, wrapped_name, *args, **kwargs):
# def _get_origin_class(obj, cls):
# def forwards_to_super(obj, cls=None, *args, **kwargs):
# def apply_forwards_to_super(num_args=0, named_args=(), *member_names,
#                             **kwargs):
# def _apply_forwards_to_super(member_names, m_args, m_kwargs, cls):


from functools import partial, update_wrapper, wraps
from sigtools import _util, signatures, specifiers
    def __init__(self, wrapper, wrapped):
        update_wrapper(self, wrapped)
        self.func = partial(wrapper, wrapped)
        self.wrapper = wrapper
        self._sigtools__wrappers = wrapper,
        self.__wrapped__ = wrapped
        try:
            del self._sigtools__forger
        except AttributeError:
            pass
        try:
            del self.__signature__
        except AttributeError:
            pass

    __signature__ = specifiers.as_forged

    def __call__(self, *args, **kwargs):
        return self.func(*args, **kwargs)

    def __get__(self, instance, owner):
        return type(self)(
            self.wrapper,
            _util.safe_get(self.__wrapped__, instance, owner))

    def __repr__(self):
        return '<{0!r} wrapped with {1!r}>'.format(
                self.__wrapped__, self.wrapper)



# Path: sigtools/_util.py
# def get_funcsigs():
#     def __repr__(self):
# def noop(func):
# def qualname(obj):
#     def __init__(self, *args, **kwargs):
#             def cg(func, **kwargs):
#     def __get__(self, instance, owner):
# def safe_get(obj, instance, owner):
# def iter_call(obj):
# def get_introspectable(obj, forged=True, af_hint=True, partial=True):
# def get_ast(func):
# class _Unset(object):
# class OverrideableDataDesc(object):
# UNSET = _Unset()
# 
# Path: sigtools/signatures.py

# 
# Path: sigtools/specifiers.py
# class _AsForged(object):
# class _ForgerWrapper(object):
#     def __init__(self):
#     def __get__(self, instance, owner):
# def set_signature_forger(obj, forger, emulate=None):
# def _transform(obj, meta):
#     def __init__(self, obj, forger):
#     def _sigtools__forger(self, obj):
#     def __call__(self, *args, **kwargs):
#     def __get__(self, instance, owner):
# def forger_function(func):
#     def _apply_forger(emulate=None, *args, **kwargs):
#         def _applier(obj):
# def forwards(wrapper, wrapped, *args, **kwargs):
# def forwards_to_function(obj, *args, **kwargs):
# def forwards_to_method(obj, wrapped_name, *args, **kwargs):
# def _get_origin_class(obj, cls):
# def forwards_to_super(obj, cls=None, *args, **kwargs):
# def apply_forwards_to_super(num_args=0, named_args=(), *member_names,
#                             **kwargs):
# def _apply_forwards_to_super(member_names, m_args, m_kwargs, cls):


# Path: sigtools/wrappers.py
from functools import partial, update_wrapper, wraps
from sigtools import _util, signatures, specifiers

    def __init__(self, wrapper, wrapped):
        update_wrapper(self, wrapped)
        self.func = partial(wrapper, wrapped)
        self.wrapper = wrapper
        self._sigtools__wrappers = wrapper,
        self.__wrapped__ = wrapped
        try:
            del self._sigtools__forger
        except AttributeError:
            pass
        try:
            del self.__signature__
        except AttributeError:
            pass

    __signature__ = specifiers.as_forged

    def __call__(self, *args, **kwargs):
        return self.func(*args, **kwargs)

    def __get__(self, instance, owner):
        return type(self)(
            self.wrapper,
            _util.safe_get(self.__wrapped__, instance, owner))

    def __repr__(self):
        return '<{0!r} wrapped with {1!r}>'.format(
                self.__wrapped__, self.wrapper)



@specifiers.forwards_to_function(specifiers.forwards, 2)