pycif.plugins.transforms.basic.product — API reference#
Configuration reference: product plugin
- pycif.plugins.transforms.basic.product.adjoint.adjoint(transform, inout_datastore, controlvect, obsvect, mapper, di, df, mode, runsubdir, workdir, onlyinit=False, **kwargs)[source]#
Propagate sensitivities through the product (product-rule adjoint).
Reloads the forward inputs from
chain/product/, then for each input \(x_j\):\[s_j = s_{out} \cdot \prod_{i \neq j} x_i^{fwd}\]Uses
itertools.permutationsto enumerate all combinations.- Parameters:
transform (Plugin) – product instance (carries
model.adj_refdirandorig_name).inout_datastore (dict) – mutable datastore.
controlvect – unused.
obsvect – unused.
mapper (dict) – transform mapper.
di (datetime) – sub-simulation start date.
df (datetime) – unused.
mode (str) –
'adj'.runsubdir (str) – unused.
workdir (str) – unused.
onlyinit (bool) – if
True, return immediately.**kwargs – unused.
- pycif.plugins.transforms.basic.product.forward.forward(transform, inout_datastore, controlvect, obsvect, mapper, di, df, mode, runsubdir, workdir, onlyinit=False, **kwargs)[source]#
Compute the element-wise product of multiple input tracer fields.
Forward: \(y = \prod_i x_i\).
TL (product rule): \(\delta y = \sum_j \delta x_j \prod_{i \neq j} x_i\).
Supports ensemble (batch sampling) runs by building a per-output mapping to the corresponding input samples. For non-batch runs, saves all input fields to
chain/product/for use by the adjoint.- Parameters:
transform (Plugin) – product instance (carries
orig_name).inout_datastore (dict) – mutable datastore.
controlvect – unused.
obsvect – unused.
mapper (dict) – transform mapper.
di (datetime) – sub-simulation start date.
df (datetime) – sub-simulation end date.
mode (str) –
'fwd'or'tl'.runsubdir (str) – sub-simulation run directory.
workdir (str) – unused.
onlyinit (bool) – unused.
**kwargs – unused.
- Raises:
ValueError – if multiple outputs are declared for a non-ensemble run.