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


import itertools
import collections
from functools import partial
from sigtools import _util
        self.perform_once()
        ret = (
            self.posargs, self.pokargs, self.varargs,
            self.kwoargs, self.varkwargs,
            self.src)
        return iter(ret)

    def _merge(self):
        self.posargs = []
        self.pokargs = []
        self.varargs_src = [self.l.varargs, self.r.varargs]
        self.kwoargs = _util.OrderedDict()
        self.varkwargs_src = [
            self.l.varkwargs,
            self.r.varkwargs
            ]
        self.src = {'+depths': self._merge_depths()}


        self.l_unmatched_kwoargs = _util.OrderedDict()
        for param in self.l.kwoargs.values():
            name = param.name
            if name in self.r.kwoargs:
                self.kwoargs[name] = self._concile_meta(
                    param, self.r.kwoargs[name])
                self.src[name] = list(itertools.chain(
                    self.l.sources.get(name, ()), self.r.sources.get(name, ())))
            else:
                self.l_unmatched_kwoargs[param.name] = param


# 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
import itertools
import collections
from functools import partial
from sigtools import _util

        self.perform_once()
        ret = (
            self.posargs, self.pokargs, self.varargs,
            self.kwoargs, self.varkwargs,
            self.src)
        return iter(ret)

    def _merge(self):
        self.posargs = []
        self.pokargs = []
        self.varargs_src = [self.l.varargs, self.r.varargs]
        self.kwoargs = _util.OrderedDict()
        self.varkwargs_src = [
            self.l.varkwargs,
            self.r.varkwargs
            ]
        self.src = {'+depths': self._merge_depths()}


        self.l_unmatched_kwoargs = _util.OrderedDict()
        for param in self.l.kwoargs.values():
            name = param.name
            if name in self.r.kwoargs:
                self.kwoargs[name] = self._concile_meta(
                    param, self.r.kwoargs[name])
                self.src[name] = list(itertools.chain(
                    self.l.sources.get(name, ()), self.r.sources.get(name, ())))
            else:
                self.l_unmatched_kwoargs[param.name] = param


        self.r_unmatched_kwoargs = _util.OrderedDict()