Defining New Operators#

Defining a new forward operator is relatively simple. You need to create a new class that inherits from the right physics class, that is deepinv.physics.Physics() for non-linear operators, deepinv.physics.LinearPhysics() for linear operators and deepinv.physics.DecomposablePhysics() for linear operators with a closed-form singular value decomposition. The only requirement is to define a deepinv.physics.Physics.A method that computes the forward operator.

See the example Creating a forward operator. for more details.

Tip

Defining a new linear operator requires the definition of deepinv.physics.LinearPhysics.A_adjoint, you can define the adjoint automatically using autograd with deepinv.physics.adjoint_function. Note however that coding a closed form adjoint is generally more efficient.

Tip

You can also inherit from mixin classes such as deepinv.physics.TimeMixin and deepinv.physics.MRIMixin to provide useful methods for your physics.

Tip

You can also define a new operator by combining existing operators.