Source code for pycif.plugins.transforms.basic.families.adjoint
import copy
[docs]
def adjoint(
transform,
inout_datastore,
controlvect,
obsvect,
mapper,
di,
df,
mode,
runsubdir,
workdir,
onlyinit=False,
**kwargs
):
trid_out = list(mapper["outputs"].keys())[0]
xmod = inout_datastore["outputs"]
# If sparse data, different treatment
if mapper["outputs"][trid_out].get("sparse_data", False):
for trid in mapper["inputs"]:
inout_datastore["inputs"][trid][di] = \
copy.deepcopy(xmod[trid_out][di])
inout_datastore["inputs"][trid][di].loc[
:, ("metadata", "parameter")
] = trid[1].lower()
return
if onlyinit:
return
for trid in mapper["inputs"]:
inout_datastore["inputs"][trid][di] = \
{k: xmod[trid_out][k] for k in xmod[trid_out]}
if not onlyinit:
inout_datastore["inputs"][trid][di]["adj_out"] = \
copy.deepcopy(xmod[trid_out][di]["adj_out"])