Normalization#

Normalization standardizes argument names before digestion runs.

Use it when a function accepts aliases (name vs atom_name) or when argument meaning depends on another argument (element + name).

Standardizer hook#

ArgDigest supports an optional standardizer callable:

from argdigest import arg_digest

def argument_names_standardization(caller, kwargs):
    if caller.endswith(".get") and "name" in kwargs:
        kwargs = dict(kwargs)
        kwargs["element_name"] = kwargs.pop("name")
    return kwargs

@arg_digest(standardizer=argument_names_standardization, strictness="warn")
def get(element_name=None, **kwargs):
    return element_name

Contract:

  • input: (caller, kwargs),

  • output: normalized kwargs dictionary.

Normalization runs before any argument digester.

Dynamic rule example (name + element)#

def normalize_get(caller, kwargs):
    if "name" in kwargs and "element" in kwargs:
        kwargs = dict(kwargs)
        kwargs[f"{kwargs['element']}_name"] = kwargs.pop("name")
    return kwargs

This pattern covers cases like:

  • if element="atom" and name="CA", produce atom_name="CA".

Next#

Continue with skip_digestion Behavior.