Source code for pycif.plugins.transforms.basic.clipcrop.adjoint

import copy
import xarray as xr
import numpy as np


[docs] def adjoint( transform, inout_datastore, controlvect, obsvect, mapper, di, df, mode, runsubdir, workdir, onlyinit=False, **kwargs ): if onlyinit: return ddi = min(di, df) xmod_in = inout_datastore["inputs"] xmod_out = inout_datastore["outputs"] parameter = transform.parameter component = transform.component trid = (component, parameter) # Find pixels to clip/crop domain = mapper["inputs"][trid]["domain"] mask = (domain.zlon >= transform.xmin) & (domain.zlon <= transform.xmax) \ & (domain.zlat >= transform.ymin) & (domain.zlat <= transform.ymax) if transform.mode == "crop": mask = ~mask # Propagate adj_out for trid in xmod_out: if "adj_out" not in xmod_out[trid][di]: continue xmod_in[trid][di]["adj_out"] = \ copy.deepcopy(xmod_out[trid][di]["adj_out"]) xmod_in[trid][di]["adj_out"].values[..., mask] = 0.