# Path: sigtools/modifiers.py
# class _PokTranslator(_util.OverrideableDataDesc):
# class annotate(object):
#     def __new__(cls, func=None, posoargs=(), kwoargs=(), **kwargs):
#     def __init__(self, func, posoargs=(), kwoargs=(), **kwargs):
#     def _merge_other(self, other):
#     def _prepare(self):
#     def _sigtools__autoforwards_hint(self, func):
#     def __call__(self, *args, **kwargs):
#     def parameters(self):
#     def __repr__(self):
# def kwoargs(start=None, *kwoarg_names):
# def _kwoargs_start(start, _kwoargs, func, *args, **kwargs):
# def posoargs(end=None, *posoarg_names):
# def _posoargs_end(end, _posoargs, func, *args, **kwargs):
# def autokwoargs(func=None, exceptions=()):
# def _autokwoargs(exceptions, func):
#     def __init__(self, __return_annotation=_util.UNSET, **annotations):
#     def __call__(self, obj):
#     def __repr__(self):
# 
# 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/support.py
# def read_sig(sig_str, ret=_util.UNSET, *,
#              use_modifiers_annotate=False,
#              use_modifiers_posoargs=sys.version_info < (3, 8),
#              use_modifiers_kwoargs=False,
#     ):
# def func_code(names, return_annotation, annotations, posoarg_n,
#               kwoarg_n, params, use_modifiers_annotate,
#               pre='', name='func',
#     ):
# def make_func(source, locals=None, name='func', future_features=()):
# def f(sig_str, ret=_util.UNSET, *, pre='', locals=None, name='func', future_features=(), **kwargs):
# def s(*args, **kwargs):
# def func_from_sig(sig):
# def make_up_callsigs(sig, extra=2):
# def bind_callsig(sig, args, kwargs):
# def sort_callsigs(sig, callsigs):
# def test_func_sig_coherent(func, check_return=True, check_invalid=True):
# DEBUG_STDLIB=False
# 
# 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/tests/util.py
# def conv_first_posarg(sig):
# def func_to_name(func):
# def transform_exp_sources(d, subject=None):
# def transform_real_sources(d):
#     def assertSigsEqual(self, found, expected, *args, **kwargs):
#     def assertSourcesEqual(self, found, expected, func=None, depth_order=False):
#     def downgrade_sig(self, sig):
# class SignatureTests(unittest.TestCase):


import sys
import unittest
        import sigtools
from sigtools import modifiers, specifiers, support, _util, signatures
from sigtools.tests.util import Fixtures, SignatureTests, tup

        @specifiers.forwards_to_method('ftm')
        @modifiers.kwoargs('d')
        def ftm2(self, c, d, *args2, **kwargs2):
            raise NotImplementedError

        @modifiers.kwoargs('m')
        def fts(self, l, m):
            raise NotImplementedError

        @modifiers.kwoargs('o')
        def afts(self, n, o):
            raise NotImplementedError

        @specifiers.forwards_to_method('ftm2')
        @modifiers.kwoargs('q')
        def chain_fts(self, p, q, *args, **kwargs):
            raise NotImplementedError

        @specifiers.forwards_to_method('ftm2')
        @modifiers.kwoargs('s')
        def chain_afts(self, r, s, *args, **kwargs):
            raise NotImplementedError

        @specifiers.forwards_to_method('coop.method')
        @modifiers.kwoargs('bc')
        def ccm(self, ba, bb, bc, *args, **kwargs):
            raise NotImplementedError

    @_Base

# Path: sigtools/modifiers.py
# class _PokTranslator(_util.OverrideableDataDesc):
# class annotate(object):
#     def __new__(cls, func=None, posoargs=(), kwoargs=(), **kwargs):
#     def __init__(self, func, posoargs=(), kwoargs=(), **kwargs):
#     def _merge_other(self, other):
#     def _prepare(self):
#     def _sigtools__autoforwards_hint(self, func):
#     def __call__(self, *args, **kwargs):
#     def parameters(self):
#     def __repr__(self):
# def kwoargs(start=None, *kwoarg_names):
# def _kwoargs_start(start, _kwoargs, func, *args, **kwargs):
# def posoargs(end=None, *posoarg_names):
# def _posoargs_end(end, _posoargs, func, *args, **kwargs):
# def autokwoargs(func=None, exceptions=()):
# def _autokwoargs(exceptions, func):
#     def __init__(self, __return_annotation=_util.UNSET, **annotations):
#     def __call__(self, obj):
#     def __repr__(self):
# 
# 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/support.py
# def read_sig(sig_str, ret=_util.UNSET, *,
#              use_modifiers_annotate=False,
#              use_modifiers_posoargs=sys.version_info < (3, 8),
#              use_modifiers_kwoargs=False,
#     ):
# def func_code(names, return_annotation, annotations, posoarg_n,
#               kwoarg_n, params, use_modifiers_annotate,
#               pre='', name='func',
#     ):
# def make_func(source, locals=None, name='func', future_features=()):
# def f(sig_str, ret=_util.UNSET, *, pre='', locals=None, name='func', future_features=(), **kwargs):
# def s(*args, **kwargs):
# def func_from_sig(sig):
# def make_up_callsigs(sig, extra=2):
# def bind_callsig(sig, args, kwargs):
# def sort_callsigs(sig, callsigs):
# def test_func_sig_coherent(func, check_return=True, check_invalid=True):
# DEBUG_STDLIB=False
# 
# 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/tests/util.py
# def conv_first_posarg(sig):
# def func_to_name(func):
# def transform_exp_sources(d, subject=None):
# def transform_real_sources(d):
#     def assertSigsEqual(self, found, expected, *args, **kwargs):
#     def assertSourcesEqual(self, found, expected, func=None, depth_order=False):
#     def downgrade_sig(self, sig):
# class SignatureTests(unittest.TestCase):


# Path: sigtools/tests/test_specifiers.py
import sys
import unittest
        import sigtools
from sigtools import modifiers, specifiers, support, _util, signatures
from sigtools.tests.util import Fixtures, SignatureTests, tup


        @specifiers.forwards_to_method('ftm')
        @modifiers.kwoargs('d')
        def ftm2(self, c, d, *args2, **kwargs2):
            raise NotImplementedError

        @modifiers.kwoargs('m')
        def fts(self, l, m):
            raise NotImplementedError

        @modifiers.kwoargs('o')
        def afts(self, n, o):
            raise NotImplementedError

        @specifiers.forwards_to_method('ftm2')
        @modifiers.kwoargs('q')
        def chain_fts(self, p, q, *args, **kwargs):
            raise NotImplementedError

        @specifiers.forwards_to_method('ftm2')
        @modifiers.kwoargs('s')
        def chain_afts(self, r, s, *args, **kwargs):
            raise NotImplementedError

        @specifiers.forwards_to_method('coop.method')
        @modifiers.kwoargs('bc')
        def ccm(self, ba, bb, bc, *args, **kwargs):
            raise NotImplementedError

    @_Base

    @modifiers.kwoargs('b')