Source code for aim2dat.strct.ext_analysis.decorator

"""
Decorator for analysis methods that are not hosted in the Structure and StructureOperations class.
"""

# Standard library imports
import inspect
from functools import wraps

# Internal library imports
from aim2dat.strct.structure import _check_calculated_properties


[docs] def external_analysis_method(attr_mapping): """Decorate external analysis methods.""" def decorator(func): func._is_analysis_method = True @wraps(func) def perform_strct_analysis(*args, **kwargs): sig_pars = inspect.signature(func).parameters func_args = {} for idx, arg in enumerate(args): func_args[list(sig_pars.keys())[idx]] = arg func_args.update(kwargs) for keyw, par in sig_pars.items(): if keyw not in func_args and par.default is not par.empty: func_args[keyw] = par.default structure = func_args.pop("structure") return _check_calculated_properties(structure, func, func_args, attr_mapping) return perform_strct_analysis return decorator