# 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/_specifiers.py
# def forged_signature(obj, auto=True, args=(), kwargs={}):
# 
# 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
from repeated_test import options
from sigtools import support, _specifiers
from sigtools.tests.util import Fixtures

    pok = 'a, b',
    pos = 'a, /, b', '<a>, b'
    pos_old = '<a>, b', 'a, /, b'

    default = 'a=1',
    varargs = '*args',
    varkwargs = '**kwargs',

    kwo = '*args, a',
    kwo_novarargs = '*, a',
    kwo_order = 'a, b=1, *args, c, d, e, f=4',

    defaults = 'a, b=1, *, c, d=1',
    default_after_star = 'a, b, *, c, d=1, e=2',

    annotate = 'a:1, /, b:2, *c:3, d:4, **e:5', '<a>:1, b:2, *c:3, d:4, **e:5'

    def test_return_annotation(self):
        self._assert_equal_ignoring_spaces('() -> 2', str(support.s('', 2)))
        self._assert_equal_ignoring_spaces('() -> 3', str(support.s('', ret=3)))
        self._assert_equal_ignoring_spaces('(a:4) -> 5', str(support.s('a:4', 5)))
        self._assert_equal_ignoring_spaces('(b:6) -> 7', str(support.s('b:6', ret=7)))

    def test_locals(self):
        obj = object()
        sig = support.s('a:o', locals={'o': obj})
        self.assertIs(obj, sig.parameters['a'].annotation)

    def test_name(self):

# 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/_specifiers.py
# def forged_signature(obj, auto=True, args=(), kwargs={}):
# 
# 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_support.py
import sys
from repeated_test import options
from sigtools import support, _specifiers
from sigtools.tests.util import Fixtures


    pok = 'a, b',
    pos = 'a, /, b', '<a>, b'
    pos_old = '<a>, b', 'a, /, b'

    default = 'a=1',
    varargs = '*args',
    varkwargs = '**kwargs',

    kwo = '*args, a',
    kwo_novarargs = '*, a',
    kwo_order = 'a, b=1, *args, c, d, e, f=4',

    defaults = 'a, b=1, *, c, d=1',
    default_after_star = 'a, b, *, c, d=1, e=2',

    annotate = 'a:1, /, b:2, *c:3, d:4, **e:5', '<a>:1, b:2, *c:3, d:4, **e:5'

    def test_return_annotation(self):
        self._assert_equal_ignoring_spaces('() -> 2', str(support.s('', 2)))
        self._assert_equal_ignoring_spaces('() -> 3', str(support.s('', ret=3)))
        self._assert_equal_ignoring_spaces('(a:4) -> 5', str(support.s('a:4', 5)))
        self._assert_equal_ignoring_spaces('(b:6) -> 7', str(support.s('b:6', ret=7)))

    def test_locals(self):
        obj = object()
        sig = support.s('a:o', locals={'o': obj})
        self.assertIs(obj, sig.parameters['a'].annotation)

    def test_name(self):

        func = support.f('a, b, c', name='test_name')