def extract_matching_arguments()

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