in mobile_cv/arch/utils/helper.py [0:0]
def filter_kwargs(func, kwargs, log_skipped=True):
"""Filter kwargs based on signature of `func`
Return arguments that matches `func`
"""
import inspect
sig = inspect.signature(func)
# if *args or **kwargs in the function, return all arguments
param_types = {param.kind for param in sig.parameters.values()}
var_types = {
inspect.Parameter.VAR_KEYWORD,
inspect.Parameter.VAR_POSITIONAL,
}
if len(param_types.intersection(var_types)) > 0:
return kwargs
filter_keys = [
param.name
for param in sig.parameters.values()
if param.kind
in [
param.POSITIONAL_OR_KEYWORD,
param.KEYWORD_ONLY,
param.POSITIONAL_ONLY,
]
]
if log_skipped:
skipped_args = [x for x in kwargs.keys() if x not in filter_keys]
if skipped_args:
logger.warning(f"Arguments {skipped_args} skipped for op {func.__name__}")
filtered_dict = {
filter_key: kwargs[filter_key]
for filter_key in filter_keys
if filter_key in kwargs
}
return filtered_dict