code: def arguments_from_signature(signature, *args, **kwargs):
      
      bound = signature.bind_partial(*args)
      meta_kwargs = toolz.merge({'kwargs': kwargs}, kwargs)
      remaining_parameters = signature.parameters.keys() - bound.arguments.keys()
      new_kwargs = {
          k: meta_kwargs[k]
          for k in remaining_parameters
          if k in signature.parameters
          if signature.parameters[k].kind
          in {
              Parameter.KEYWORD_ONLY,
              Parameter.POSITIONAL_OR_KEYWORD,
              Parameter.VAR_KEYWORD,
          }
      }
      return args, new_kwargs
docs: Validate signature against `args` and `kwargs` and return the kwargs
      asked for in the signature
  
      Parameters
      ----------
      args : Tuple[object...]
      kwargs : Dict[str, object]
  
      Returns
      -------
      Tuple[Tuple, Dict[str, Any]]
  
      Examples
      --------
      >>> from inspect import signature
      >>> def foo(a, b=1):
      ...     return a + b
      >>> foo_sig = signature(foo)
      >>> args, kwargs = arguments_from_signature(foo_sig, 1, b=2)
      >>> args
      (1,)
      >>> kwargs
      {'b': 2}
      >>> def bar(a):
      ...     return a + 1
      >>> bar_sig = signature(bar)
      >>> args, kwargs = arguments_from_signature(bar_sig, 1, b=2)
      >>> args
      (1,)
      >>> kwargs
      {}