Source code for pycif.plugins.obsoperators.standard.transforms.utils.initiate_default_attributes
from logging import warning
[docs]
def initiate_default_attributes(
all_transforms, mapper, transform_id
):
"""Fill in default values for attributes not explicitly set on a transform.
Runs once per transform (subsequent calls are no-ops, tracked via the
``default_attributes_initialized`` flag). For every input trid, sets
``recombine_periods`` (and, if a ``domain`` is already set,
``is_lbc``, ``is_top`` and ``force_loadin``) to their default values
when absent, each paired with an ``{attribute}_default`` marker flag.
For every output trid, similarly defaults ``recombine_periods``,
``is_lbc`` and ``is_top``, and additionally marks
``all_successors_initialized`` as True when the trid has no successor
(or only itself as successor).
Args:
all_transforms: Namespace holding all registered transform instances,
unused directly here but kept for interface consistency with
related propagation functions.
mapper: Dictionary mapping each transform id to its inputs/outputs/
successors metadata; ``mapper[transform_id]`` is mutated in
place.
transform_id: Id of the transform whose default attributes are
being initialized.
"""
# Loop over transforms
transf_mapper = mapper[transform_id]
successors = transf_mapper["successors"]
# Skip if already initialized
if transf_mapper.get("default_attributes_initialized", False):
return
for trid in transf_mapper["inputs"]:
if not "recombine_periods" in transf_mapper["inputs"][trid]:
transf_mapper["inputs"][trid]["recombine_periods"] = True
transf_mapper["inputs"][trid]["recombine_periods_default"] = True
if "domain" not in transf_mapper["inputs"][trid]:
continue
if not "is_lbc" in transf_mapper["inputs"][trid]:
transf_mapper["inputs"][trid]["is_lbc"] = False
transf_mapper["inputs"][trid]["is_lbc_default"] = True
if not "is_top" in transf_mapper["inputs"][trid]:
transf_mapper["inputs"][trid]["is_top"] = False
transf_mapper["inputs"][trid]["is_top_default"] = True
if not "force_loadin" in transf_mapper["inputs"][trid]:
transf_mapper["inputs"][trid]["force_loadin"] = False
transf_mapper["inputs"][trid]["force_loadin_default"] = True
for trid in transf_mapper["outputs"]:
trid_outputs = transf_mapper["outputs"][trid]
if not "recombine_periods" in trid_outputs:
trid_outputs["recombine_periods"] = True
trid_outputs["recombine_periods_default"] = True
# Special treatment for all_successors_initialized
if not "all_successors_initialized" in trid_outputs:
# If no successor for a given trid, consider initialized
if successors[trid] == [] or successors[trid] == [transform_id]:
trid_outputs["all_successors_initialized"] = True
# Deal with domain attributes
if not "domain" in trid_outputs:
continue
if not "is_lbc" in trid_outputs:
trid_outputs["is_lbc"] = False
trid_outputs["is_lbc_default"] = True
if not "is_top" in trid_outputs:
trid_outputs["is_top"] = False
trid_outputs["is_top_default"] = True
# Keep in memory that default attributes where already initialized
transf_mapper["default_attributes_initialized"] = True