<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def autoparams(*selected_args):
 """Return a decorator that will inject args into a function using type annotations, Python >= 3.5 only. For example:: @inject.autoparams() def refresh_cache(cache: RedisCache, db: DbInterface):
 pass There is an option to specify which arguments we want to inject without attempts of injecting everything: For example:: @inject.autoparams('cache', 'db') def sign_up(name, email, cache, db):
 pass """

    def autoparams_decorator(func):
        if sys.version_info[:2] < (3, 5):
            raise InjectorException('autoparams are supported from Python 3.5 onwards')

        full_args_spec = inspect.getfullargspec(func)
        annotations_items = full_args_spec.annotations.items()
        all_arg_names = frozenset(full_args_spec.args + full_args_spec.kwonlyargs)
        args_to_check = frozenset(selected_args) or all_arg_names
        args_annotated_types = {
            arg_name: annotated_type for arg_name, annotated_type in annotations_items
            if arg_name in args_to_check
        }
        return _ParametersInjection(**args_annotated_types)(func)

    return autoparams_decorator