# 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/_specifiers.py
# def forged_signature(obj, auto=True, args=(), kwargs={}):
# 
# Path: sigtools/_signatures.py
# class Signature(_util.funcsigs.Signature):
# class IncompatibleSignatures(ValueError):
# class _Merger(object):
#     def __init__(self, *args, **kwargs):
#     def upgrade(cls, inst, sources):
#     def replace(self, *args, **kwargs):
# def default_sources(sig, obj):
# def set_default_sources(sig, obj):
# def signature(obj):
# def copy_sources(src, func_swap={}, increase=False):
# def sort_params(sig, sources=False):
# def apply_params(sig, posargs, pokargs, varargs, kwoargs, varkwargs,
#                  sources=None):
#     def __init__(self, sig, others):
#     def __str__(self):
# def _add_sources(ret_src, name, *from_sources):
# def _add_all_sources(ret_src, params, from_source):
# def _exclude_from_seq(seq, el):
# def merge_depths(l, r):
#     def __init__(self, left, right):
#     def perform_once(self):
#     def __iter__(self):
#     def _merge(self):
#     def _merge_depths(self):
#     def _add_starargs(self, which, left, right):
#     def _merge_unbalanced_pos(self, existing, src,
#                               convert_from, o_varargs, o_src):
#     def _merge_unbalanced_pok(
#             self, existing, src,
#             o_varargs, o_varkwargs, o_kwargs_limbo, o_src):
#     def _merge_unmatched_kwoargs(self, unmatched_kwoargs, o_varkwargs, from_src):
#     def _concile_meta(self, left, right):
# def merge(*signatures):
# def _check_no_dupes(collect, params):
# def _clear_defaults(ita):
# def _embed(outer, inner, use_varargs=True, use_varkwargs=True, depth=1):
# def embed(use_varargs=True, use_varkwargs=True, *signatures):
# def _pop_chain(*sequences):
# def _remove_from_src(src, ita):
# def _pnames(ita):
# def _mask(sig, num_args, hide_args, hide_kwargs,
#           hide_varargs, hide_varkwargs, named_args, partial_obj):
# def mask(sig, num_args=0,
#          hide_args=False, hide_kwargs=False,
#          hide_varargs=False, hide_varkwargs=False,
#          *named_args):
# def forwards(outer, inner, num_args=0,
#              hide_args=False, hide_kwargs=False,
#              use_varargs=True, use_varkwargs=True,
#              partial=False, *named_args):


from functools import partial, update_wrapper
from sigtools import _util, _specifiers, _signatures
        from sigtools import wrappers
        except AttributeError:
            pass
        try:
            del self._sigtools__forger
        except AttributeError:
            pass
        super(_PokTranslator, self).__init__(**kwargs)
        self.func = func
        self.posoarg_names = set(posoargs)
        self.kwoarg_names = set(kwoargs)
        if isinstance(func, _PokTranslator):
            self._merge_other(func)
        self._prepare()

    def _merge_other(self, other):
        self.func = other.func
        self.posoarg_names |= other.posoarg_names
        self.kwoarg_names |= other.kwoarg_names

        self.custom_getter = wrappers.Combination(
            self.custom_getter, other.custom_getter)

    def _prepare(self):
        intersection = self.posoarg_names & self.kwoarg_names
        if intersection:
            raise ValueError(
                'Parameters marked as both positional-only and keyword-only: '
                + ' '.join(repr(name) for name in intersection))
        to_use = self.posoarg_names | self.kwoarg_names


# 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/_specifiers.py
# def forged_signature(obj, auto=True, args=(), kwargs={}):
# 
# Path: sigtools/_signatures.py
# class Signature(_util.funcsigs.Signature):
# class IncompatibleSignatures(ValueError):
# class _Merger(object):
#     def __init__(self, *args, **kwargs):
#     def upgrade(cls, inst, sources):
#     def replace(self, *args, **kwargs):
# def default_sources(sig, obj):
# def set_default_sources(sig, obj):
# def signature(obj):
# def copy_sources(src, func_swap={}, increase=False):
# def sort_params(sig, sources=False):
# def apply_params(sig, posargs, pokargs, varargs, kwoargs, varkwargs,
#                  sources=None):
#     def __init__(self, sig, others):
#     def __str__(self):
# def _add_sources(ret_src, name, *from_sources):
# def _add_all_sources(ret_src, params, from_source):
# def _exclude_from_seq(seq, el):
# def merge_depths(l, r):
#     def __init__(self, left, right):
#     def perform_once(self):
#     def __iter__(self):
#     def _merge(self):
#     def _merge_depths(self):
#     def _add_starargs(self, which, left, right):
#     def _merge_unbalanced_pos(self, existing, src,
#                               convert_from, o_varargs, o_src):
#     def _merge_unbalanced_pok(
#             self, existing, src,
#             o_varargs, o_varkwargs, o_kwargs_limbo, o_src):
#     def _merge_unmatched_kwoargs(self, unmatched_kwoargs, o_varkwargs, from_src):
#     def _concile_meta(self, left, right):
# def merge(*signatures):
# def _check_no_dupes(collect, params):
# def _clear_defaults(ita):
# def _embed(outer, inner, use_varargs=True, use_varkwargs=True, depth=1):
# def embed(use_varargs=True, use_varkwargs=True, *signatures):
# def _pop_chain(*sequences):
# def _remove_from_src(src, ita):
# def _pnames(ita):
# def _mask(sig, num_args, hide_args, hide_kwargs,
#           hide_varargs, hide_varkwargs, named_args, partial_obj):
# def mask(sig, num_args=0,
#          hide_args=False, hide_kwargs=False,
#          hide_varargs=False, hide_varkwargs=False,
#          *named_args):
# def forwards(outer, inner, num_args=0,
#              hide_args=False, hide_kwargs=False,
#              use_varargs=True, use_varkwargs=True,
#              partial=False, *named_args):


# Path: sigtools/modifiers.py
from functools import partial, update_wrapper
from sigtools import _util, _specifiers, _signatures
        from sigtools import wrappers

        except AttributeError:
            pass
        try:
            del self._sigtools__forger
        except AttributeError:
            pass
        super(_PokTranslator, self).__init__(**kwargs)
        self.func = func
        self.posoarg_names = set(posoargs)
        self.kwoarg_names = set(kwoargs)
        if isinstance(func, _PokTranslator):
            self._merge_other(func)
        self._prepare()

    def _merge_other(self, other):
        self.func = other.func
        self.posoarg_names |= other.posoarg_names
        self.kwoarg_names |= other.kwoarg_names

        self.custom_getter = wrappers.Combination(
            self.custom_getter, other.custom_getter)

    def _prepare(self):
        intersection = self.posoarg_names & self.kwoarg_names
        if intersection:
            raise ValueError(
                'Parameters marked as both positional-only and keyword-only: '
                + ' '.join(repr(name) for name in intersection))
        to_use = self.posoarg_names | self.kwoarg_names


        sig = _specifiers.forged_signature(self.func, auto=False)