Source code for fedsim.utils

import importlib
import numpy as np
import torch
import random
import inspect


[docs]def get_from_module(module_name, submodule_name, class_name): module = importlib.import_module(module_name) if submodule_name in module.__all__: sub_module = importlib.import_module('{}.{}'.format( module_name, submodule_name)) return getattr(sub_module, class_name) raise NotImplementedError
[docs]def search_in_submodules(module_name, object_name): module = importlib.import_module(module_name) for submodule_name in module.__all__: sub_module = importlib.import_module('{}.{}'.format( module_name, submodule_name)) for name, obj in inspect.getmembers( sub_module, lambda x: inspect.isclass(x) or inspect.isfunction(x)): if name == object_name: return obj return None
[docs]def set_seed(seed, use_cuda) -> None: np.random.seed(seed) random.seed(seed) torch.manual_seed(seed) if use_cuda: torch.backends.cudnn.deterministic = True torch.cuda.manual_seed_all(seed)
[docs]def append_dict_to_dict(new_dict, currecnt_dict=None): ans = verify_dict(currecnt_dict) for key, item in new_dict.items(): if key not in ans: ans[key] = [] ans[key].append(item) return ans
[docs]def add_dict_to_dict(new_dict, currecnt_dict=None, scale=1): ans = verify_dict(currecnt_dict) for key, item in new_dict.items(): curr = ans[key] if key in ans else 0 ans[key] = curr + scale * item return ans
[docs]def add_in_dict(key, additive, currecnt_dict=None, scale=1): ans = verify_dict(currecnt_dict) curr = ans[key] if key in ans else 0 ans[key] = curr + scale * additive return ans
[docs]def reduce_dict(to_reduct, reduction_fn=lambda x: float(sum(x)) / len(x)): return {key: reduction_fn(item) for key, item in to_reduct.items()}
[docs]def verify_dict(dict_obj): return dict() if dict_obj is None else dict_obj
[docs]def apply_on_dict(dict_obj, fn, return_as_dict=False, *args, **kwargs): ans = dict() if dict_obj is None: return for key, value in dict_obj.items(): x = fn(key, value, *args, **kwargs) if return_as_dict: ans[key] = x if return_as_dict: return ans