# Type declarations for proboscis functions.

from typing import Any, Callable, TypeVar

import proboscis_dummy

F = TypeVar('F', bound=Callable[..., Any])

def bare_decorator(func: F) -> F:
    ...

def decorator_args(url: str) -> Callable[[F], F]:
    ...

from typing import Callable


def test(function: F, **kwargs: Any) -> F: ...


# Really silly: the only way to prevent
#   error: Incompatible import of "TestProgram"
#     (imported name has type "Type[proboscis_dummy.TestProgram]",
#     local name has type "Type[proboscis.TestProgram]"
# (caused by our falling back on proboscis_dummy if proboscis is not
# found) is to pretend that proboscis.TestProgram is a
# proboscis_dummy.TestProgram .
TestProgram = proboscis_dummy.TestProgram