# ConvTwoBlockCnstrnt¶

`ConvTwoBlockCnstrnt`

specialises `ADMMTwoBlockCnstrnt`

for problems of the form

where \(D \mathbf{x} = \sum_m \mathbf{d}_m * \mathbf{x}_m\), intended to solve problems that have the form

prior to variable splitting.

See `ConvBPDNMaskDcpl`

as an example of a class derived from
`ConvTwoBlockCnstrnt`

.

The methods of `ConvTwoBlockCnstrnt`

that are relevant to an
implementer of a derived class are described in the following
sections.

## Initialisation¶

The `__init__`

method of the derived class should call the
`ConvTwoBlockCnstrnt`

`__init__`

method to ensure proper
initialisation.

## Block Access¶

Block access methods are as described in
Block Access, except that
`ConvTwoBlockCnstrnt.block_sep0`

and
`ConvTwoBlockCnstrnt.block_cat`

override
`ADMMTwoBlockCnstrnt.block_sep`

and
`ADMMTwoBlockCnstrnt.block_cat`

respectively, for the following
reason. In `ConvTwoBlockCnstrnt`

, block 0 has the same shape
as input \(\mathbf{s}\), i.e. \(N \times C \times K \times 1\)
(assuming two spatial dimensions), while block 1 has the dimensions of
\(\mathbf{x}\), i.e. \(N \times 1 \times K \times M\) (again,
assuming two spatial dimensions). In order to allow the two blocks to
be concatenated into a single array, the channel and filter axes are
swapped prior to concatenation and after separation.

## Update Steps¶

The update steps are as described in
Update Steps. Typically only the \(\mathbf{y}\)
update `ADMM.ystep`

will need to be overridden since a full
implementation of the \(\mathbf{x}\) update `ADMM.xstep`

is
provided.

## Constraint Definition¶

The constraint definition methods `ADMMTwoBlockCnstrnt.cnst_A`

,
`ADMMTwoBlockCnstrnt.cnst_AT`

,
`ADMMTwoBlockCnstrnt.cnst_B`

, and
`ADMMTwoBlockCnstrnt.cnst_c`

are inherited from
`ADMMTwoBlockCnstrnt`

, and
`ConvTwoBlockCnstrnt.cnst_A0`

,
`ConvTwoBlockCnstrnt.cnst_A0T`

, and
`ConvTwoBlockCnstrnt.cnst_c0`

defined to implement the block
form constraint

so that a derived class need typically not override any of these methods.

## Residual Evaluation¶

The residual evaluation methods `ADMMTwoBlockCnstrnt.rsdl_r`

,
`ConvTwoBlockCnstrnt.rsdl_s`

,
`ADMMTwoBlockCnstrnt.rsdl_rn`

,
`ConvTwoBlockCnstrnt.rsdl_sn`

are all appropriately defined in
terms of the constraint definition methods described above, and will
typically not need to be overridden.

## Iteration Statistics¶

The iteration statistics mechanism, as described in
Iteration Statistics, is inherited largely unchanged from
`ADMMTwoBlockCnstrnt`

.