# 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
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

"""
`sigtools.modifiers`: Modify the effective signature of the decorated callable
------------------------------------------------------------------------------

The functions in this module can be used as decorators to mark and enforce some
parameters to be keyword-only (`kwoargs`) or annotate (`annotate`) them, just
like you can :ref:`using Python 3 syntax <def>`. You can also mark and enforce
parameters to be positional-only (`posoargs`). `autokwoargs` helps you quickly
make your parameters with default values become keyword-only.

"""



__all__ = ['annotate', 'kwoargs', 'autokwoargs', 'posoargs']



# 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

# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.

"""
`sigtools.modifiers`: Modify the effective signature of the decorated callable
------------------------------------------------------------------------------

The functions in this module can be used as decorators to mark and enforce some
parameters to be keyword-only (`kwoargs`) or annotate (`annotate`) them, just
like you can :ref:`using Python 3 syntax <def>`. You can also mark and enforce
parameters to be positional-only (`posoargs`). `autokwoargs` helps you quickly
make your parameters with default values become keyword-only.

"""



__all__ = ['annotate', 'kwoargs', 'autokwoargs', 'posoargs']



class _PokTranslator(_util.OverrideableDataDesc):