Source code for pycif.plugins.obsoperators.standard.transforms.utils.propagate_dates
[docs]
def propagate_dates(all_transforms, mapper):
# 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 in transf_mapper["inputs"]:
if "input_dates" in transf_mapper["inputs"][trid_in]:
continue
for trid_out in transf_mapper["outputs"]:
# If dates_from_previous = True,
# then forbid backwards propagation
if transf_mapper["outputs"][trid_out].get(
"dates_from_previous", False):
continue
if "input_dates" in transf_mapper["outputs"][trid_out]:
transf_mapper["inputs"][trid_in]["input_dates"] = \
transf_mapper["outputs"][trid_out]["input_dates"]
# Loop over precursors to propagate info to them
precursors = transf_mapper["precursors"]
for trid in precursors:
if "input_dates" not in transf_mapper["inputs"][trid]:
continue
for tr in precursors[trid]:
if "input_dates" not in mapper[tr]["outputs"][trid]:
mapper[tr]["outputs"][trid]["input_dates"] = \
transf_mapper["inputs"][trid]["input_dates"]
# Propagates forwards to successors
for transform in all_transforms.attributes:
transf = getattr(all_transforms, transform)
transf_mapper = mapper[transform]
# Propagate inputs to outputs
for trid_out in transf_mapper["outputs"]:
if "input_dates" in transf_mapper["outputs"][trid_out]:
continue
for trid_in in transf_mapper["inputs"]:
if "input_dates" in transf_mapper["inputs"][trid_in]:
transf_mapper["outputs"][trid_out]["input_dates"] = \
transf_mapper["inputs"][trid_in]["input_dates"]
# Loop over precursors to propagate info to them
successors = transf_mapper["successors"]
for trid in successors:
if "input_dates" not in transf_mapper["outputs"][trid]:
continue
for tr in successors[trid]:
if "input_dates" not in mapper[tr]["inputs"][trid]:
mapper[tr]["inputs"][trid]["input_dates"] = \
transf_mapper["outputs"][trid]["input_dates"]