# 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()


from collections import defaultdict
from functools import partial
from repeated_test import tup, WithTestClass
from sigtools._util import funcsigs
import unittest
    ]


def conv_first_posarg(sig):
    if not sig.parameters:
        return sig
    first = list(sig.parameters.values())[0]
    first = first.replace(kind=first.POSITIONAL_ONLY)
    return sig.replace(
        parameters=(first,) + tuple(sig.parameters.values())[1:])


def func_to_name(func):
    if isinstance(func, partial):
        return 'functoolspartial_' + str(id(func)) + '_' + func_to_name(func.func)
    try:
        return func.__name__
    except AttributeError:
        s = str(func)
        if s != func:
            return '_' + s
        return s


def transform_exp_sources(d, subject=None):
    ret = defaultdict(list)
    funclist = []
    subject_name = None if subject is None else func_to_name(subject)
    for func, params in d.items():
        if func == '+depths':

# 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/tests/util.py
from collections import defaultdict
from functools import partial
from repeated_test import tup, WithTestClass
from sigtools._util import funcsigs
import unittest

    ]


def conv_first_posarg(sig):
    if not sig.parameters:
        return sig
    first = list(sig.parameters.values())[0]
    first = first.replace(kind=first.POSITIONAL_ONLY)
    return sig.replace(
        parameters=(first,) + tuple(sig.parameters.values())[1:])


def func_to_name(func):
    if isinstance(func, partial):
        return 'functoolspartial_' + str(id(func)) + '_' + func_to_name(func.func)
    try:
        return func.__name__
    except AttributeError:
        s = str(func)
        if s != func:
            return '_' + s
        return s


def transform_exp_sources(d, subject=None):
    ret = defaultdict(list)
    funclist = []
    subject_name = None if subject is None else func_to_name(subject)
    for func, params in d.items():
        if func == '+depths':

            continue