from typing import Any, overload

from .decorators import identity_decorator

def matching_function(foo: int, bar: str) -> str: ...
def additional_args(foo: int) -> str: ...
def additional_optional_args(foo: int) -> Any: ...
def matching_with_arg_star(foo: Any, bar: Any, *args: Any) -> Any: ...
def matching_with_missing_arg_star(foo: Any, bar: Any, *args: Any) -> Any: ...
def mismatching_with_arg_star(foo: Any, bar: Any, *args: Any): ...
def mismatching_with_additional_arg_star(foo: Any): ...
def matching_with_kwarg_star2(foo: Any, bar: Any, **kwargs: Any) -> Any: ...
def matching_with_missing_kwarg_star2(foo: Any, bar: Any, **kwargs: Any) -> Any: ...
def mismatching_with_kwarg_star2(foo: Any, bar: Any, **kwargs: Any): ...
def mismatching_with_additional_kwarg_star2(foo: Any): ...
def mismatching_with_no_parameters_and_no_return_type(): ...
def mismatching_with_zero_parameters() -> Any: ...
def function_with_no_annotation(): ...
def function_with_args_but_no_annotation(foo): ...
@overload
def overloaded_additional_args(foo: str) -> Any: ...
@overload
def overloaded_additional_args(foo: int, bar: int) -> Any: ...
@overload
def overloaded_additional_optional_args(foo: str) -> Any: ...
@overload
def overloaded_additional_optional_args(foo: int, bar: int) -> Any: ...
@identity_decorator
def decorated_function(foo: Any): ...
@identity_decorator
def decorated_with_additional_args(foo: Any) -> Any: ...
@identity_decorator
def decorated_with_additional_optional_args(foo: Any) -> Any: ...
