Operators#

Operators are at the core of NN-OpInf. Operators take some inputs, \(v\), and potentially an input state, \(x\), and model some function \(f\),

\(f: (v,x) \mapsto f(v,x)\)

What distinguishes NN-OpInf is that we enforce structure on the inferred operators. As an example, the SpdOperator is given as

\(f: (v,x) \mapsto L(v) L(v)^T x\)

which enforces semi-positive-definiteness.

nnopinf.operators.Operator(*args, **kwargs)

Protocol for operator class.

nnopinf.operators.StandardOperator(...[, ...])

\(f: v \mapsto f(v)\)

nnopinf.operators.SpdOperator(acts_on, ...)

\(f: (v,x) \mapsto L(v)L(v)^T x\)

nnopinf.operators.SkewOperator(acts_on, ...)

\(f: (v,x) \mapsto [S(v) - S(v)^T] x\)

nnopinf.operators.MatrixOperator(n_outputs, ...)

\(f: (v,x) \mapsto A(v)x\)

nnopinf.operators.StandardLagrangianOperator(...)

\(f: x \mapsto \nabla_x \mathcal{L}(x)\)

nnopinf.operators.PsdLagrangianOperator(...)

\(f: x \mapsto \nabla_x \mathcal{L}(x)\) where \(\mathcal{L}(x) = x^T A(x) x\) and \(A(x)\) is an SPD operator.

nnopinf.operators.CompositeOperator(...[, name])

\(f: (f_1,\ldots,f_K) \mapsto \sum_{i=1}^K f_k\)

nnopinf.operators.LinearAffineTensorOperator(...)

\(f: (v,x) \mapsto A_{ijk} x_k v_k\)

nnopinf.operators.LinearAffineSkewTensorOperator(...)

\(f: (v,x) \mapsto [S_{ijk} - S_{jik}] x_k v_k\)

nnopinf.operators.LinearAffineSpdTensorOperator(...)

\(f: (v,x) \mapsto \sum_{k=1}^{N} L_kD_kL_k^T x v_k\)

nnopinf.operators.VectorOffsetOperator(n_outputs)

\(f \in \mathbb{R}^M\)