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

import numpy as np
from logging import debug
from . import add_default


[docs] def init_reindex( self, trid, tmp_dict, trid_dict, precursor_id, transform, param, all_transforms, mapper, backup_comps, precursors, do_pipe_entry=False ): cmp, prm = trid # Differentiate sparse data versus matrix data if trid_dict.get("sparse_data", False): same_index = [ np.all( tmp_dict["input_dates"][ddi] == trid_dict["input_dates"].get(ddi, [ ]) ) if len(tmp_dict["input_dates"][ddi]) == len(trid_dict["input_dates"].get(ddi, [])) else False for ddi in tmp_dict["input_dates"] ] else: # For matrix data, check if the index in the outputs (tmp_dict) # is included in the input (trid_dict) # If there are more dates available in inputs, don't do the # interpolation prec_dates = tmp_dict.get("input_dates", []) ref_dates = trid_dict.get("input_dates", []) same_index = [ np.all(ref_dates[ddi] == prec_dates.get(ddi, [])) if len(ref_dates[ddi]) == len(prec_dates.get(ddi, [])) else False for ddi in ref_dates ] if sum(same_index) == len(same_index): return precursor_id debug(f' Temporal re-indexing if any: {prm} / {param}') tinterp = getattr(param, "time_interpolation", None) yml_dict = { "plugin": { "name": "time_interpolation", "version": "std", "type": "transform", }, "method": getattr(tinterp, "method", "bilinear"), "component": [cmp], "parameter": [prm], "successor": transform, "precursor": precursor_id, **{attr: getattr(tinterp, attr) for attr in getattr(tinterp, "attributes", []) if attr != "plugin"} } ref_precursor = {(cmp, prm): precursor_id} ref_successor = {(cmp, prm): transform} new_transf, new_id = add_default.add_default( self, all_transforms, yml_dict, position="index", index=all_transforms.attributes.index(transform), mapper=mapper, init=True, backup_comps=backup_comps, successor=ref_successor, precursor=ref_precursor, do_pipe_entry=do_pipe_entry ) return new_id