mrpro.operators.ProximableFunctional

class mrpro.operators.ProximableFunctional[source]

Bases: Functional, ABC

ProximableFunctional Base Class.

A proximable functional is a functional \(f(x)\) that has a prox implementation, i.e. a function that yields \(\mathrm{argmin}_x \sigma f(x) + 1/2 ||x - y||_2^2\) and a prox_convex_conjugate, yielding the prox of the convex conjugate.

__call__(*args: Unpack) Tout[source]

Apply the forward operator.

For more information, see forward.

Note

Prefer using operator_instance(*parameters), i.e. using __call__ over using forward.

abstract forward(*args: Unpack) Tout[source]

Apply forward operator.

abstract prox(x: Tensor, sigma: Tensor | float = 1.0) tuple[Tensor][source]

Apply proximal operator.

Yields \(\mathrm{prox}_{\sigma f}(x) = \mathrm{argmin}_{p} (\sigma f(p) + 1/2 \|x-p\|_2^2\) given \(x\) and \(\sigma\).

Parameters:
  • x (Tensor) – input tensor

  • sigma (Tensor | float, default: 1.0) – scaling factor, must be positive

Returns:

Proximal operator applied to the input tensor

prox_convex_conj(x: Tensor, sigma: Tensor | float = 1.0) tuple[Tensor][source]

Apply proximal operator of convex conjugate of functional.

Yields \(\mathrm{prox}_{\sigma f^*}(x) = \mathrm{argmin}_{p} (\sigma f^*(p) + 1/2 \|x-p\|_2^2\), where \(f^*\) denotes the convex conjugate of \(f\), given \(x\) and \(\sigma\).

Parameters:
  • x (Tensor) – input tensor

  • sigma (Tensor | float, default: 1.0) – scaling factor, must be positive

Returns:

Proximal operator of the convex conjugate applied to the input tensor

__or__(other: ProximableFunctional) ProximableFunctionalSeparableSum[source]

Create a ProximableFunctionalSeparableSum object from two proximable functionals.

Parameters:

other (ProximableFunctional) – second functional to be summed

Returns:

ProximableFunctionalSeparableSum object

__rmul__(scalar: Tensor | complex) ProximableFunctional[source]

Multiply functional with scalar.

__add__(other: Operator[Unpack, Tout]) Operator[Unpack, Tout][source]
__add__(other: Tensor) Operator[Unpack, tuple[Unpack]]

Operator addition.

Returns lambda x: self(x) + other(x) if other is a operator, lambda x: self(x) + other*x if other is a tensor

__matmul__(other: Operator[Unpack, tuple[Unpack]]) Operator[Unpack, Tout][source]

Operator composition.

Returns lambda x: self(other(x))

__mul__(other: Tensor | complex) Operator[Unpack, Tout][source]

Operator multiplication with tensor.

Returns lambda x: self(x*other)

__radd__(other: Tensor) Operator[Unpack, tuple[Unpack]][source]

Operator right addition.

Returns lambda x: other*x + self(x)