in mujoco_worldgen/util/types.py [0:0]
def extract_matching_arguments(fun, kwargs):
# Extracts subset of kwargs that contains arguments present in signature of fun.
assert callable(fun), "First argument to extract_matching_arguments should be a function."
assert isinstance(kwargs, dict), "Second argument to extract_matching_arguments should be a dictionary of arugments"
fun_handler = fun
while hasattr(fun_handler, "__wrapped__") or inspect.isclass(fun_handler):
if hasattr(fun_handler, "__wrapped__"):
fun_handler = fun_handler.__wrapped__
if inspect.isclass(fun_handler):
fun_handler = fun_handler.__init__
spec = inspect.getfullargspec(fun_handler)
fun_args = []
if spec.args is not None:
fun_args += spec.args
if spec.kwonlyargs is not None:
fun_args += spec.kwonlyargs
# function accepts kwargs. Therefore, we pass all arguments.
if spec.varkw is not None:
args_to_pass = kwargs
args_remaining = {}
else:
args_to_pass = dict([(k, v) for k, v in kwargs.items() if k in fun_args])
args_remaining = dict([(k, v) for k, v in kwargs.items() if k not in fun_args])
return args_to_pass, args_remaining