code: def check_types(func):
      
      call = PythonCall(func)
  
      @wraps(func)
      def decorator(*args, **kwargs):
          parameters = call.bind(args, kwargs)
          for arg_name, expected_type in func.__annotations__.items():
              if not isinstance(parameters[arg_name], expected_type):
                  raise TypeError("{} must be a {}".format(
                      arg_name, expected_type))
          return call.apply(args, kwargs)
      return decorator
docs: Check if annotated function arguments are of the correct type