def _verify_signature(stub: Signature[nodes.Argument], runtime: Signature[inspect.Parameter], function_name: str) -> Iterator[str]:
    for (stub_arg, runtime_arg) in zip(stub.pos, runtime.pos):
        (yield from _verify_arg_name(stub_arg, runtime_arg, function_name))
        (yield from _verify_arg_default_value(stub_arg, runtime_arg))
        if ((runtime_arg.kind == inspect.Parameter.POSITIONAL_ONLY) and (not stub_arg.variable.name.startswith('__')) and (not (stub_arg.variable.name.strip('_') == 'self')) and (not is_dunder(function_name, exclude_special=True))):
            (yield 'stub argument "{}" should be positional-only (rename with a leading double underscore, i.e. "__{}")'.format(stub_arg.variable.name, runtime_arg.name))
        if ((runtime_arg.kind != inspect.Parameter.POSITIONAL_ONLY) and stub_arg.variable.name.startswith('__')):
            (yield 'stub argument "{}" should be positional or keyword (remove leading double underscore)'.format(stub_arg.variable.name))
    if (len(stub.pos) > len(runtime.pos)):
        if (runtime.varpos is None):
            for stub_arg in stub.pos[len(runtime.pos):]:
                if (stub_arg.variable.name not in runtime.kwonly):
                    (yield 'runtime does not have argument "{}"'.format(stub_arg.variable.name))
                else:
                    (yield 'stub argument "{}" is not keyword-only'.format(stub_arg.variable.name))
            if (stub.varpos is not None):
                (yield 'runtime does not have *args argument "{}"'.format(stub.varpos.variable.name))
    elif (len(stub.pos) < len(runtime.pos)):
        for runtime_arg in runtime.pos[len(stub.pos):]:
            if (runtime_arg.name not in stub.kwonly):
                (yield 'stub does not have argument "{}"'.format(runtime_arg.name))
            else:
                (yield 'runtime argument "{}" is not keyword-only'.format(runtime_arg.name))
    if ((len(stub.pos) <= len(runtime.pos)) or (runtime.varpos is None)):
        if ((stub.varpos is None) and (runtime.varpos is not None)):
            (yield 'stub does not have *args argument "{}"'.format(runtime.varpos.name))
        if ((stub.varpos is not None) and (runtime.varpos is None)):
            (yield 'runtime does not have *args argument "{}"'.format(stub.varpos.variable.name))
    for arg in sorted((set(stub.kwonly) & set(runtime.kwonly))):
        (stub_arg, runtime_arg) = (stub.kwonly[arg], runtime.kwonly[arg])
        (yield from _verify_arg_name(stub_arg, runtime_arg, function_name))
        (yield from _verify_arg_default_value(stub_arg, runtime_arg))
    if ((runtime.varkw is None) or (not set(runtime.kwonly).issubset(set(stub.kwonly)))):
        for arg in sorted((set(stub.kwonly) - set(runtime.kwonly))):
            (yield 'runtime does not have argument "{}"'.format(arg))
    for arg in sorted((set(runtime.kwonly) - set(stub.kwonly))):
        if (arg in set((stub_arg.variable.name for stub_arg in stub.pos))):
            if ((len(stub.pos) > len(runtime.pos)) and (runtime.varpos is not None)):
                (yield 'stub argument "{}" is not keyword-only'.format(arg))
        else:
            (yield 'stub does not have argument "{}"'.format(arg))
    if ((stub.varkw is None) and (runtime.varkw is not None)):
        stub_pos_names = set((stub_arg.variable.name for stub_arg in stub.pos))
        if (not set(runtime.kwonly).issubset((set(stub.kwonly) | stub_pos_names))):
            (yield 'stub does not have **kwargs argument "{}"'.format(runtime.varkw.name))
    if ((stub.varkw is not None) and (runtime.varkw is None)):
        (yield 'runtime does not have **kwargs argument "{}"'.format(stub.varkw.variable.name))
def _verify_signature(stub: Signature[nodes.Argument], runtime: Signature[inspect.Parameter], function_name: str) -> Iterator[str]:
    for (stub_arg, runtime_arg) in zip(stub.pos, runtime.pos):
        (yield from _verify_arg_name(stub_arg, runtime_arg, function_name))
        (yield from _verify_arg_default_value(stub_arg, runtime_arg))
        if ((runtime_arg.kind == inspect.Parameter.POSITIONAL_ONLY) and (not stub_arg.variable.name.startswith('__')) and (not (stub_arg.variable.name.strip('_') == 'self')) and (not is_dunder(function_name, exclude_special=True))):
            (yield 'stub argument "{}" should be positional-only (rename with a leading double underscore, i.e. "__{}")'.format(stub_arg.variable.name, runtime_arg.name))
        if ((runtime_arg.kind != inspect.Parameter.POSITIONAL_ONLY) and stub_arg.variable.name.startswith('__')):
            (yield 'stub argument "{}" should be positional or keyword (remove leading double underscore)'.format(stub_arg.variable.name))
    if (len(stub.pos) > len(runtime.pos)):
        if (runtime.varpos is None):
            for stub_arg in stub.pos[len(runtime.pos):]:
                if (stub_arg.variable.name not in runtime.kwonly):
                    (yield 'runtime does not have argument "{}"'.format(stub_arg.variable.name))
                else:
                    (yield 'stub argument "{}" is not keyword-only'.format(stub_arg.variable.name))
            if (stub.varpos is not None):
                (yield 'runtime does not have *args argument "{}"'.format(stub.varpos.variable.name))
    elif (len(stub.pos) < len(runtime.pos)):
        for runtime_arg in runtime.pos[len(stub.pos):]:
            if (runtime_arg.name not in stub.kwonly):
                (yield 'stub does not have argument "{}"'.format(runtime_arg.name))
            else:
                (yield 'runtime argument "{}" is not keyword-only'.format(runtime_arg.name))
    if ((len(stub.pos) <= len(runtime.pos)) or (runtime.varpos is None)):
        if ((stub.varpos is None) and (runtime.varpos is not None)):
            (yield 'stub does not have *args argument "{}"'.format(runtime.varpos.name))
        if ((stub.varpos is not None) and (runtime.varpos is None)):
            (yield 'runtime does not have *args argument "{}"'.format(stub.varpos.variable.name))
    for arg in sorted((set(stub.kwonly) & set(runtime.kwonly))):
        (stub_arg, runtime_arg) = (stub.kwonly[arg], runtime.kwonly[arg])
        (yield from _verify_arg_name(stub_arg, runtime_arg, function_name))
        (yield from _verify_arg_default_value(stub_arg, runtime_arg))
    if ((runtime.varkw is None) or (not set(runtime.kwonly).issubset(set(stub.kwonly)))):
        for arg in sorted((set(stub.kwonly) - set(runtime.kwonly))):
            (yield 'runtime does not have argument "{}"'.format(arg))
    for arg in sorted((set(runtime.kwonly) - set(stub.kwonly))):
        if (arg in set((stub_arg.variable.name for stub_arg in stub.pos))):
            if ((len(stub.pos) > len(runtime.pos)) and (runtime.varpos is not None)):
                (yield 'stub argument "{}" is not keyword-only'.format(arg))
        else:
            (yield 'stub does not have argument "{}"'.format(arg))
    if ((stub.varkw is None) and (runtime.varkw is not None)):
        stub_pos_names = set((stub_arg.variable.name for stub_arg in stub.pos))
        if (not set(runtime.kwonly).issubset((set(stub.kwonly) | stub_pos_names))):
            (yield 'stub does not have **kwargs argument "{}"'.format(runtime.varkw.name))
    if ((stub.varkw is not None) and (runtime.varkw is None)):
        (yield 'runtime does not have **kwargs argument "{}"'.format(stub.varkw.variable.name))