Source code for pycif.plugins.obsoperators.standard.transforms.utils.propagate_parameters

import copy


[docs] def propagate_parameters(all_transforms, mapper): """Propagate a fixed set of scalar parameters backward through the pipe. For ``force_loadin``, ``loadin_perturb_full_vertical`` and ``surface_level``, sweeps the pipe backwards (from the last to the first transform): whenever an output value differs from its default, it is copied to the matching input, and then to the corresponding precursors' outputs. Args: all_transforms: Namespace holding all registered transform instances, ordered as they appear in the pipe. mapper: Dictionary mapping each transform id to its inputs/outputs/ precursors metadata, mutated in place. """ parameters2propagate = { "force_loadin": False, "loadin_perturb_full_vertical": True, "surface_level": 0 } # Propagates backwards to precursors for transform in all_transforms.attributes[::-1]: transf = getattr(all_transforms, transform) transf_mapper = mapper[transform] # Propagate outputs to inputs for trid in transf_mapper["inputs"]: if trid in transf_mapper["outputs"]: for p2prop, default_val in parameters2propagate.items(): parameter_out = \ transf_mapper["outputs"][trid].get(p2prop, default_val) if parameter_out != default_val: transf_mapper["inputs"][trid][p2prop] = parameter_out # Loop over precursors to propagate info to them precursors = transf_mapper["precursors"] for trid in precursors: for p2prop, default_val in parameters2propagate.items(): parameter_ref = \ transf_mapper["inputs"][trid].get(p2prop, default_val) for tr in precursors[trid]: if parameter_ref != default_val: mapper[tr]["outputs"][trid][p2prop] = \ parameter_ref